junos-es-conf-tenants

Junos tenants configuration module

  • Version: 2019-01-01

    junos-es-conf-tenants@2019-01-01


    
      module junos-es-conf-tenants {
    
        yang-version 1;
    
        namespace
          "http://yang.juniper.net/junos-es/conf/tenants";
    
        prefix jc-tenants;
    
        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-es-conf-root {
          prefix jc;
          revision-date "2019-01-01";
        }
    
        organization "Juniper Networks, Inc.";
    
        contact "yang-support@juniper.net";
    
        description
          "Junos tenants configuration module";
    
        revision "2019-01-01" {
          description "Junos: 21.3R1.9";
        }
    
    
        augment /jc:configuration {
          uses tenants-group;
        }
    
        augment /jc:configuration/jc:groups {
          uses tenants-group;
        }
    
        grouping tenants-group {
          list tenants {
            key "name";
            description
              "Tenants defined in this system";
            uses juniper-tenant;
          }  // list tenants
        }  // grouping tenants-group
    
        grouping juniper-tenant {
          description
            "Logical system tenants configuration";
          leaf name {
            junos:must "(!("logical-systems $$"))";
            junos:must-message "Root tenant name cannot be the same as logical-system name";
            type string {
              junos:posix-pattern "![^a-zA-Z0-9-]|(^(all|.{64,})$)";
              junos:pattern-message "Tenant name is a string consisting of up to 63 letters, numbers and dashes";
            }
            description "Tenant name";
          }
    
          uses apply-advanced;
    
          container interfaces {
            description
              "Interface configuration";
            uses apply-advanced;
    
            list interface {
              key "name";
              uses tenant_interfaces_type;
            }  // list interface
          }  // container interfaces
    
          container routing-instances {
            description
              "Routing instance configuration";
            uses apply-advanced;
    
            list instance {
              key "name";
              uses juniper-routing-instance;
            }  // list instance
          }  // container routing-instances
    
          container security {
            description "Security configuration";
            uses apply-advanced;
    
            container alarms {
              description
                "Configure security alarms";
              uses apply-advanced;
    
              container audible {
                presence "enable audible";
                description
                  "Beep when new security alarms arrive";
                uses apply-advanced;
    
                leaf continuous {
                  type empty;
                  description
                    "Keep beeping until all security alarms have been cleared";
                }
              }  // container audible
    
              container potential-violation {
                description
                  "Configure potential security violations";
                uses apply-advanced;
    
                leaf authentication {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 10";
                    }
                  }
                  description
                    "Raise alarm for specified number of authentication failures";
                }
    
                leaf cryptographic-self-test {
                  type empty;
                  description
                    "Raise alarm for cryptographic self test failures";
                }
    
                container decryption-failures {
                  presence
                    "enable decryption-failures";
                  description
                    "No. of decryption failures before which an alarm needs to be raised";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000000";
                      }
                    }
                    default "1000";
                    description
                      "Threshold value [default is 1000]";
                  }
                }  // container decryption-failures
    
                container encryption-failures {
                  presence
                    "enable encryption-failures";
                  description
                    "No. of encryption failures before which an alarm needs to be raised";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000000";
                      }
                    }
                    default "1000";
                    description
                      "Threshold value [default is 1000]";
                  }
                }  // container encryption-failures
    
                container ike-phase1-failures {
                  presence
                    "enable ike-phase1-failures";
                  description
                    "No. of IKE Phase-1 failures before which an alarm needs to be raised";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000000";
                      }
                    }
                    default "20";
                    description
                      "Threshold value [default is 20]";
                  }
                }  // container ike-phase1-failures
    
                container ike-phase2-failures {
                  presence
                    "enable ike-phase2-failures";
                  description
                    "No. of IKE Phase-2 failures before which an alarm needs to be raised";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000000";
                      }
                    }
                    default "20";
                    description
                      "Threshold value [default is 20]";
                  }
                }  // container ike-phase2-failures
    
                leaf key-generation-self-test {
                  type empty;
                  description
                    "Raise alarm for key generation self test failures";
                }
    
                leaf non-cryptographic-self-test {
                  type empty;
                  description
                    "Raise alarm for non-cryptographic self test failures";
                }
    
                container policy {
                  description
                    "Raise alarm for flow policy violations";
                  uses apply-advanced;
    
                  container source-ip {
                    presence "enable source-ip";
                    description
                      "Configure source address type of policy violation";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      default "1000";
                      description
                        "Number of source IP address matches to raise alarm";
                    }
    
                    leaf duration {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 3600";
                        }
                      }
                      units "seconds";
                      default "1";
                      description
                        "Time window matches must occur within";
                    }
    
                    leaf size {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10240";
                        }
                      }
                      default "1024";
                      description
                        "Total source IP address number that can be done policy violation check concurrently";
                    }
                  }  // container source-ip
    
                  container destination-ip {
                    presence
                      "enable destination-ip";
                    description
                      "Configure destination address type of policy violation";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      default "1000";
                      description
                        "Number of destination IP address matches to raise alarm";
                    }
    
                    leaf duration {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 3600";
                        }
                      }
                      units "seconds";
                      default "1";
                      description
                        "Time window matches must occur within";
                    }
    
                    leaf size {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10240";
                        }
                      }
                      default "1024";
                      description
                        "Total destination IP address number that can be done policy violation check concurrently";
                    }
                  }  // container destination-ip
    
                  container application {
                    presence
                      "enable application";
                    description
                      "Configure application type of policy violation";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      default "1000";
                      description
                        "Number of application matches to raise alarm";
                    }
    
                    leaf duration {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 3600";
                        }
                      }
                      units "seconds";
                      default "1";
                      description
                        "Time window matches must occur within";
                    }
    
                    leaf size {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10240";
                        }
                      }
                      default "1024";
                      description
                        "Total application number that can be done policy violation check concurrently";
                    }
                  }  // container application
    
                  container policy-match {
                    presence
                      "enable policy-match";
                    description
                      "Configure policy type of policy violation";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "1 .. 4294967295";
                        }
                      }
                      default "100";
                      description
                        "Number of policy matches to raise alarm";
                    }
    
                    leaf duration {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 3600";
                        }
                      }
                      units "seconds";
                      default "1";
                      description
                        "Time window matches must occur within";
                    }
    
                    leaf size {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10240";
                        }
                      }
                      default "1024";
                      description
                        "Total concurrent number of policy check violations";
                    }
                  }  // container policy-match
                }  // container policy
    
                container replay-attacks {
                  presence
                    "enable replay-attacks";
                  description
                    "No. of Replay attacks before which an alarm needs to be raised";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000000";
                      }
                    }
                    default "1000";
                    description
                      "Replay threshold value";
                  }
                }  // container replay-attacks
    
                leaf security-log-percent-full {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "0 .. 100";
                    }
                  }
                  description
                    "Raise alarm when security log exceeds this percent capacity";
                }
    
                leaf idp {
                  type empty;
                  description
                    "Raise alarm for idp attack";
                }
              }  // container potential-violation
            }  // container alarms
    
            container log {
              description
                "Configure security log";
              uses log-object;
            }  // container log
    
            container certificates {
              description
                "X.509 certificate configuration";
              uses apply-advanced;
    
              list local {
                key "name";
                ordered-by user;
                description
                  "Local X.509 certificate configuration";
                uses certificate-object;
              }  // list local
    
              leaf path-length {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 15";
                  }
                }
                default "15";
                description
                  "Maximum certificate path length";
              }
    
              leaf maximum-certificates {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "64 .. 4294967295";
                  }
                }
                default "1024";
                description
                  "Maximum number of certificates to cache";
              }
    
              leaf cache-size {
                type string;
                units "bytes";
                description
                  "Maximum size of certificate cache";
              }
    
              leaf cache-timeout-negative {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 4294967295";
                  }
                }
                default "20";
                description
                  "Time in seconds to cache negative responses";
              }
    
              leaf enrollment-retry {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 1080";
                  }
                }
                description
                  "Number of retry attempts for an enrollment request";
              }
    
              list certification-authority {
                key "name";
                ordered-by user;
                description
                  "CA X.509 certificate configuration";
                leaf name {
                  type string {
                    junos:posix-pattern "^.{1,32}$";
                    junos:pattern-message "Must be string of 32 characters or less";
                  }
                  description "CA profile name";
                }
    
                uses apply-advanced;
    
                leaf ca-name {
                  type string;
                  description "CA name";
                }
    
                leaf file {
                  type string;
                  description
                    "File to read certificate from";
                }
    
                leaf crl {
                  type string;
                  description
                    "File to read crl from";
                }
    
                leaf enrollment-url {
                  type string;
                  description "URL";
                }
    
                leaf ldap-url {
                  type string;
                  description "URL";
                }
    
                leaf encoding {
                  type enumeration {
                    enum "binary" {
                      value 0;
                      description "DER encoding";
                    }
                    enum "pem" {
                      value 1;
                      description
                        "Privacy-enhanced-mail encoding, base64";
                    }
                  }
                  default "binary";
                  description
                    "Encoding to use for certificate or CRL on disk";
                }
              }  // list certification-authority
            }  // container certificates
    
            container authentication-key-chains {
              description
                "Authentication key chain configuration";
              uses security-authentication-key-chains;
            }  // container authentication-key-chains
    
            container ssh-known-hosts {
              description "SSH known host list";
              uses apply-advanced;
    
              list host {
                key "name";
                ordered-by user;
                description
                  "SSH known host entry";
                leaf name {
                  type string;
                  description "Host name";
                }
    
                uses apply-advanced;
    
                leaf rsa1-key {
                  type string;
                  description
                    "Base64 encoded RSA key (protocol version 1)";
                }
    
                leaf rsa-key {
                  type string;
                  description
                    "Base64 encoded RSA key";
                }
    
                leaf dsa-key {
                  type string;
                  description
                    "Base64 encoded DSA key";
                }
    
                leaf ecdsa-key {
                  type string;
                  status deprecated;
                  description
                    "Base64 encoded ECDSA key";
                }
    
                leaf ecdsa-sha2-nistp256-key {
                  type string;
                  description
                    "Base64 encoded ECDSA-SHA2-NIST256 key";
                }
    
                leaf ecdsa-sha2-nistp384-key {
                  type string;
                  description
                    "Base64 encoded ECDSA-SHA2-NIST384 key";
                }
    
                leaf ecdsa-sha2-nistp521-key {
                  type string;
                  description
                    "Base64 encoded ECDSA-SHA2-NIST521 key";
                }
    
                leaf ed25519-key {
                  type string;
                  description
                    "Base64 encoded ED25519 key";
                }
              }  // list host
            }  // container ssh-known-hosts
    
            container pki {
              presence "enable pki";
              description
                "PKI service configuration";
              uses security-pki;
            }  // container pki
    
            container ike {
              description "IKE configuration";
              uses security-ike;
            }  // container ike
    
            container ipsec {
              description "IPSec configuration";
              uses security-ipsec-vpn;
            }  // container ipsec
    
            container group-vpn {
              description
                "Group VPN configuration";
              uses security-group-vpn;
            }  // container group-vpn
    
            container ipsec-policy {
              description
                "IPSec policy configuration";
              uses security-ipsec-policies;
            }  // container ipsec-policy
    
            container distribution-profile {
              description
                "IPSec Tunnels distribution profile";
              uses apply-advanced;
    
              leaf fat-core {
                type empty;
                description
                  "Power Mode IPSec fat-tunnel mode";
              }
            }  // container distribution-profile
    
            container idp {
              description "Configure IDP";
              list idp-policy {
                key "name";
                ordered-by user;
                description
                  "Configure IDP policy";
                uses idp-policy-type;
              }  // list idp-policy
    
              leaf active-policy {
                junos:must "("security idp idp-policy $$")";
                junos:must-message "Policy must be defined under [security idp idp-policy] ";
                type string;
                status deprecated;
                description "Set active policy";
              }
    
              leaf default-policy {
                junos:must "("security idp idp-policy $$")";
                junos:must-message "Policy must be defined under [security idp idp-policy] ";
                type string;
                description "Set active policy";
              }
    
              list custom-attack {
                key "name";
                ordered-by user;
                description
                  "Configure custom attacks";
                uses custom-attack-type;
              }  // list custom-attack
    
              list custom-attack-group {
                key "name";
                ordered-by user;
                description
                  "Configure custom attack groups";
                uses custom-attack-group-type;
              }  // list custom-attack-group
    
              list dynamic-attack-group {
                key "name";
                ordered-by user;
                description
                  "Configure dynamic attack groups";
                uses dynamic-attack-group-type;
              }  // list dynamic-attack-group
    
              container traceoptions {
                description
                  "Trace options for idp services";
                uses idpd-traceoptions-type;
              }  // container traceoptions
    
              container security-package {
                description
                  "Security package options";
                uses apply-advanced;
    
                leaf url {
                  type string;
                  description
                    "URL of Security package download";
                }
    
                leaf source-address {
                  type jt:ipv4addr;
                  description
                    "Source address to be used for sending download request";
                }
    
                leaf proxy-profile {
                  junos:must "("services proxy profile $$")";
                  junos:must-message "Referenced Proxy profile must be defined under [services proxy profile] path";
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Proxy profile of security package download";
                }
    
                leaf routing-instance {
                  junos:must "("routing-instances $$")";
                  junos:must-message "Routing-instance must be defined";
                  type string;
                  description
                    "Routing instance for security-package download";
                }
    
                container install {
                  presence "enable install";
                  description
                    "Configure install command";
                  uses apply-advanced;
    
                  leaf ignore-version-check {
                    type empty;
                    description
                      "Skip version check  when attack database gets installed";
                  }
    
                  leaf ignore-appid-failure {
                    type empty;
                    description
                      "Continue idp installation even if appid installation fails";
                  }
                }  // container install
    
                container automatic {
                  presence "enable automatic";
                  description
                    "Scheduled download and update";
                  uses apply-advanced;
    
                  leaf start-time {
                    type jt:time;
                    description
                      "Start time (YYYY-MM-DD.HH:MM:SS)";
                  }
    
                  leaf interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 336";
                      }
                    }
                    units "hours";
                    description "Interval";
                  }
    
                  leaf download-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 60";
                      }
                    }
                    units "minutes";
                    default "1";
                    status deprecated;
                    description
                      "Maximum time for download to complete";
                  }
    
                  choice enable-disable {
                    leaf enable {
                      type empty;
                      description "Enable";
                    }
                  }  // choice enable-disable
                }  // container automatic
              }  // container security-package
    
              container sensor-configuration {
                description
                  "IDP Sensor Configuration";
                container log {
                  description
                    "IDP Log Configuration";
                  uses apply-advanced;
    
                  leaf cache-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description "Log cache size";
                  }
    
                  container suppression {
                    presence
                      "enable suppression";
                    description
                      "Log suppression";
                    uses apply-advanced;
    
                    choice enable-disable {
                      leaf disable {
                        type empty;
                        description
                          "Disable log suppression";
                      }
                    }  // choice enable-disable
    
                    choice include-destination-address-choice {
                      leaf include-destination-address {
                        type empty;
                        description
                          "Include destination address while performing a log suppression";
                      }
                      leaf no-include-destination-address {
                        type empty;
                        description
                          "Don't include destination address while performing a log suppression";
                      }
                    }  // choice include-destination-address-choice
    
                    leaf start-log {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                      description
                        "Suppression start log";
                    }
    
                    leaf max-logs-operate {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                      description
                        "Maximum logs can be operate on";
                    }
    
                    leaf max-time-report {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                      description
                        "Time after suppressed logs will be reported";
                    }
                  }  // container suppression
                }  // container log
    
                container packet-log {
                  description
                    "IDP Packetlog Configuration";
                  uses apply-advanced;
    
                  container total-memory {
                    description
                      "Total memory unit(%)";
                    uses apply-advanced;
    
                    leaf percentage-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                    }
    
                    leaf per-logical-domain {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                    }
                  }  // container total-memory
    
                  container max-sessions {
                    description
                      "Max num of sessions in unit(%)";
                    uses apply-advanced;
    
                    leaf percentage-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                    }
    
                    leaf per-logical-domain {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32;
                      }
                    }
                  }  // container max-sessions
    
                  leaf threshold-logging-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Interval of logs for max limit session/memory reached in minutes";
                  }
    
                  leaf source-address {
                    type jt:ipv4addr;
                    description
                      "Source IP address used to transport packetlog to a host";
                  }
    
                  container host {
                    description
                      "Destination host to send packetlog to";
                    uses apply-advanced;
    
                    leaf ipaddr {
                      type jt:ipv4addr;
                      description "IP address";
                    }
    
                    leaf port {
                      type union {
                        type uint16;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "UDP port number";
                    }
                  }  // container host
                }  // container packet-log
    
                container application-identification {
                  presence
                    "enable application-identification";
                  description
                    "Application identification";
                  uses apply-advanced;
    
                  choice enable-disable {
                    leaf disable {
                      type empty;
                      description
                        "Disable application identification";
                    }
                  }  // choice enable-disable
    
                  choice application-system-cache-choice {
                    leaf application-system-cache {
                      type empty;
                      description
                        "Application system cache";
                    }
                    leaf no-application-system-cache {
                      type empty;
                      description
                        "Don't application system cache";
                    }
                  }  // choice application-system-cache-choice
    
                  leaf max-tcp-session-packet-memory {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Max TCP session memory";
                  }
    
                  leaf max-udp-session-packet-memory {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Max UDP session memory";
                  }
    
                  leaf max-sessions {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Max sessions that can run AI at the same time";
                  }
    
                  leaf max-packet-memory {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Max packet memory";
                  }
    
                  leaf max-packet-memory-ratio {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Max packet memory ratio";
                  }
    
                  leaf max-reass-packet-memory-ratio {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Max reass packet memory ratio";
                  }
    
                  leaf application-system-cache-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Application system cache timeout";
                  }
                }  // container application-identification
    
                container flow {
                  description
                    "Flow configuration";
                  uses apply-advanced;
    
                  choice log-errors-choice {
                    leaf log-errors {
                      type empty;
                      description
                        "Flow log errors";
                    }
                    leaf no-log-errors {
                      type empty;
                      description
                        "Don't flow log errors";
                    }
                  }  // choice log-errors-choice
    
                  choice allow-icmp-without-flow-choice {
                    leaf allow-icmp-without-flow {
                      type empty;
                      status deprecated;
                      description
                        "Allow icmp without flow";
                    }
                    leaf no-allow-icmp-without-flow {
                      type empty;
                      status deprecated;
                      description
                        "Don't allow icmp without flow";
                    }
                  }  // choice allow-icmp-without-flow-choice
    
                  leaf hash-table-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Flow hash table size";
                  }
    
                  leaf reject-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Flow reject timeout";
                  }
    
                  leaf max-timers-poll-ticks {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum timers poll ticks";
                  }
    
                  leaf fifo-max-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum fifo size";
                  }
    
                  leaf udp-anticipated-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum udp anticipated timeout";
                  }
    
                  leaf drop-on-limit {
                    type empty;
                    description
                      "Drop connections on exceeding resource limits";
                  }
    
                  leaf drop-on-failover {
                    type empty;
                    description
                      "Drop traffic on HA failover sessions";
                  }
    
                  leaf drop-if-no-policy-loaded {
                    type empty;
                    description
                      "Drop all traffic till IDP policy gets loaded";
                  }
    
                  leaf max-sessions-offset {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum session offset limit percentage";
                  }
    
                  leaf min-objcache-limit-lt {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Memory lower threshold limit percentage";
                  }
    
                  leaf min-objcache-limit-ut {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Memory upper threshold limit percentage";
                  }
    
                  leaf session-steering {
                    type empty;
                    description
                      "Session steering for session anticipation";
                  }
    
                  leaf idp-bypass-cpu-usg-overload {
                    type empty;
                    description
                      "Enable IDP bypass of sessions/packets on CPU usage overload";
                  }
    
                  leaf idp-bypass-cpu-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "85";
                    description
                      "Threshold of CPU usage in percentage for IDP bypass";
                  }
    
                  leaf idp-bypass-cpu-tolerance {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "5";
                    description
                      "Tolerance of CPU usage in percentage for IDP bypass";
                  }
    
                  leaf intel-inspect-enable {
                    type empty;
                    description
                      "Minimizes IDP processing during system overload";
                  }
    
                  leaf intel-inspect-cpu-usg-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "80";
                    description
                      "CPU usage threshold percentage for intelligent inspection";
                  }
    
                  leaf intel-inspect-cpu-usg-tolerance {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "5";
                    description
                      "CPU usage tolerance percentage for intelligent inspection";
                  }
    
                  leaf intel-inspect-free-mem-threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "15";
                    description
                      "Free memory threshold percentage for intelligent inspection";
                  }
    
                  leaf intel-inspect-mem-tolerance {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "5";
                    description
                      "Memory tolerance percentage for intelligent inspection";
                  }
    
                  leaf intel-inspect-disable-content-decompress {
                    type empty;
                    description
                      "Disables payload content decompression";
                  }
    
                  leaf intel-inspect-session-bytes-depth {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "0";
                    description
                      "Session bytes scanning depth";
                  }
    
                  leaf-list intel-inspect-protocols {
                    type string;
                    ordered-by user;
                    description
                      "Protocols to be processed in Intelligent Inspection mode";
                  }
    
                  leaf-list intel-inspect-signature-severity {
                    junos:must "("security idp sensor-configuration flow intel-inspect-enable")";
                    junos:must-message "intelligent inspection must be enabled under [security idp sensor-configuration flow]";
                    type enumeration {
                      enum "minor" {
                        value 0;
                      }
                      enum "major" {
                        value 1;
                      }
                      enum "critical" {
                        value 2;
                      }
                    }
                    ordered-by user;
                    description
                      "Signature severities to be considered for IDP processing";
                  }
                }  // container flow
    
                container re-assembler {
                  description
                    "Re-assembler configuration";
                  uses apply-advanced;
    
                  choice drop-on-syn-in-window-choice {
                    leaf drop-on-syn-in-window {
                      type empty;
                      description
                        "Drop session when SYN is seen in the window";
                    }
                    leaf no-drop-on-syn-in-window {
                      type empty;
                      description
                        "Don't drop session when SYN is seen in the window";
                    }
                  }  // choice drop-on-syn-in-window-choice
    
                  choice ignore-memory-overflow-choice {
                    leaf ignore-memory-overflow {
                      type empty;
                      description
                        "Ignore memory overflow";
                    }
                    leaf no-ignore-memory-overflow {
                      type empty;
                      description
                        "Don't ignore memory overflow";
                    }
                  }  // choice ignore-memory-overflow-choice
    
                  choice ignore-reassembly-memory-overflow-choice {
                    leaf ignore-reassembly-memory-overflow {
                      type empty;
                      description
                        "Ignore packet reassembly memory overflow";
                    }
                    leaf no-ignore-reassembly-memory-overflow {
                      type empty;
                      description
                        "Don't ignore packet reassembly memory overflow";
                    }
                  }  // choice ignore-reassembly-memory-overflow-choice
    
                  leaf ignore-reassembly-overflow {
                    type empty;
                    description
                      "Ignore global reassembly overflow";
                  }
    
                  leaf max-packet-mem {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    status deprecated;
                    description
                      "Maximum packet memory";
                  }
    
                  leaf max-flow-mem {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum flow memory";
                  }
    
                  leaf max-packet-mem-ratio {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum packet memory ratio";
                  }
    
                  leaf action-on-reassembly-failure {
                    type enumeration {
                      enum "ignore" {
                        value 0;
                        description
                          "No action is taken.";
                      }
                      enum "drop" {
                        value 1;
                        description
                          "Drop the packet.";
                      }
                      enum "drop-session" {
                        value 2;
                        description
                          "Drop the session.";
                      }
                    }
                    default "drop";
                    description
                      "Select the action on reassembly failures";
                  }
    
                  choice tcp-error-logging-choice {
                    leaf tcp-error-logging {
                      type empty;
                      description
                        "Enable logging on tcp errors";
                    }
                    leaf no-tcp-error-logging {
                      type empty;
                      description
                        "Don't enable logging on tcp errors";
                    }
                  }  // choice tcp-error-logging-choice
    
                  leaf max-synacks-queued {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum syn-acks queued with different SEQ numbers ";
                  }
    
                  choice force-tcp-window-checks-choice {
                    leaf force-tcp-window-checks {
                      type empty;
                      description
                        "Force TCP window checks if uni-directional policy is configured";
                    }
                    leaf no-force-tcp-window-checks {
                      type empty;
                      description
                        "Don't force TCP window checks if uni-directional policy is configured";
                    }
                  }  // choice force-tcp-window-checks-choice
                }  // container re-assembler
    
                container ips {
                  description
                    "Ips configuration";
                  uses apply-advanced;
    
                  choice process-override-choice {
                    leaf process-override {
                      type empty;
                      description
                        "Process override";
                    }
                    leaf no-process-override {
                      type empty;
                      description
                        "Don't process override";
                    }
                  }  // choice process-override-choice
    
                  choice detect-shellcode-choice {
                    leaf detect-shellcode {
                      type empty;
                      description
                        "Detect shellcode";
                    }
                    leaf no-detect-shellcode {
                      type empty;
                      description
                        "Don't detect shellcode";
                    }
                  }  // choice detect-shellcode-choice
    
                  choice process-ignore-s2c-choice {
                    leaf process-ignore-s2c {
                      type empty;
                      description
                        "Process ignore s2c";
                    }
                    leaf no-process-ignore-s2c {
                      type empty;
                      description
                        "Don't process ignore s2c";
                    }
                  }  // choice process-ignore-s2c-choice
    
                  choice ignore-regular-expression-choice {
                    leaf ignore-regular-expression {
                      type empty;
                      description
                        "Ignore regular expression";
                    }
                    leaf no-ignore-regular-expression {
                      type empty;
                      description
                        "Don't ignore regular expression";
                    }
                  }  // choice ignore-regular-expression-choice
    
                  leaf process-port {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description "Process port";
                  }
    
                  leaf fifo-max-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum fifo size";
                  }
    
                  leaf log-supercede-min {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Minimum log supercede";
                  }
    
                  leaf content-decompression-max-memory-kb {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum memory usage in kilo bytes";
                  }
    
                  leaf content-decompression-max-ratio {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Maximum decompression ratio supported";
                  }
    
                  leaf session-pkt-depth {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Session pkt scanning depth";
                  }
                }  // container ips
    
                container global {
                  description
                    "Global configuration";
                  uses apply-advanced;
    
                  choice enable-packet-pool-choice {
                    leaf enable-packet-pool {
                      type empty;
                      description
                        "Enable packet pool";
                    }
                    leaf no-enable-packet-pool {
                      type empty;
                      description
                        "Don't enable packet pool";
                    }
                  }  // choice enable-packet-pool-choice
    
                  leaf log-xff-header {
                    type empty;
                    description "Log xff header";
                  }
    
                  choice enable-all-qmodules-choice {
                    leaf enable-all-qmodules {
                      type empty;
                      description
                        "Enable all qmodules";
                    }
                    leaf no-enable-all-qmodules {
                      type empty;
                      description
                        "Don't enable all qmodules";
                    }
                  }  // choice enable-all-qmodules-choice
    
                  choice policy-lookup-cache-choice {
                    leaf policy-lookup-cache {
                      type empty;
                      description
                        "Policy lookup cache";
                    }
                    leaf no-policy-lookup-cache {
                      type empty;
                      description
                        "Don't policy lookup cache";
                    }
                  }  // choice policy-lookup-cache-choice
    
                  leaf memory-limit-percent {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    description
                      "Memory limit percentage";
                  }
    
                  leaf disable-idp-processing {
                    type empty;
                    description
                      "Flag to disable IDP processing";
                  }
    
                  leaf intelligent-offload {
                    type enumeration {
                      enum "disable" {
                        value 0;
                        description
                          "Disable flow offload";
                      }
                      enum "conservative" {
                        value 1;
                        description
                          "Increases scrutiny of flows prior to offload";
                      }
                    }
                    description
                      "Intelligently offload the flow";
                  }
                }  // container global
    
                container detector {
                  description
                    "Detector Configuration";
                  uses apply-advanced;
    
                  list protocol-name {
                    key "name";
                    ordered-by user;
                    description
                      "Apropriate help string";
                    uses proto-object;
                  }  // list protocol-name
                }  // container detector
    
                container ssl-inspection {
                  description "SSL inspection";
                  uses apply-advanced;
    
                  leaf sessions {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "10000";
                    description
                      "Number of SSL sessions to inspect";
                  }
    
                  leaf session-id-cache-timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    units "seconds";
                    default "600";
                    description
                      "Timeout value for SSL session ID cache";
                  }
    
                  leaf maximum-cache-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    units "sessions";
                    default "100000";
                    description
                      "Maximum SSL session ID cache size";
                  }
    
                  leaf cache-prune-chunk-size {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "100";
                    description
                      "Number of cache entries to delete when pruning SSL session ID cache";
                  }
    
                  leaf key-protection {
                    type empty;
                    description
                      "Enable SSL key protection";
                  }
                }  // container ssl-inspection
    
                leaf disable-low-memory-handling {
                  type empty;
                  description
                    "Do not abort IDP operations under low memory condition";
                }
    
                container high-availability {
                  description
                    "High availability configuration";
                  uses apply-advanced;
    
                  leaf no-policy-cold-synchronization {
                    type empty;
                    description
                      "Disable policy cold synchronization";
                  }
                }  // container high-availability
    
                container security-configuration {
                  description
                    "IDP security configuration";
                  uses apply-advanced;
    
                  leaf protection-mode {
                    type enumeration {
                      enum "datacenter" {
                        value 0;
                        description
                          "Security protection mode for datacenter";
                      }
                      enum "datacenter-full" {
                        value 1;
                        description
                          "Full security protection mode for datacenter";
                      }
                      enum "perimeter" {
                        value 2;
                        description
                          "Security protection mode for perimeter";
                      }
                      enum "perimeter-full" {
                        value 3;
                        description
                          "Full security protection mode for perimeter";
                      }
                    }
                    description
                      "Enable security protection mode";
                  }
                }  // container security-configuration
              }  // container sensor-configuration
    
              leaf max-sessions {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Max number of IDP sessions";
              }
    
              list logical-system {
                key "name";
                ordered-by user;
                description
                  "Configure max IDP sessions for the logial system";
                uses logical-system-type;
              }  // list logical-system
    
              list tenant-system {
                key "name";
                ordered-by user;
                description
                  "Configure max IDP sessions for the tenant";
                uses tenant-system-type;
              }  // list tenant-system
    
              uses apply-advanced;
    
              container processes {
                description
                  "Configure IDP Processes";
                uses apply-advanced;
              }  // container processes
            }  // container idp
    
            list address-book {
              key "name";
              max-elements 4096;
              ordered-by user;
              description
                "Security address book";
              uses named-address-book-type;
            }  // list address-book
    
            container alg {
              description
                "Configure ALG security options";
              uses alg-object;
            }  // container alg
    
            container application-firewall {
              presence
                "enable application-firewall";
              status deprecated;
              description
                "Configure application-firewall rule-sets";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Rule-sets Tracing 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 "configuration" {
                        value 0;
                        description
                          "Trace configuration events";
                      }
                      enum "lookup" {
                        value 1;
                        description
                          "Trace lookup events";
                      }
                      enum "compilation" {
                        value 2;
                        description
                          "Rule-sets compilation events";
                      }
                      enum "ipc" {
                        value 3;
                        description
                          "Inter-process communication events";
                      }
                      enum "all" {
                        value 4;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Configure application-firewall profile";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Surf control integrated profile name";
                }
    
                uses apply-advanced;
    
                container block-message {
                  description
                    "Block message settings";
                  uses apply-advanced;
    
                  container type {
                    description
                      "Type of block message desired";
                    uses apply-advanced;
    
                    choice type-choice {
                      container custom-text {
                        description
                          "Custom defined block message";
                        uses apply-advanced;
    
                        leaf content {
                          type string {
                            length "1 .. 511";
                          }
                          description
                            "Content of custom-text";
                        }
                      }  // container custom-text
                      container custom-redirect-url {
                        description
                          "Custom redirect URL server";
                        uses apply-advanced;
    
                        leaf content {
                          type string {
                            junos:posix-pattern "^https?://.*";
                            junos:pattern-message "URL must begin with http:// or https://";
                            length "1 .. 1023";
                          }
                          description
                            "URL of block message";
                        }
                      }  // container custom-redirect-url
                    }  // choice type-choice
                  }  // container type
                }  // container block-message
              }  // list profile
    
              list rule-sets {
                key "name";
                ordered-by user;
                description
                  "Configure application-firewall rule-sets";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Application firewall rule-set name";
                }
    
                uses apply-advanced;
    
                list rule {
                  key "name";
                  ordered-by user;
                  description "Rule";
                  uses appfw_rule_type;
                }  // list rule
    
                container default-rule {
                  presence "enable default-rule";
                  description
                    "Specify default rule for a rule-set";
                  uses apply-advanced;
    
                  choice action {
                    leaf permit {
                      type empty;
                      description
                        "Permit packets";
                    }
                    container deny {
                      presence "enable deny";
                      description "Deny packets";
                      uses apply-advanced;
    
                      leaf block-message {
                        type empty;
                        description
                          "Block message";
                      }
                    }  // container deny
                    container reject {
                      presence "enable reject";
                      description
                        "Reject packets";
                      uses apply-advanced;
    
                      leaf block-message {
                        type empty;
                        description
                          "Block message";
                      }
                    }  // container reject
                  }  // choice action
                }  // container default-rule
    
                leaf profile {
                  junos:must "("security application-firewall profile $$")";
                  junos:must-message "Application-firewall profile must be defined";
                  type string;
                  description
                    "Profile for block message";
                }
              }  // list rule-sets
    
              container nested-application {
                presence
                  "enable nested-application";
                status deprecated;
                description
                  "Configure nested application dynamic lookup";
                uses apply-advanced;
    
                container dynamic-lookup {
                  presence
                    "enable dynamic-lookup";
                  description
                    "Configure dynamic lookup";
                  uses apply-advanced;
    
                  leaf enable {
                    type empty;
                    description
                      "Enable dynamic lookup";
                  }
                }  // container dynamic-lookup
              }  // container nested-application
            }  // container application-firewall
    
            container application-tracking {
              presence
                "enable application-tracking";
              description
                "Application tracking configuration";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable Application tracking";
              }
    
              choice update-interval {
                leaf first-update-interval {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Interval when the first update message is sent";
                }
                leaf first-update {
                  type empty;
                  status deprecated;
                  description
                    "Generate Application tracking initial message when a session is created";
                }
              }  // choice update-interval
    
              leaf session-update-interval {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "minutes";
                description
                  "Frequency in which Application tracking update messages are generated";
              }
    
              leaf log-session-create {
                type empty;
                description
                  "Generate Application tracking session create log";
              }
    
              leaf log-session-close {
                type empty;
                description
                  "Generate Application tracking session close log";
              }
    
              leaf no-volume-updates {
                type empty;
                description
                  "Disable session volume update log";
              }
            }  // container application-tracking
    
            container utm {
              description
                "Content security service configuration";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Trace options for utm";
                uses utm-traceoptions;
              }  // container traceoptions
    
              container application-proxy {
                description
                  "Application proxy settings";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Trace options for application proxy";
                  uses utm-apppxy-traceoptions;
                }  // container traceoptions
              }  // container application-proxy
    
              container ipc {
                description "IPC settings";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Trace options for IPC";
                  uses utm-ipc-traceoptions;
                }  // container traceoptions
              }  // container ipc
    
              container custom-objects {
                description
                  "Custom-objects settings";
                uses apply-advanced;
    
                container category-package {
                  description
                    "Category package download and install options";
                  uses apply-advanced;
    
                  leaf url {
                    type string;
                    description
                      "HTTPS URL of category package download";
                  }
    
                  leaf proxy-profile {
                    junos:must "("services proxy profile $$")";
                    junos:must-message "Referenced Proxy profile must be defined";
                    type string {
                      length "1 .. 64";
                    }
                    description "Proxy profile";
                  }
    
                  leaf routing-instance {
                    junos:must "("routing-instances $$")";
                    junos:must-message "Routing-instance must be defined";
                    type string;
                    description
                      "Routing instance name";
                  }
    
                  container automatic {
                    description
                      "Scheduled download and install";
                    uses apply-advanced;
    
                    leaf start-time {
                      type jt:time;
                      description
                        "Start time (YYYY-MM-DD.HH:MM:SS)";
                    }
    
                    leaf interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 336";
                        }
                      }
                      default "168";
                      description
                        "Interval in hours";
                    }
    
                    leaf enable {
                      type empty;
                      description
                        "Enable automatic download and install";
                    }
                  }  // container automatic
                }  // container category-package
    
                list mime-pattern {
                  key "name";
                  ordered-by user;
                  description
                    "Configure mime-list object";
                  uses mime-list-type;
                }  // list mime-pattern
    
                list filename-extension {
                  key "name";
                  ordered-by user;
                  description
                    "Configure extension-list object";
                  uses extension-list-type;
                }  // list filename-extension
    
                list url-pattern {
                  key "name";
                  ordered-by user;
                  description
                    "Configure url-list object";
                  uses url-list-type;
                }  // list url-pattern
    
                list custom-url-category {
                  key "name";
                  ordered-by user;
                  description
                    "Configure category-list object";
                  uses category-list-type;
                }  // list custom-url-category
    
                list protocol-command {
                  key "name";
                  ordered-by user;
                  description
                    "Configure command-list object";
                  uses command-list-type;
                }  // list protocol-command
    
                list custom-message {
                  key "name";
                  ordered-by user;
                  description
                    "Configure custom-message object";
                  uses custom-message-type;
                }  // list custom-message
              }  // container custom-objects
    
              container default-configuration {
                description
                  "Global default UTM configurations";
                uses apply-advanced;
    
                container anti-virus {
                  description
                    "Configure anti-virus feature";
                  uses default-anti-virus-feature;
                }  // container anti-virus
    
                container web-filtering {
                  description
                    "Configure web-filtering feature";
                  uses default-webfilter-feature;
                }  // container web-filtering
    
                container anti-spam {
                  description
                    "Configure anti-spam feature";
                  uses default-anti-spam-feature;
                }  // container anti-spam
    
                container content-filtering {
                  description
                    "Configure content filtering feature";
                  uses default-content-filtering-feature;
                }  // container content-filtering
              }  // container default-configuration
    
              container feature-profile {
                description
                  "Feature-profile settings";
                uses apply-advanced;
    
                container anti-virus {
                  description
                    "Configure anti-virus feature";
                  uses anti-virus-feature;
                }  // container anti-virus
    
                container web-filtering {
                  description
                    "Configure web-filtering feature";
                  uses webfilter-feature;
                }  // container web-filtering
    
                container anti-spam {
                  description
                    "Configure anti-spam feature";
                  uses anti-spam-feature;
                }  // container anti-spam
    
                container content-filtering {
                  description
                    "Configure content filtering feature";
                  uses content-filtering-feature;
                }  // container content-filtering
              }  // container feature-profile
    
              list utm-policy {
                key "name";
                ordered-by user;
                description "Configure profile ";
                uses profile-setting;
              }  // list utm-policy
            }  // container utm
    
            container dynamic-address {
              presence "enable dynamic-address";
              description
                "Configure security dynamic address";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Security dynamic address tracing 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
    
                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";
                    }
                  }
                  description
                    "Level of debugging output";
                }
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Tracing parameters";
                  leaf name {
                    type enumeration {
                      enum "configuration" {
                        value 0;
                        description
                          "Configuration details";
                      }
                      enum "control" {
                        value 1;
                        description
                          "Daemon control message";
                      }
                      enum "ipc" {
                        value 2;
                        description
                          "IPC message sending and receiving";
                      }
                      enum "ip-entry" {
                        value 3;
                        description
                          "IP entry management";
                      }
                      enum "file-retrieval" {
                        value 4;
                        description
                          "File retrieval";
                      }
                      enum "lookup" {
                        value 5;
                        description
                          "Lookup detail";
                      }
                      enum "all" {
                        value 6;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list feed-server {
                key "name";
                ordered-by user;
                description
                  "Security dynamic address feed-server";
                leaf name {
                  type string {
                    junos:posix-pattern "^[[:alnum:]._-]+$";
                    junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                    length "1 .. 16";
                  }
                  description
                    "Security dynamic address feed-server name";
                }
    
                uses apply-advanced;
    
                leaf description {
                  type string {
                    junos:posix-pattern "^[^&<>
    ]+$";
                    junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                    length "1 .. 900";
                  }
                  description
                    "Text description of feed-server";
                }
    
                choice hostname-or-url {
                  leaf hostname {
                    type string {
                      length "1 .. 256";
                    }
                    description
                      "Hostname or IP address of feed-server";
                  }
                  leaf url {
                    type string {
                      length "1 .. 256";
                    }
                    description
                      "URL,example:example.url.com;1.1.1.1/<folder-or-file-path>;Browser can verify its validity";
                  }
                }  // choice hostname-or-url
    
                leaf update-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "30 .. 4294967295";
                    }
                  }
                  units "seconds";
                  default "300";
                  description
                    "Interval to retrieve update";
                }
    
                leaf hold-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4294967295";
                    }
                  }
                  units "seconds";
                  default "86400";
                  description
                    "Time to keep IP entry when update failed";
                }
    
                leaf tls-profile {
                  junos:must "("services ssl initiation profile $$")";
                  junos:must-message "Referenced SSL initiation profile is not defined";
                  type string;
                  description "TLS profile";
                }
    
                container validate-certificate-attributes {
                  junos:must "(".. tls-profile")";
                  junos:must-message "tls-profile is not configured";
                  description
                    "Validate some certificate attributes";
                  uses apply-advanced;
    
                  leaf subject-or-subject-alternative-names {
                    type empty;
                    description
                      "One of them must match feed server host name";
                  }
                }  // container validate-certificate-attributes
    
                list feed-name {
                  key "name";
                  ordered-by user;
                  description
                    "Feed name in feed-server";
                  leaf name {
                    type string {
                      junos:posix-pattern "^[[:alnum:]._-]+$";
                      junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                      length "1 .. 240";
                    }
                    description
                      "Security dynamic address feed name in feed-server";
                  }
    
                  uses apply-advanced;
    
                  leaf description {
                    type string {
                      junos:posix-pattern "^[^&<>
    ]+$";
                      junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                      length "1 .. 900";
                    }
                    description
                      "Text description of feed in feed-server";
                  }
    
                  leaf path {
                    type string {
                      length "1 .. 1024";
                    }
                    description
                      "Path of feed, appended to feed-server to form a complete URL";
                  }
    
                  leaf update-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "30 .. 4294967295";
                      }
                    }
                    units "seconds";
                    description
                      "Interval to retrieve update";
                  }
    
                  leaf hold-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 4294967295";
                      }
                    }
                    units "seconds";
                    description
                      "Time to keep IP entry when update failed";
                  }
                }  // list feed-name
              }  // list feed-server
    
              list address-name {
                key "name";
                ordered-by user;
                description
                  "Security dynamic address name";
                leaf name {
                  type string {
                    junos:posix-pattern "^[[:alnum:]._-]+$";
                    junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                    length "1 .. 240";
                  }
                  description
                    "Security dynamic address name";
                }
    
                uses apply-advanced;
    
                leaf description {
                  type string {
                    junos:posix-pattern "^[^&<>
    ]+$";
                    junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                    length "1 .. 900";
                  }
                  description
                    "Text description of dynamic address";
                }
    
                container profile {
                  presence "enable profile";
                  description
                    "Information to categorize feed data into this dynamic address";
                  uses apply-advanced;
    
                  list feed-name {
                    key "name";
                    max-elements 1;
                    ordered-by user;
                    description
                      "Name of feed in feed-server for this dynamic address";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                        length "1 .. 240";
                      }
                      description
                        "Name of feed in feed-server which is mapped to this dynamic address";
                    }
    
                    uses apply-advanced;
                  }  // list feed-name
    
                  list category {
                    junos:must "(!(".. feed-name"))";
                    junos:must-message "Feed-name can not coexist with category";
                    key "name";
                    max-elements 1;
                    ordered-by user;
                    description
                      "Name of category";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                        length "1 .. 32";
                      }
                      description
                        "Name of category";
                    }
    
                    uses apply-advanced;
    
                    leaf feed {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                        length "1 .. 32";
                      }
                      description
                        "Name of feed under category";
                    }
    
                    list property {
                      key "name";
                      max-elements 3;
                      ordered-by user;
                      description
                        "Property to match";
                      leaf name {
                        type string {
                          length "1 .. 32";
                        }
                        description
                          "Name of property";
                      }
    
                      uses apply-advanced;
    
                      choice property-value {
                        list string {
                          key "name";
                          max-elements 256;
                          ordered-by user;
                          description
                            "Value type is strings";
                          leaf name {
                            type string {
                              length "1 .. 32";
                            }
                            description
                              "String value";
                          }
    
                          uses apply-advanced;
                        }  // list string
                      }  // choice property-value
                    }  // list property
                  }  // list category
                }  // container profile
    
                leaf session-scan {
                  type empty;
                  description
                    "Trigger session scan when the IP address is added";
                }
              }  // list address-name
    
              container session-scan {
                presence "enable session-scan";
                description
                  "Trigger session scan for all the dynamic addresses";
                uses apply-advanced;
    
                leaf hold-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 3600";
                    }
                  }
                  units "seconds";
                  default "10";
                  description
                    "Time interval before the session scan request";
                }
              }  // container session-scan
            }  // container dynamic-address
    
            container dynamic-vpn {
              status deprecated;
              description
                "Configure dynamic VPN";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Dynamic-vpn trace options";
                uses httpd_dvpn_traceoptions_type;
              }  // container traceoptions
    
              leaf force-upgrade {
                type empty;
                description "Force Upgrade";
              }
    
              leaf access-profile {
                junos:must "("access profile $$")";
                junos:must-message "Access profile must be defined";
                type string;
                description "Configure access";
              }
    
              leaf-list interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                ordered-by user;
                description
                  "Interfaces that accept Dynamic-VPN client access";
              }
    
              list clients {
                key "name";
                ordered-by user;
                description
                  "Configure for remote access client";
                uses clients-object;
              }  // list clients
    
              leaf config-check {
                type empty;
                description
                  "Perform extra configuration validation";
              }
            }  // container dynamic-vpn
    
            container remote-access {
              junos:must "(("system services web-management" && "access firewall-authentication"))";
              junos:must-message "web-management and firewall-authentication must be enabled for remote-access";
              description
                "Configure remote access";
              uses apply-advanced;
    
              container global-options {
                description
                  "Global remote-access configuration";
                uses apply-advanced;
    
                leaf auth-token-valid-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 300";
                    }
                  }
                  units "seconds";
                  default "60";
                  description
                    "Authentication token valid time (seconds) :default 60";
                }
              }  // container global-options
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Remote access profile";
                uses remote-access-profile-config;
              }  // list profile
    
              list client-config {
                key "name";
                ordered-by user;
                description
                  "Remote-access client configuration";
                uses remote-access-client-config;
              }  // list client-config
    
              container traceoptions {
                description
                  "Remote-access trace configuration";
                uses remote-access-traceoptions;
              }  // container traceoptions
    
              leaf default-profile {
                junos:must "("security remote-access profile $$")";
                junos:must-message "Remote access default profile should configure";
                type string;
                description
                  "Configure default profile";
              }
            }  // container remote-access
    
            container dynamic-application {
              presence
                "enable dynamic-application";
              description
                "Configure dynamic-application";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Dynamic application tracing 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 "configuration" {
                        value 0;
                        description
                          "Trace configuration events";
                      }
                      enum "lookup" {
                        value 1;
                        description
                          "Trace lookup events";
                      }
                      enum "compilation" {
                        value 2;
                        description
                          "Rule-sets compilation events";
                      }
                      enum "ipc" {
                        value 3;
                        description
                          "Inter-process communication events";
                      }
                      enum "all" {
                        value 4;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Configure application-firewall profile";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Surf control integrated profile name";
                }
    
                uses apply-advanced;
    
                container redirect-message {
                  description
                    "Redirect message settings";
                  uses apply-advanced;
    
                  container type {
                    description
                      "Type of redirect message desired";
                    uses apply-advanced;
    
                    choice type-choice {
                      container custom-text {
                        description
                          "Custom defined text block message";
                        uses apply-advanced;
    
                        leaf content {
                          type string {
                            length "1 .. 511";
                          }
                          description
                            "Content of custom-text";
                        }
                      }  // container custom-text
                      container redirect-url {
                        description
                          "Custom redirect URL server";
                        uses apply-advanced;
    
                        leaf content {
                          type string {
                            junos:posix-pattern "^https?://.*";
                            junos:pattern-message "URL must begin with http:// or https://";
                            length "1 .. 1023";
                          }
                          description
                            "URL of block message";
                        }
                      }  // container redirect-url
                    }  // choice type-choice
                  }  // container type
                }  // container redirect-message
              }  // list profile
            }  // container dynamic-application
    
            container softwires {
              description
                "Configure softwire feature";
              uses softwires-object;
            }  // container softwires
    
            container forwarding-options {
              description
                "Security-forwarding-options configuration";
              uses apply-advanced;
    
              container family {
                description
                  "Security forwarding-options for family";
                uses apply-advanced;
    
                container inet6 {
                  description "Family IPv6";
                  uses apply-advanced;
    
                  leaf mode {
                    type enumeration {
                      enum "packet-based" {
                        value 0;
                        description
                          "Enable packet-based forwarding";
                      }
                      enum "flow-based" {
                        value 1;
                        description
                          "Enable flow-based forwarding";
                      }
                      enum "drop" {
                        value 2;
                        description
                          "Disable forwarding";
                      }
                    }
                    description
                      "Forwarding mode";
                  }
                }  // container inet6
    
                container mpls {
                  description "Family MPLS";
                  uses apply-advanced;
    
                  leaf mode {
                    type enumeration {
                      enum "packet-based" {
                        junos:must "(!("security policies"))";
                        junos:must-message "MPLS mode packet-based not allowed when [security policies] are configured.";
                        value 0;
                        description
                          "Enable packet-based forwarding";
                      }
                      enum "flow-based" {
                        value 1;
                        description
                          "Enable flow-based forwarding for mpls";
                      }
                    }
                    description
                      "Forwarding mode";
                  }
                }  // container mpls
    
                container iso {
                  description "Family ISO";
                  uses apply-advanced;
    
                  leaf mode {
                    type enumeration {
                      enum "packet-based" {
                        value 0;
                        description
                          "Enable packet-based forwarding";
                      }
                    }
                    description
                      "Forwarding mode";
                  }
                }  // container iso
              }  // container family
    
              list mirror-filter {
                key "name";
                max-elements 15;
                ordered-by user;
                description
                  "Security mirror filters";
                uses mirror-filter-type;
              }  // list mirror-filter
    
              list secure-wire {
                key "name";
                description
                  "Secure-wire cross connections";
                uses secure-wire-type;
              }  // list secure-wire
    
              container mode {
                description
                  "Tap or sniffer mode";
                uses apply-advanced;
    
                container tap {
                  description "Tap mode";
                  uses apply-advanced;
    
                  leaf-list interface {
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Tap enabled interface";
                  }
    
                  container inspect-pass-through-tunnel {
                    description
                      "Inspect pass-through tunnel";
                    uses apply-advanced;
    
                    leaf ipip {
                      type empty;
                      description "IPIP";
                    }
    
                    leaf gre {
                      type empty;
                      description "GRE";
                    }
                  }  // container inspect-pass-through-tunnel
                }  // container tap
              }  // container mode
    
              container receive-side-scaling {
                description
                  "Receive side scaling";
                uses apply-advanced;
    
                container software-rss {
                  description
                    "Software RSS options";
                  uses apply-advanced;
    
                  leaf mode {
                    type enumeration {
                      enum "automatic" {
                        value 0;
                        description
                          "Auto select Software RSS mode (default)";
                      }
                      enum "enable" {
                        value 1;
                        description
                          "Software RSS would be enabled";
                      }
                      enum "disable" {
                        value 2;
                        description
                          "Software RSS would be disabled";
                      }
                    }
                    default "automatic";
                    description
                      "Mode of Software RSS";
                  }
    
                  leaf io-thread-number {
                    junos:must "("security forwarding-options receive-side-scaling software-rss mode enable")";
                    junos:must-message "The IO threads configuration will take effect only when software RSS mode is set to enable, please set it.";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 8";
                      }
                    }
                    description
                      "Software-RSS IO thread number";
                  }
                }  // container software-rss
    
                container nic-rss {
                  description "NIC RSS options";
                  uses apply-advanced;
    
                  leaf mode {
                    type enumeration {
                      enum "disable" {
                        value 0;
                        description
                          "NIC RSS would be disabled";
                      }
                    }
                    description
                      "Mode of NIC RSS";
                  }
                }  // container nic-rss
              }  // container receive-side-scaling
    
              container security-service {
                description
                  "Security service actions when memory resource is in shortage";
                uses apply-advanced;
    
                leaf fail-open {
                  type empty;
                  description
                    "Packet will bypass all the application services ";
                }
              }  // container security-service
    
              container resource-manager {
                description
                  "Manage the resource for special usage";
                uses apply-advanced;
    
                container cpu {
                  description "The CPU resource";
                  uses apply-advanced;
    
                  leaf re {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "2 .. 3";
                      }
                    }
                    description
                      "The count of vCPUs assigned to RE (default is 1)";
                  }
                }  // container cpu
              }  // container resource-manager
    
              leaf no-allow-dataplane-sleep {
                type empty;
                description
                  "Disable dataplane sleep";
              }
    
              container services-offload {
                description
                  "Service offload option";
                uses apply-advanced;
    
                leaf disable {
                  type empty;
                  description
                    "Disable services-offload";
                }
              }  // container services-offload
            }  // container forwarding-options
    
            container advanced-services {
              description
                "Advanced services configuration";
              uses apply-advanced;
    
              container data-plane {
                description
                  "Data plane configuration";
                uses apply-advanced;
    
                container memory {
                  description
                    "Data plane memory configuration";
                  uses apply-advanced;
    
                  leaf low {
                    type empty;
                    description
                      "Reduce data plane memory";
                  }
                }  // container memory
              }  // container data-plane
            }  // container advanced-services
    
            container flow {
              description "FLOW configuration";
              uses apply-advanced;
    
              leaf enhanced-routing-mode {
                type empty;
                description
                  "Enable enhanced route scaling";
              }
    
              container traceoptions {
                description
                  "Trace options for flow services";
                uses flow-traceoptions-object;
              }  // container traceoptions
    
              leaf pending-sess-queue-length {
                type enumeration {
                  enum "normal" {
                    value 0;
                    description
                      "Normal number of sessions queued";
                  }
                  enum "moderate" {
                    value 1;
                    description
                      "Allow more queued sessions than normal";
                  }
                  enum "high" {
                    value 2;
                    description
                      "Maximum number of queued sessions";
                  }
                }
                default "normal";
                description
                  "Maximum queued length per pending session";
              }
    
              container enable-reroute-uniform-link-check {
                description
                  "Enable reroute check with uniform link";
                uses apply-advanced;
    
                leaf nat {
                  type empty;
                  description "Enable NAT check";
                }
              }  // container enable-reroute-uniform-link-check
    
              leaf allow-dns-reply {
                type empty;
                description
                  "Allow unmatched incoming DNS reply packet";
              }
    
              leaf route-change-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "6 .. 1800";
                  }
                }
                units "seconds";
                default "30";
                description
                  "Timeout value for route change to nonexistent route";
              }
    
              leaf nh-resolve-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 20000";
                  }
                }
                units "milliseconds";
                default "10000";
                description
                  "Timeout value for nexthop resolve";
              }
    
              leaf multicast-nh-resolve-retry {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 20";
                  }
                }
                default "0";
                description
                  "Retry count for nexthop resolve";
              }
    
              leaf syn-flood-protection-mode {
                type enumeration {
                  enum "syn-cookie" {
                    value 0;
                    description
                      "Enable SYN cookie protection";
                  }
                  enum "syn-proxy" {
                    value 1;
                    description
                      "Enable SYN proxy protection";
                  }
                }
                default "syn-cookie";
                description
                  "TCP SYN flood protection mode";
              }
    
              leaf allow-embedded-icmp {
                type empty;
                description
                  "Allow embedded ICMP packets not matching a session to pass through";
              }
    
              leaf mcast-buffer-enhance {
                type empty;
                description
                  "Allow to hold more packets during multicast session creation";
              }
    
              leaf strict-packet-order {
                type empty;
                description
                  "Maintain arrival ordering when packets departing";
              }
    
              leaf allow-reverse-ecmp {
                type empty;
                description
                  "Allow reverse ECMP route lookup";
              }
    
              leaf no-local-favor-ecmp {
                type empty;
                description
                  "Not prefer local node in HA ECMP route lookup";
              }
    
              leaf sync-icmp-session {
                type empty;
                description
                  "Allow icmp sessions to sync to peer node";
              }
    
              leaf ipsec-performance-acceleration {
                type empty;
                description
                  "Accelerate the IPSec traffic performance";
              }
    
              leaf gre-performance-acceleration {
                type empty;
                description
                  "Accelerate the GRE traffic performance";
              }
    
              container aging {
                description
                  "Aging configuration";
                uses apply-advanced;
    
                leaf early-ageout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  units "seconds";
                  default "20";
                  description
                    "Delay before device declares session invalid";
                }
    
                leaf low-watermark {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 100";
                    }
                  }
                  units "percent";
                  default "100";
                  description
                    "Percentage of session-table capacity at which aggressive aging-out ends";
                }
    
                leaf high-watermark {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 100";
                    }
                  }
                  units "percent";
                  default "100";
                  description
                    "Percentage of session-table capacity at which aggressive aging-out starts";
                }
              }  // container aging
    
              container ethernet-switching {
                description
                  "Ethernet-switching configuration for flow";
                uses apply-advanced;
    
                leaf block-non-ip-all {
                  type empty;
                  description
                    "Block all non-IP and non-ARP traffic including broadcast/multicast";
                }
    
                leaf bypass-non-ip-unicast {
                  junos:must "(!(".. block-non-ip-all"))";
                  junos:must-message "'bypass-non-ip-unicast' cannot coexist with 'block-non-ip-all'";
                  type empty;
                  description
                    "Allow all non-IP (including unicast) traffic";
                }
    
                container no-packet-flooding {
                  presence
                    "enable no-packet-flooding";
                  description
                    "Stop IP flooding, send ARP/ICMP to trigger MAC learning";
                  uses apply-advanced;
    
                  leaf no-trace-route {
                    type empty;
                    description
                      "Don't send ICMP to trigger MAC learning";
                  }
                }  // container no-packet-flooding
    
                leaf bpdu-vlan-flooding {
                  type empty;
                  description
                    "Set 802.1D BPDU flooding based on VLAN";
                }
              }  // container ethernet-switching
    
              container tcp-mss {
                description
                  "TCP maximum segment size configuration";
                uses apply-advanced;
    
                container all-tcp {
                  description
                    "Enable MSS override for all packets";
                  uses apply-advanced;
    
                  leaf mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    description "MSS value";
                  }
                }  // container all-tcp
    
                container ipsec-vpn {
                  presence "enable ipsec-vpn";
                  description
                    "Enable MSS override for all packets entering IPSec tunnel";
                  uses apply-advanced;
    
                  leaf mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    default "1320";
                    description "MSS value";
                  }
                }  // container ipsec-vpn
    
                container gre-in {
                  presence "enable gre-in";
                  description
                    "Enable MSS override for all GRE packets coming out of an IPSec tunnel";
                  uses apply-advanced;
    
                  leaf mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    default "1320";
                    description "MSS value";
                  }
                }  // container gre-in
    
                container gre-out {
                  presence "enable gre-out";
                  description
                    "Enable MSS override for all GRE packets entering an IPsec tunnel";
                  uses apply-advanced;
    
                  leaf mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    default "1320";
                    description "MSS value";
                  }
                }  // container gre-out
              }  // container tcp-mss
    
              container tcp-session {
                description
                  "Transmission Control Protocol session configuration";
                uses apply-advanced;
    
                leaf rst-invalidate-session {
                  type empty;
                  description
                    "Immediately end session on receipt of reset (RST) segment";
                }
    
                leaf fin-invalidate-session {
                  type empty;
                  description
                    "Immediately end session on receipt of fin (FIN) segment";
                }
    
                leaf rst-sequence-check {
                  type empty;
                  description
                    "Check sequence number in reset (RST) segment";
                }
    
                leaf no-syn-check {
                  type empty;
                  description
                    "Disable creation-time SYN-flag check";
                }
    
                leaf strict-syn-check {
                  junos:must "(!(("security flow tcp-session no-syn-check" || "security flow tcp-session no-syn-check-in-tunnel")))";
                  junos:must-message "strict-syn-check not allowed when no-syn-check or no-syn-check-in-tunnel is configured";
                  type empty;
                  description
                    "Enable strict syn check";
                }
    
                leaf no-syn-check-in-tunnel {
                  type empty;
                  description
                    "Disable creation-time SYN-flag check for tunnel packets";
                }
    
                leaf no-sequence-check {
                  type empty;
                  description
                    "Disable sequence-number checking";
                }
    
                leaf aggressive-tcp-ack {
                  type empty;
                  description
                    "Enable aggressive TCP ACK, root lsys only";
                }
    
                leaf tcp-initial-timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "4 .. 300";
                    }
                  }
                  units "seconds";
                  default "20";
                  description
                    "Timeout for TCP session when initialization fails";
                }
    
                leaf maximum-window {
                  type enumeration {
                    enum "64K" {
                      value 0;
                      description
                        "64K bytes receive window";
                    }
                    enum "128K" {
                      value 1;
                      description
                        "128K bytes receive window";
                    }
                    enum "256K" {
                      value 2;
                      description
                        "256K bytes receive window";
                    }
                    enum "512K" {
                      value 3;
                      description
                        "512K bytes receive window";
                    }
                    enum "1M" {
                      value 4;
                      description
                        "1M bytes receive window";
                    }
                  }
                  default "256K";
                  description
                    "Maximum TCP proxy scaled receive window, default 256K bytes";
                }
    
                container time-wait-state {
                  presence
                    "enable time-wait-state";
                  description
                    "Session timeout value in time-wait state, default 150 seconds";
                  uses apply-advanced;
    
                  choice session-age-option {
                    leaf session-ageout {
                      type empty;
                      description
                        "Allow session to ageout using service based timeout values";
                    }
                    leaf session-timeout {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 600";
                        }
                      }
                      units "seconds";
                      description
                        "Configure session timeout value for time-wait state";
                    }
                  }  // choice session-age-option
    
                  leaf apply-to-half-close-state {
                    type empty;
                    description
                      "Apply time-wait-state timeout to half-close state";
                  }
                }  // container time-wait-state
              }  // container tcp-session
    
              leaf force-ip-reassembly {
                type empty;
                description
                  "Force to reassemble ip fragments";
              }
    
              leaf preserve-incoming-fragment-size {
                type empty;
                description
                  "Preserve incoming fragment size for egress MTU";
              }
    
              leaf fragment-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 250";
                  }
                }
                default "0";
                description
                  "Maximum number of fragments allowed for a packet";
              }
    
              leaf fragment-reassembly-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 60";
                  }
                }
                units "seconds";
                default "0";
                description
                  "Re-assembly timeout (seconds) for fragments of a packet";
              }
    
              container log {
                description "Enable log";
                uses apply-advanced;
    
                leaf dropped-icmp-packet {
                  type empty;
                  description
                    "Log dropped ICMPv4 packet";
                }
    
                leaf dropped-illegal-packet {
                  type empty;
                  description
                    "Log dropped illegal packet";
                }
              }  // container log
    
              container advanced-options {
                description
                  "Flow config advanced options";
                uses apply-advanced;
    
                leaf drop-matching-reserved-ip-address {
                  type empty;
                  description
                    "Drop matching reserved source IP address";
                }
    
                leaf drop-matching-link-local-address {
                  type empty;
                  description
                    "Drop matching link local address";
                }
    
                leaf reverse-route-packet-mode-vr {
                  type empty;
                  description
                    "Allow reverse route lookup with packet mode vr";
                }
              }  // container advanced-options
    
              container load-distribution {
                description
                  "Flow config SPU load distribution";
                uses apply-advanced;
    
                container session-affinity {
                  description
                    "SPU load distribution based on the service anchor SPU";
                  uses apply-advanced;
    
                  leaf ipsec {
                    type empty;
                    description "IPsec service";
                  }
                }  // container session-affinity
              }  // container load-distribution
    
              container packet-log {
                description
                  "Configure flow packet log";
                uses apply-advanced;
    
                leaf enable {
                  type empty;
                  description
                    "Enable log for dropped packet";
                }
    
                leaf throttle-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 32768";
                    }
                  }
                  units "milliseconds";
                  default "1024";
                  description
                    "Interval should be configured as a power of two";
                }
    
                list packet-filter {
                  key "name";
                  max-elements 64;
                  ordered-by user;
                  description
                    "Configure packet log filter";
                  uses flow-filter-type;
                }  // list packet-filter
              }  // container packet-log
    
              leaf power-mode-disable {
                type empty;
                description
                  "Disable power mode express path processing";
              }
    
              leaf power-mode-ipsec-qat {
                type empty;
                description
                  "Enable qat in power mode ipsec processing";
              }
            }  // container flow
    
            container firewall-authentication {
              description
                "Firewall authentication parameters";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Data-plane firewall authentication tracing options";
                uses apply-advanced;
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Events to include in trace output";
                  leaf name {
                    type enumeration {
                      enum "authentication" {
                        value 0;
                        description
                          "Data-plane firewall authentication events";
                      }
                      enum "proxy" {
                        value 1;
                        description
                          "Data-plane firewall authentication proxy events";
                      }
                      enum "all" {
                        value 2;
                        description "All events";
                      }
                    }
                  }
    
                  choice level {
                    leaf terse {
                      type empty;
                      description
                        "Include terse amount of output in trace";
                    }
                    leaf detail {
                      type empty;
                      description
                        "Include detailed amount of output in trace";
                    }
                    leaf extensive {
                      type empty;
                      description
                        "Include extensive amount of output in trace";
                    }
                  }  // choice level
                }  // list flag
              }  // container traceoptions
            }  // container firewall-authentication
    
            container screen {
              description
                "Configure screen feature";
              uses apply-advanced;
    
              container trap {
                presence "enable trap";
                description
                  "Configure trap interval";
                leaf interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 3600";
                    }
                  }
                  units "seconds";
                  default "2";
                  description "Trap interval";
                }
              }  // container trap
    
              list ids-option {
                key "name";
                description
                  "Configure ids-option";
                uses ids-option-type;
              }  // list ids-option
    
              container traceoptions {
                description
                  "Trace options for Network Security Screen";
                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 "flow" {
                        value 1;
                        description
                          "Trace flow events";
                      }
                      enum "all" {
                        value 2;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list white-list {
                key "name";
                max-elements 32;
                description
                  "Set of IP addresses for white list";
                uses ids-wlist-type;
              }  // list white-list
            }  // container screen
    
            container nat {
              description
                "Configure Network Address Translation";
              uses nat-object;
            }  // container nat
    
            container forwarding-process {
              description
                "Configure security forwarding-process options";
              uses apply-advanced;
    
              leaf enhanced-services-mode {
                type empty;
                description
                  "Enable enhanced application services mode";
              }
    
              container application-services {
                description
                  "Configure application service options";
                uses apply-advanced;
    
                leaf maximize-alg-sessions {
                  type empty;
                  description
                    "Maximize ALG session capacity";
                }
    
                leaf maximize-persistent-nat-capacity {
                  type empty;
                  description
                    "Increase persistent NAT capacity by reducing maximum flow sessions";
                }
    
                container maximize-cp-sessions {
                  presence
                    "enable maximize-cp-sessions";
                  status deprecated;
                  description
                    "Maximize CP session capacity";
                  uses apply-advanced;
                }  // container maximize-cp-sessions
    
                leaf session-distribution-mode {
                  junos:must "(!(".. maximize-idp-sessions"))";
                  junos:must-message "to configure session-distribution-mode, maximize-idp-sessions must not be set";
                  type enumeration {
                    enum "normal" {
                      value 0;
                      status deprecated;
                      description "Normal mode";
                    }
                    enum "hash-based" {
                      value 1;
                      status deprecated;
                      description "Hash mode";
                    }
                  }
                  status deprecated;
                  description
                    "Session distribution mode";
                }
    
                leaf enable-gtpu-distribution {
                  type empty;
                  description
                    "Enable GTP-U distribution";
                }
    
                leaf packet-ordering-mode {
                  type enumeration {
                    enum "hardware" {
                      value 0;
                      description
                        "Hardware mode";
                    }
                    enum "software" {
                      value 1;
                      description
                        "Software mode";
                    }
                  }
                  description
                    "Packet ordering mode";
                }
    
                container maximize-idp-sessions {
                  presence
                    "enable maximize-idp-sessions";
                  description
                    "Run security services in dedicated processes to maximize IDP session capacity";
                  uses apply-advanced;
    
                  container weight {
                    description
                      "Adjust the weighting of the resources available for idp";
                    uses apply-advanced;
    
                    choice weight {
                      leaf equal {
                        type empty;
                        status deprecated;
                        description
                          "Equal resources to IDP and firewall";
                      }
                      container idp {
                        presence "enable idp";
                        description
                          "IDP has more resources than firewall";
                        uses apply-advanced;
                      }  // container idp
                      leaf firewall {
                        type empty;
                        description
                          "Firewall has more resources than IDP";
                      }
                    }  // choice weight
                  }  // container weight
    
                  leaf inline-tap {
                    type empty;
                    description
                      "Configure IDP in inline tap mode";
                  }
                }  // container maximize-idp-sessions
    
                leaf inline-fpga-crypto {
                  type enumeration {
                    enum "disabled" {
                      value 0;
                      description
                        "Disable inline FPGA crypto";
                    }
                    enum "enabled" {
                      value 1;
                      description
                        "Enable inline FPGA crypto";
                    }
                  }
                  description
                    "Disable inline FPGA crypto";
                }
              }  // container application-services
            }  // container forwarding-process
    
            container policies {
              presence "enable policies";
              description
                "Configure Network Security Policies";
              uses policy-object-type;
            }  // container policies
    
            container tcp-encap {
              presence "enable tcp-encap";
              description
                "Configure TCP Encapsulation.";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Trace options for TCP encapsulation service";
                uses ragw-traceoptions;
              }  // container traceoptions
    
              list profile {
                key "name";
                ordered-by user;
                description "Configure profile.";
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Profile name identifier.";
                }
    
                uses apply-advanced;
    
                leaf ssl-profile {
                  junos:must "("services ssl termination profile $$")";
                  junos:must-message "Referenced SSL termination profile must be defined";
                  type string;
                  description
                    "SSL Termination profile";
                }
    
                leaf log {
                  type empty;
                  description
                    "Enable logging for remote-access";
                }
              }  // list profile
    
              container global-options {
                description
                  "Global settings for TCP encapsulation";
                leaf enable-tunnel-tracking {
                  type empty;
                  description
                    "Track ESP tunnels";
                }
              }  // container global-options
            }  // container tcp-encap
    
            container resource-manager {
              description
                "Configure resource manager security options";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Traceoptions for resource manager";
                uses apply-advanced;
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Resource manager objects and events to include in trace";
                  leaf name {
                    type enumeration {
                      enum "client" {
                        value 0;
                        description
                          "Trace resource manager client";
                      }
                      enum "group" {
                        value 1;
                        description
                          "Trace resource manager group";
                      }
                      enum "resource" {
                        value 2;
                        description
                          "Trace resource manager resource";
                      }
                      enum "gate" {
                        value 3;
                        description
                          "Trace resource manager created gates";
                      }
                      enum "session" {
                        value 4;
                        description
                          "Trace resource manager created session";
                      }
                      enum "chassis cluster" {
                        value 5;
                        description
                          "Trace resource manager's chassis cluster events";
                      }
                      enum "messaging" {
                        value 6;
                        description
                          "Trace resource manager messaging";
                      }
                      enum "service pinhole" {
                        value 7;
                        description
                          "Trace resource manager created service pinholes";
                      }
                      enum "error" {
                        value 8;
                        description
                          "Trace all resource manager errors";
                      }
                      enum "all" {
                        value 9;
                        description
                          "Trace all resource manager objects and events";
                      }
                    }
                  }
    
                  choice level {
                    leaf terse {
                      type empty;
                      description
                        "Set trace verbosity level to terse";
                    }
                    leaf detail {
                      type empty;
                      description
                        "Set trace verbosity level to detail";
                    }
                    leaf extensive {
                      type empty;
                      description
                        "Set trace verbosity level to extensive";
                    }
                  }  // choice level
                }  // list flag
              }  // container traceoptions
    
              container services-memory {
                presence
                  "enable services-memory";
                description
                  "Manage services memory resources";
                uses apply-advanced;
    
                container match {
                  presence "enable match";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Service Memory Threshold";
                  }
                }  // container match
    
                container then {
                  presence "enable then";
                  description
                    "Action to take if the conditions are matched";
                  uses apply-advanced;
    
                  leaf fail-close {
                    junos:must "(!(".. fail-open"))";
                    junos:must-message "'fail-open' can not be defined with 'fail-close'";
                    type empty;
                    description
                      "Enable fail-close";
                  }
    
                  leaf fail-open {
                    junos:must "(!(".. fail-close"))";
                    junos:must-message "'fail-close' can not be defined with 'fail-open'";
                    type empty;
                    description
                      "Enable fail-open";
                  }
    
                  leaf drop-flows {
                    type empty;
                    description
                      "Enable drop-flows";
                  }
    
                  leaf log {
                    type empty;
                    description "Enable logs";
                  }
    
                  leaf alarm {
                    type empty;
                    description "Enable Alarm";
                  }
                }  // container then
              }  // container services-memory
    
              container session-memory {
                presence "enable session-memory";
                description
                  "Manage session memory resources";
                uses apply-advanced;
    
                container match {
                  presence "enable match";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Session Memory Threshold";
                  }
                }  // container match
    
                container then {
                  presence "enable then";
                  description
                    "Action to take if the conditions are matched";
                  uses apply-advanced;
    
                  container session-aggressive-ageout {
                    presence
                      "enable session-aggressive-ageout";
                    description
                      "Session ageout configuration";
                    uses apply-advanced;
    
                    leaf early-ageout {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type int32 {
                          range "1 .. 65535";
                        }
                      }
                      description
                        "Delay before device declares session invalid";
                    }
                  }  // container session-aggressive-ageout
    
                  leaf log {
                    type empty;
                    description "Enable logs";
                  }
    
                  leaf alarm {
                    type empty;
                    description "Enable alarms";
                  }
    
                  leaf drop-flows {
                    type empty;
                    description
                      "Enable drop-flows";
                  }
                }  // container then
              }  // container session-memory
    
              container cpu {
                presence "enable cpu";
                description
                  "Manage cpu resources";
                uses apply-advanced;
    
                leaf disable-management {
                  junos:must "(!(".. then"))";
                  junos:must-message "Cannot define 'then' with disable-management";
                  junos:must "(!(".. match"))";
                  junos:must-message "Cannot define 'match' with disable-management";
                  type empty;
                  description
                    "Disable Resource Manager CPU Management";
                }
    
                container match {
                  presence "enable match";
                  uses apply-advanced;
    
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "CPU Useage Threshold";
                  }
                }  // container match
    
                container then {
                  presence "enable then";
                  description
                    "Action to take if the conditions are matched";
                  uses apply-advanced;
    
                  leaf drop-flows {
                    type empty;
                    description
                      "Enable drop-flows";
                  }
    
                  leaf drop-cps {
                    type empty;
                    description
                      "Enable drop-cps";
                  }
    
                  leaf log {
                    type empty;
                    description "Enable logs";
                  }
    
                  leaf alarm {
                    type empty;
                    description
                      "Enable drop-alarm";
                  }
    
                  leaf max-session-setup-rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "0 .. 65535";
                      }
                    }
                    description
                      "Maximum number of session creations allowed per second";
                  }
                }  // container then
              }  // container cpu
            }  // container resource-manager
    
            container analysis {
              description
                "Configure security analysis";
              uses apply-advanced;
    
              leaf no-report {
                type empty;
                description
                  "Stops security analysis reporting";
              }
            }  // container analysis
    
            container traceoptions {
              description
                "Network security daemon tracing 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 "configuration" {
                      value 0;
                      description
                        "Trace configuration events";
                    }
                    enum "routing-socket" {
                      value 1;
                      description
                        "Trace routing socket events";
                    }
                    enum "compilation" {
                      value 2;
                      description
                        "Trace compilation events";
                    }
                    enum "all" {
                      value 3;
                      description
                        "Trace everything";
                    }
                  }
                }
              }  // list flag
    
              leaf rate-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                default "0";
                description
                  "Limit the incoming rate of trace messages";
              }
            }  // container traceoptions
    
            container datapath-debug {
              description
                "Datapath debug options";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "End to end debug 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
              }  // container traceoptions
    
              container capture-file {
                description
                  "Packet capture options";
                leaf filename {
                  type string;
                  description
                    "Capture file name";
                }
    
                leaf format {
                  type enumeration {
                    enum "pcap" {
                      value 0;
                      description
                        "PCAP capture format";
                    }
                  }
                  description
                    "Capture file format";
                }
    
                leaf size {
                  type string;
                  description
                    "Maximum file size";
                }
    
                leaf files {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 10";
                    }
                  }
                  description
                    "Maximum number of files";
                }
    
                choice world-readable-choice {
                  leaf world-readable {
                    type empty;
                    description
                      "Allow any user to read packet-capture files";
                  }
                  leaf no-world-readable {
                    type empty;
                    description
                      "Don't allow any user to read packet-capture files";
                  }
                }  // choice world-readable-choice
              }  // container capture-file
    
              leaf maximum-capture-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "68 .. 10000";
                  }
                }
                units "bytes";
                default "68";
                description
                  "Max packet capture length";
              }
    
              list action-profile {
                key "name";
                ordered-by user;
                description
                  "Action profile definitions";
                uses e2e-action-profile;
              }  // list action-profile
    
              list packet-filter {
                key "name";
                max-elements 4;
                ordered-by user;
                description
                  "Packet filter configuration";
                uses end-to-end-debug-filter;
              }  // list packet-filter
            }  // container datapath-debug
    
            container user-identification {
              description
                "Configure user-identification";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "User-identification Tracing 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 "all" {
                        value 0;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list authentication-source {
                key "name";
                description
                  "Configure user-identification authentication-source";
                uses authentication-source-type;
              }  // list authentication-source
            }  // container user-identification
    
            container zones {
              description "Zone configuration";
              uses apply-advanced;
    
              container functional-zone {
                presence
                  "enable functional-zone";
                description "Functional zone";
                container management {
                  presence "enable management";
                  description
                    "Host for out of band management interfaces";
                  uses apply-advanced;
    
                  list interfaces {
                    key "name";
                    ordered-by user;
                    description
                      "Interfaces that are part of this zone";
                    uses zone-interface-list-type;
                  }  // list interfaces
    
                  leaf screen {
                    junos:must "("security screen ids-option $$")";
                    junos:must-message "referenced ids-object must be defined under [security screen ids-option]";
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Name of ids option object applied to the zone";
                  }
    
                  container host-inbound-traffic {
                    description
                      "Allowed system services & protocols";
                    uses zone_host_inbound_traffic_t;
                  }  // container host-inbound-traffic
    
                  leaf description {
                    type string {
                      junos:posix-pattern "^[^&<>
    ]+$";
                      junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                      length "1 .. 900";
                    }
                    description
                      "Text description of zone";
                  }
                }  // container management
              }  // container functional-zone
    
              list security-zone {
                key "name";
                ordered-by user;
                description "Security zones";
                uses security-zone-type;
              }  // list security-zone
            }  // container zones
    
            leaf advanced-connection-tracking-timeout {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "System wide timeout value in seconds for advanced-connection-tracking entries";
            }
    
            container advance-policy-based-routing {
              presence
                "enable advance-policy-based-routing";
              description
                "Configure Network Security APBR Policies";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Advance policy based routing tracing 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 "configuration" {
                        value 0;
                        description
                          "Trace configuration events";
                      }
                      enum "lookup" {
                        value 1;
                        description
                          "Trace lookup events";
                      }
                      enum "compilation" {
                        value 2;
                        description
                          "Rule-sets compilation events";
                      }
                      enum "ipc" {
                        value 3;
                        description
                          "Inter-process communication events";
                      }
                      enum "all" {
                        value 4;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              container tunables {
                description
                  "Configure advance policy based routing tunables";
                uses apply-advanced;
    
                leaf max-route-change {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 5";
                    }
                  }
                  default "1";
                  description
                    "Maximum route change";
                }
    
                leaf drop-on-zone-mismatch {
                  type empty;
                  description
                    "Drop session if zone mismatches";
                }
    
                leaf no-l3l4-app-lookup {
                  type empty;
                  description
                    "Ignore the look up for L3L4 custom app in APBR.";
                }
    
                leaf enable-logging {
                  type empty;
                  description
                    "Enable AppTrack logging";
                }
              }  // container tunables
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Configure advance-policy-based-routing profile";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Advance policy based routing profile name";
                }
    
                uses apply-advanced;
    
                list rule {
                  key "name";
                  ordered-by user;
                  description
                    "Specify an advance policy based routing rule";
                  uses apbr_rule_type;
                }  // list rule
              }  // list profile
    
              list active-probe-params {
                key "name";
                ordered-by user;
                description
                  "Active probe's settings";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Active probe setting name";
                }
    
                uses apply-advanced;
    
                container settings {
                  description "Settings";
                  uses appqoe-probe-params;
                }  // container settings
              }  // list active-probe-params
    
              list metrics-profile {
                key "name";
                ordered-by user;
                description
                  "Configure metric profiles";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description "Profile name";
                }
    
                uses apply-advanced;
    
                container sla-threshold {
                  description
                    "Configure SLA metric threshold";
                  uses appqoe_sla_metric_profile;
                }  // container sla-threshold
              }  // list metrics-profile
    
              list underlay-interface {
                key "name";
                ordered-by user;
                status deprecated;
                description
                  "Underlay interface setting";
                leaf name {
                  type union {
                    type jt:interface-device;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Underlay Interface name";
                }
    
                uses apply-advanced;
    
                list unit {
                  key "name";
                  description
                    "One of more logical interface unit-numbers";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1073741823";
                      }
                    }
                    description "Unit number";
                  }
    
                  uses apply-advanced;
    
                  leaf link-type {
                    type enumeration {
                      enum "IP" {
                        value 0;
                        description
                          "Select IP as the link-type";
                      }
                      enum "MPLS" {
                        value 1;
                        description
                          "Select MPLS as the link-type";
                      }
                    }
                    default "IP";
                    description
                      "Link type of the interface";
                  }
    
                  leaf priority {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 255";
                      }
                    }
                    default "255";
                    description
                      "Configure the priority for selecting this link";
                  }
    
                  leaf speed {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000";
                      }
                    }
                    default "1000";
                    description
                      "Speed of this link in Mbps";
                  }
                }  // list unit
              }  // list underlay-interface
    
              list interface {
                junos:must "(!(".. underlay-interface"))";
                junos:must-message "interface knob cannot be configured along with underlay-interface";
                key "name";
                ordered-by user;
                description "Interface setting";
                leaf name {
                  type union {
                    type jt:interface-device;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                list unit {
                  key "name";
                  description
                    "One of more logical interface unit-numbers";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1073741823";
                      }
                    }
                    description "Unit number";
                  }
    
                  uses apply-advanced;
    
                  leaf link-tag {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Configure link-tag. Default is IP";
                  }
    
                  leaf priority {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 255";
                      }
                    }
                    default "255";
                    description
                      "Configure the priority for selecting this link";
                  }
    
                  leaf multipath-bandwidth {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 1000000";
                      }
                    }
                    default "1000";
                    description
                      "Bandwidth of this link in Mbps";
                  }
    
                  leaf weight {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 255";
                      }
                    }
                    default "1";
                    description
                      "Configure the weight for selecting this link";
                  }
                }  // list unit
              }  // list interface
    
              list overlay-path {
                key "name";
                ordered-by user;
                description
                  "List of overlay paths";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Create a single instance of overlay path";
                }
    
                uses apply-advanced;
    
                container tunnel-path {
                  presence "enable tunnel-path";
                  description
                    "Tunnel start & end ip addresses";
                  uses appqoe-probe-path;
                }  // container tunnel-path
    
                container probe-path {
                  presence "enable probe-path";
                  description
                    "Probe start & end ip addresses";
                  uses appqoe-probe-path;
                }  // container probe-path
              }  // list overlay-path
    
              list destination-path-group {
                key "name";
                ordered-by user;
                description
                  "Group of tunnels to a particular destination";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Destination group name";
                }
    
                uses apply-advanced;
    
                container probe-routing-instance {
                  presence
                    "enable probe-routing-instance";
                  description
                    "Set routing instance for the probe-path";
                  uses apply-advanced;
    
                  leaf routing-instance-name {
                    type string;
                    description
                      "Name of routing instance";
                  }
                }  // container probe-routing-instance
    
                container inline-gre-encap {
                  presence
                    "enable inline-gre-encap";
                  description
                    "Enable inline GRE encapsulation";
                }  // container inline-gre-encap
    
                container active-probe-properties {
                  presence
                    "enable active-probe-properties";
                  description
                    "Additional applicable properties for the destination path group";
                  uses apply-advanced;
    
                  leaf active-probe-only {
                    type empty;
                    description
                      "Enable active probing only to the destination path group";
                  }
                }  // container active-probe-properties
    
                list overlay-path {
                  key "name";
                  max-elements 20;
                  ordered-by user;
                  description "List of paths";
                  leaf name {
                    type string;
                    description
                      "Name of Overlay Path";
                  }
    
                  uses apply-advanced;
                }  // list overlay-path
              }  // list destination-path-group
    
              container sla-options {
                presence "enable sla-options";
                description "Global SLA options";
                uses apply-advanced;
    
                container local-route-switch {
                  presence
                    "enable local-route-switch";
                  status deprecated;
                  description
                    "Enable/disable Automatic local route switching";
                  uses apply-advanced;
    
                  leaf switch-type {
                    type enumeration {
                      enum "enabled" {
                        value 0;
                        description "Enable";
                      }
                      enum "disabled" {
                        value 1;
                        description "Disable";
                      }
                    }
                  }
                }  // container local-route-switch
    
                container log {
                  presence "enable log";
                  description
                    "Choose the logging mechanism";
                  uses apply-advanced;
    
                  leaf log-options {
                    type enumeration {
                      enum "disabled" {
                        value 0;
                        description
                          "Disable logging";
                      }
                      enum "syslog" {
                        value 1;
                        description
                          "Choose syslog";
                      }
                    }
                  }
                }  // container log
    
                container log-type {
                  presence "enable log-type";
                  status deprecated;
                  description
                    "Choose the logging mechanism";
                  uses apply-advanced;
    
                  leaf log {
                    type enumeration {
                      enum "disabled" {
                        value 0;
                        description
                          "Disable logging";
                      }
                      enum "syslog" {
                        value 1;
                        description
                          "Choose syslog";
                      }
                    }
                  }
                }  // container log-type
    
                container max-passive-probe-limit {
                  presence
                    "enable max-passive-probe-limit";
                  description
                    "Set max passive probe limits";
                  uses apply-advanced;
    
                  container number-of-probes {
                    presence
                      "enable number-of-probes";
                    description
                      "Number of passive probes to be sent";
                    uses apply-advanced;
    
                    leaf probes {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "10 .. 5000";
                        }
                      }
                      default "5000";
                      description
                        "Number of probes";
                    }
                  }  // container number-of-probes
    
                  container interval {
                    presence "enable interval";
                    description
                      "Interval within which to send";
                    uses apply-advanced;
    
                    leaf refresh-interval {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "500 .. 1000";
                        }
                      }
                      default "500";
                      description
                        "Interval in milli seconds";
                    }
                  }  // container interval
                }  // container max-passive-probe-limit
    
                leaf dynamic-load-balancer {
                  type empty;
                  description
                    "Enable dynamic load balancer";
                }
              }  // container sla-options
    
              list sla-rule {
                key "name";
                ordered-by user;
                description "Create SLA rule";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description "Set rule name";
                }
    
                uses apply-advanced;
    
                container link-preferences {
                  junos:must "(!(any "security advance-policy-based-routing sla-rule <*> link-type-affinity"))";
                  junos:must-message "link-preferences knob cannot be configured along with link-type-affinity";
                  junos:must "(!(any "security advance-policy-based-routing sla-rule <*> preferred-link-type"))";
                  junos:must-message "link-preferences knob cannot be configured along with preferred-link-type";
                  presence
                    "enable link-preferences";
                  description
                    "Configure the link preferences";
                  uses apply-advanced;
    
                  leaf preferred-tag {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Configure the link-tag preference";
                  }
    
                  leaf affinity {
                    type enumeration {
                      enum "strict" {
                        value 0;
                        description
                          "Strict link-tag affinity";
                      }
                    }
                    description
                      "Configure the link-tag affinity";
                  }
                }  // container link-preferences
    
                leaf preferred-link-type {
                  type enumeration {
                    enum "IP" {
                      value 0;
                      status deprecated;
                      description
                        "IP link-type preference";
                    }
                    enum "MPLS" {
                      value 1;
                      status deprecated;
                      description
                        "MPLS link-type preference";
                    }
                    enum "Any" {
                      value 2;
                      status deprecated;
                      description
                        "Any link-type preference";
                    }
                  }
                  status deprecated;
                  description
                    "Configure the link-type preference";
                }
    
                leaf link-type-affinity {
                  type enumeration {
                    enum "strict" {
                      value 0;
                      status deprecated;
                      description
                        "Strict link-type affinity";
                    }
                  }
                  status deprecated;
                  description
                    "Configure the link-type affinity";
                }
    
                container switch-idle-time {
                  presence
                    "enable switch-idle-time";
                  description
                    "Idle timeout period where no SLA violation will be detected once path switch has happened";
                  uses apply-advanced;
    
                  leaf timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "5 .. 300";
                      }
                    }
                    default "60";
                    description
                      "Idle timeout period (in seconds)";
                  }
                }  // container switch-idle-time
    
                container metrics-profile {
                  junos:must "(".. active-probe-params")";
                  junos:must-message "active-probe-params must exist for metrics-profile";
                  presence
                    "enable metrics-profile";
                  description
                    "Set metrics profile for the SLA";
                  uses apply-advanced;
    
                  leaf metrics-profile-name {
                    type string;
                    description
                      "Metrics Profile name";
                  }
                }  // container metrics-profile
    
                container active-probe-params {
                  junos:must "(".. metrics-profile")";
                  junos:must-message "metrics-profile must exist for active-probe-params";
                  presence
                    "enable active-probe-params";
                  description
                    "Set Probe params for the overlay-path";
                  uses apply-advanced;
    
                  leaf probe-params-name {
                    type string;
                    description
                      "Probe parameter's name";
                  }
                }  // container active-probe-params
    
                leaf type {
                  junos:must "((".. active-probe-params" && ".. metrics-profile"))";
                  junos:must-message "metrics-profile and active-probe-params must exist for saas type SLA";
                  type enumeration {
                    enum "saas" {
                      value 0;
                      description
                        "Choose SaaS probing for the SLA";
                    }
                  }
                  description
                    "Choose type of SLA";
                }
    
                container passive-probe-params {
                  junos:must "((".. active-probe-params" && ".. metrics-profile"))";
                  junos:must-message "metrics-profile and active-probe-params must exist for passive-probe-params";
                  presence
                    "enable passive-probe-params";
                  description
                    "Passive probe settings";
                  uses apply-advanced;
    
                  container sampling-percentage {
                    presence
                      "enable sampling-percentage";
                    description
                      "Mininmum percentage of Sessions to be evaluated for the application";
                    uses apply-advanced;
    
                    leaf percentage {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 100";
                        }
                      }
                      default "5";
                      description "Percentage";
                    }
                  }  // container sampling-percentage
    
                  container violation-count {
                    presence
                      "enable violation-count";
                    status deprecated;
                    description
                      "Number of SLA violations within sampling period to be considered as a violation";
                    uses apply-advanced;
    
                    leaf count {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 32";
                        }
                      }
                      default "5";
                      description
                        "Violation Count";
                    }
                  }  // container violation-count
    
                  container sampling-period {
                    presence
                      "enable sampling-period";
                    description
                      "Time period in which the sampling is done";
                    uses apply-advanced;
    
                    leaf period {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2000 .. 60000";
                        }
                      }
                      default "5000";
                      description
                        "Period (in milli-sec)";
                    }
                  }  // container sampling-period
    
                  container sla-export-factor {
                    presence
                      "enable sla-export-factor";
                    description
                      "Enabled sampling window based SLA exporting";
                    uses apply-advanced;
    
                    leaf factor {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "5 .. 1000";
                        }
                      }
                      default "500";
                      description
                        "No of sampling windows after which to report";
                    }
                  }  // container sla-export-factor
    
                  container type {
                    presence "enable type";
                    description
                      "Choose type of SLA measurement";
                    uses apply-advanced;
    
                    leaf type-val {
                      type enumeration {
                        enum "book-ended" {
                          value 0;
                          description
                            "Choose custom method of probing within WAN link";
                        }
                      }
                    }
                  }  // container type
    
                  container sampling-frequency {
                    presence
                      "enable sampling-frequency";
                    description
                      "Sampling frequency settings";
                    uses apply-advanced;
    
                    container interval {
                      presence "enable interval";
                      description
                        "Time based sampling interval";
                      uses apply-advanced;
    
                      leaf sampling-interval {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 500";
                          }
                        }
                        default "100";
                        description
                          "Interval in milli seconds";
                      }
                    }  // container interval
    
                    container ratio {
                      presence "enable ratio";
                      description
                        "1:N based sampling ratio";
                      uses apply-advanced;
    
                      leaf sampling-ratio {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 10000";
                          }
                        }
                        default "200";
                        description "Value of N";
                      }
                    }  // container ratio
                  }  // container sampling-frequency
                }  // container passive-probe-params
    
                container multipath-rule {
                  description
                    "Set AppBased Multipath Routing action";
                  uses apply-advanced;
    
                  leaf multipath-rule-name {
                    type string;
                    description
                      "Multipath action parameter's name";
                  }
                }  // container multipath-rule
    
                container violation-count {
                  presence
                    "enable violation-count";
                  description
                    "Number of SLA violations within sampling period to be considered as a violation";
                  uses apply-advanced;
    
                  leaf count {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 32";
                      }
                    }
                    default "5";
                    description
                      "Violation Count";
                  }
                }  // container violation-count
              }  // list sla-rule
    
              list multipath-rule {
                key "name";
                ordered-by user;
                description
                  "APP based MULTIPATH Route Action's settings";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Multipath rule name";
                }
    
                uses apply-advanced;
    
                leaf number-of-paths {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 16";
                    }
                  }
                  default "2";
                  description
                    "No. of Paths in Multipath";
                }
    
                leaf bandwidth-limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  default "50";
                  description
                    "Bandwidth limit (bps) on slowest link to avoid saturation (%)";
                }
    
                leaf enable-reverse-wing {
                  type empty;
                  description
                    "Packet copy enabled in reverse direction flow";
                }
    
                leaf-list application {
                  type string;
                  ordered-by user;
                }
    
                leaf-list application-group {
                  type string;
                  ordered-by user;
                  description
                    "Specify dynamic application group name to match";
                }
    
                leaf-list link-type {
                  type string {
                    length "1 .. 63";
                  }
                  ordered-by user;
                  description
                    "List of underlay interface user defined link types";
                }
    
                leaf-list link-preferences {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "List of interface for link preferences";
                }
              }  // list multipath-rule
    
              list policy {
                key "name";
                ordered-by user;
                description
                  "Define a policy context from this zone";
                leaf name {
                  junos:must "((".. .. .. .. security zones security-zone $$" || ".. .. .. .. .. security zones security-zone $$"))";
                  junos:must-message "Security zone must be defined";
                  type string {
                    length "1 .. 63";
                  }
                  description "Source zone";
                }
    
                uses apply-advanced;
    
                list policy {
                  key "name";
                  ordered-by user;
                  description
                    "Define security policy in specified zone-to-zone direction";
                  uses sla_policy_type;
                }  // list policy
              }  // list policy
            }  // container advance-policy-based-routing
    
            container gtp {
              description
                "GPRS tunneling protocol configuration";
              uses gtp-object;
            }  // container gtp
    
            container sctp {
              presence "enable sctp";
              description
                "GPRS stream control transmission protocol configuration";
              uses sctp-object;
            }  // container sctp
    
            container ngfw {
              description
                "Next generation unified L4/L7 firewall";
              uses apply-advanced;
    
              container default-profile {
                description
                  "Unified L4/L7 firewall default profile configuration";
                uses apply-advanced;
    
                container ssl-proxy {
                  presence "enable ssl-proxy";
                  description
                    "SSL proxy services";
                  uses apply-advanced;
    
                  leaf profile-name {
                    junos:must "("services ssl proxy profile $$")";
                    junos:must-message "Referenced SSL proxy profile is not defined";
                    type string;
                    description
                      "Specify SSL proxy service profile name";
                  }
                }  // container ssl-proxy
    
                container application-traffic-control {
                  description
                    "Application traffic control services";
                  uses jsf_application_traffic_control_rule_set_type;
                }  // container application-traffic-control
              }  // container default-profile
            }  // container ngfw
    
            container tunnel-inspection {
              presence
                "enable tunnel-inspection";
              description
                "Security tunnel-inspection";
              uses apply-advanced;
    
              list inspection-profile {
                key "name";
                max-elements 256;
                ordered-by user;
                description
                  "Security tunnel-inspection profile";
                uses tunnel-inspection-profile-type;
              }  // list inspection-profile
    
              list vni {
                key "name";
                max-elements 4096;
                ordered-by user;
                description
                  "Security tunnel inspection vni";
                uses tunnel-inspection-vni-type;
              }  // list vni
    
              container traceoptions {
                description
                  "Trace options for Network Security tunnel-inspection";
                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 "flow" {
                        value 1;
                        description
                          "Trace flow events";
                      }
                      enum "all" {
                        value 2;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
            }  // container tunnel-inspection
    
            container l3vpn {
              presence "enable l3vpn";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Trace options for Network Security Vrf-group";
                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 "flow" {
                        value 1;
                        description
                          "Trace flow events";
                      }
                      enum "all" {
                        value 2;
                        description
                          "Trace everything";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
    
              list vrf-group {
                key "name";
                description
                  "Configure vrf group";
                uses vrf-group-type;
              }  // list vrf-group
            }  // container l3vpn
    
            container cloud {
              presence "enable cloud";
              description
                "Configure Cloud security options";
              uses apply-advanced;
    
              container aws {
                description
                  "Configure AWS security options";
                uses aws-object;
              }  // container aws
    
              container traceoptions {
                description
                  "Configure cloudagent trace options";
                uses apply-advanced;
    
                container file {
                  description
                    "Trace file information";
                  leaf filename {
                    type string {
                      junos:posix-pattern "![/ %]";
                      junos:pattern-message "Must not contain '/', % or a space";
                      length "1 .. 64";
                    }
                    description
                      "Name of file in which to write trace information";
                  }
                }  // container file
    
                container level {
                  description "Trace level";
                  uses apply-advanced;
    
                  choice level {
                    leaf error {
                      type empty;
                      description
                        "Error messages";
                    }
                    leaf brief {
                      type empty;
                      description
                        "Brief messages";
                    }
                    leaf detail {
                      type empty;
                      description
                        "Detail messages";
                    }
                  }  // choice level
                }  // container level
              }  // container traceoptions
            }  // container cloud
    
            container macsec {
              description
                "MAC Security configuration";
              uses security-macsec;
            }  // container macsec
          }  // container security
    
          container applications {
            description
              "Define applications by protocol characteristics";
            uses apply-advanced;
    
            list application {
              key "name";
              ordered-by user;
              description
                "Define an application";
              uses application_object;
            }  // list application
    
            list application-set {
              key "name";
              ordered-by user;
              description
                "Define an application set";
              uses application_set_object;
            }  // list application-set
          }  // container applications
    
          container schedulers {
            description "Security scheduler";
            uses apply-advanced;
    
            list scheduler {
              key "name";
              ordered-by user;
              description
                "Scheduler configuration";
              uses scheduler_object_type;
            }  // list scheduler
          }  // container schedulers
    
          container access {
            presence "enable access";
            uses apply-advanced;
    
            container firewall-authentication {
              description
                "Type of firewall authentication";
              uses apply-advanced;
    
              container pass-through {
                description
                  "Pass-through firewall authentication settings";
                uses apply-advanced;
    
                leaf default-profile {
                  junos:must "(("access profile $$" || (".. .. .. .. .. access profile $$" && !(".. .. .. .. .. access disable-tenant-access"))))";
                  junos:must-message "Profile must be defined in the [edit access profile] hierarchy or access to profile is disabled for tenants";
                  type string {
                    length "1 .. 250";
                  }
                  description
                    "Name of default profile";
                }
    
                container ftp {
                  description "FTP banners";
                  uses banner-object;
                }  // container ftp
    
                container telnet {
                  description "Telnet banners";
                  uses banner-object;
                }  // container telnet
    
                container http {
                  description "HTTP banners";
                  uses banner-object;
                }  // container http
              }  // container pass-through
    
              container web-authentication {
                description
                  "Web-authentication settings";
                uses apply-advanced;
    
                leaf default-profile {
                  junos:must "(("access profile $$" || (".. .. .. .. .. access profile $$" && !(".. .. .. .. .. access disable-tenant-access"))))";
                  junos:must-message "Profile must be defined in the [edit access profile] hierarchy or access to profile is disabled for tenants";
                  type string {
                    length "1 .. 250";
                  }
                  description
                    "Name of profile to use for web-authentication";
                }
    
                container banner {
                  uses apply-advanced;
    
                  leaf success {
                    type string {
                      length "1 .. 250";
                    }
                    description
                      "The message that will be displayed on successful login";
                  }
                }  // container banner
    
                leaf timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type int32 {
                      range "5 .. 60";
                    }
                  }
                  description
                    "Web-authentication timeout value in seconds";
                }
              }  // container web-authentication
    
              container traceoptions {
                description
                  "Firewall authentication tracing 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 "configuration" {
                        value 0;
                        description
                          "Trace configuration events";
                      }
                      enum "setup" {
                        value 1;
                        description
                          "Trace setup of firewall authentication service";
                      }
                      enum "authentication" {
                        value 2;
                        description
                          "Trace authentication events";
                      }
                      enum "all" {
                        value 3;
                        description
                          "Trace with all flags enabled";
                      }
                    }
                  }
                }  // list flag
              }  // container traceoptions
            }  // container firewall-authentication
    
            list profile {
              key "name";
              ordered-by user;
              description
                "Set of attributes that define access";
              leaf name {
                type string {
                  length "1 .. 63";
                }
                description "Profile name";
              }
    
              uses apply-advanced;
    
              leaf-list accounting-order {
                junos:must "(!(any ".. client <*> l2tp"))";
                junos:must-message "Not supported in tunnel client profile configuration";
                junos:must "(!(any ".. client <*> ike"))";
                junos:must-message "Not supported in IKE configuration";
                type enumeration {
                  enum "radius" {
                    value 0;
                    description
                      "Remote Authentication Dial-In User Service";
                  }
                }
                ordered-by user;
                description
                  "Order in which accounting mechanisms are used";
              }
    
              leaf-list authentication-order {
                type enumeration {
                  enum "radius" {
                    junos:must "(!(any ".. .. client <*> l2tp"))";
                    junos:must-message "Authentication-order cannot include RADIUS for tunnel client profile";
                    value 0;
                    description
                      "Remote Authentication Dial-In User Service";
                  }
                  enum "password" {
                    value 1;
                    description
                      "Locally configured password in access profile";
                  }
                  enum "none" {
                    value 2;
                    description
                      "No authentication performed";
                  }
                  enum "nasreq" {
                    value 3;
                    description
                      "Diameter based authentication and authorization using NASREQ application protocol";
                  }
                  enum "nas-5g" {
                    value 4;
                    description
                      "Authentication and authorization using 3GPP N1 and N2 signaling";
                  }
                  enum "ldap" {
                    junos:must "((!(any ".. .. client <*> l2tp") && !(any ".. .. client <*> ppp")))";
                    junos:must-message "Authentication-order cannot include LDAP for tunnel, ppp client profile";
                    junos:must "((!(".. .. authentication-order $$={radius}") && (!(".. .. authentication-order $$={securid}") && !(".. .. authentication-order $$={s6a}"))))";
                    junos:must-message "Only one of ldap, radius, ecurid or s6a can be specified";
                    value 5;
                    description
                      "Lightweight Directory Access Protocol";
                  }
                  enum "securid" {
                    junos:must "((!(any ".. .. client <*> l2tp") && !(any ".. .. client <*> ppp")))";
                    junos:must-message "Authentication-order cannot include securid for tunnel, ppp client profile";
                    junos:must "((!(".. .. authentication-order $$={radius}") && (!(".. .. authentication-order $$={ldap}") && !(".. .. authentication-order $$={s6a}"))))";
                    junos:must-message "Only one of ldap, radius, securid or s6a can be specified";
                    value 6;
                    description
                      "RSA SecurID Authentication";
                  }
                  enum "s6a" {
                    junos:must "((!(any ".. .. client <*> l2tp") && !(any ".. .. client <*> ppp")))";
                    junos:must-message "Authentication-order cannot include S6A for tunnel, ppp client profile";
                    junos:must "((!(".. .. authentication-order $$={radius}") && (!(".. .. authentication-order $$={securid}") && !(".. .. authentication-order $$={ldap}"))))";
                    junos:must-message "Only one of ldap, radius, securid or s6a can be specified";
                    value 7;
                    description
                      "S6a Authentication";
                  }
                }
                ordered-by user;
                description
                  "Order in which authentication mechanisms are used";
              }
    
              leaf-list authorization-order {
                type enumeration {
                  enum "jsrc" {
                    value 0;
                    description
                      "Diameter based authorization using Juniper's SRC application protocol";
                  }
                  enum "nasreq" {
                    value 1;
                    description
                      "Diameter based authorization using NASREQ application protocol";
                  }
                  enum "none" {
                    value 2;
                    description
                      "No authorization performed";
                  }
                }
                ordered-by user;
                description
                  "Order in which authorization mechanisms are used";
              }
    
              leaf provisioning-order {
                type enumeration {
                  enum "jsrc" {
                    value 0;
                    description
                      "Address authorization via SRC";
                  }
                  enum "gx-plus" {
                    value 1;
                    description
                      "Policy/service provisioning via GXPLUS";
                  }
                  enum "pcrf" {
                    value 2;
                    description
                      "Policy/service provisioning via PCRF";
                  }
                }
                description
                  "Order in which provisioning mechanisms are used";
              }
    
              leaf-list preauthentication-order {
                junos:must "(!(".. radius attributes exclude calling-station-id access-request"))";
                junos:must-message "calling-station-id is excluded from access request";
                type enumeration {
                  enum "radius" {
                    value 0;
                    description
                      "Remote Authentication Dial-In User Service";
                  }
                }
                ordered-by user;
                description
                  "Order in which preauthentication mechanisms are used";
              }
    
              leaf-list charging-service-list {
                junos:must "(".. provisioning-order pcrf")";
                junos:must-message "charging-service-list requires provisioning-order pcrf";
                junos:must "(!(".. service accounting-order"))";
                junos:must-message "charging-service-list is mutually exclusive with service accounting";
                type enumeration {
                  enum "ocs" {
                    value 0;
                    description
                      "Online charging service";
                  }
                }
                ordered-by user;
                description
                  "List of used 3gpp charging servicess";
              }
    
              list domain-name-server {
                key "name";
                ordered-by user;
                description
                  "Default DNS server's IPv4 address";
                leaf name {
                  type jt:ipv4addr;
                  description "Address";
                }
    
                uses apply-advanced;
              }  // list domain-name-server
    
              list domain-name-server-inet {
                key "name";
                ordered-by user;
                description
                  "DNS server's IPv4 address";
                leaf name {
                  type jt:ipv4addr;
                  description "Address";
                }
    
                uses apply-advanced;
              }  // list domain-name-server-inet
    
              list domain-name-server-inet6 {
                key "name";
                ordered-by user;
                description
                  "DNS server's IPv6 address";
                leaf name {
                  type jt:ipv6addr;
                  description "Address";
                }
    
                uses apply-advanced;
              }  // list domain-name-server-inet6
    
              list wins-server {
                key "name";
                ordered-by user;
                description
                  "Default WINS server's IPv4 address";
                leaf name {
                  type jt:ipv4addr;
                  description "Address";
                }
    
                uses apply-advanced;
              }  // list wins-server
    
              list client {
                junos:must "(((!(any ". <*> l2tp") || !(any ". <*> ppp")) && ((!(any ". <*> l2tp") || !(any ". <*> ike")) && (!(any ". <*> ike") || !(any ". <*> ppp")))))";
                junos:must-message "All clients in one profile must be either PPP or L2TP or IKE";
                key "name";
                description
                  "Entity requesting access";
                uses access-client-object;
              }  // list client
    
              container address-assignment {
                description
                  "Address assignment pool";
                uses apply-advanced;
    
                leaf pool {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Name of address-assignment pool";
                }
    
                leaf inet6-pool {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Name of address-assignment pool for family inet6";
                }
              }  // container address-assignment
    
              leaf session-limit-per-username {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16";
                  }
                }
                description
                  "Maximum number of sessions allowed per username";
              }
    
              container local {
                status deprecated;
                description
                  "Set configuration for local reporting - obsolete config";
                uses apply-advanced;
    
                leaf flat-file-profile {
                  junos:must "("accounting-options flat-file-profile $$")";
                  junos:must-message "referenced flat-file-profile must be defined in accounting-options";
                  type string;
                  description
                    "Specifies that the service accounting will be reported as per flat-file profile";
                }
              }  // container local
    
              container radius {
                description
                  "Set of RADIUS configurations";
                uses apply-advanced;
    
                leaf-list authentication-server {
                  type jt:ipaddr;
                  ordered-by user;
                  description
                    "The authentication server list to use in the specified order to send authentication messages";
                }
    
                leaf-list accounting-server {
                  type jt:ipaddr;
                  ordered-by user;
                  description
                    "The accounting server list to use in the specified order to send accounting messages";
                }
    
                leaf-list preauthentication-server {
                  type jt:ipv4addr;
                  ordered-by user;
                  description
                    "The preauthentication server list to use in the specified order to send preauthentication messages";
                }
    
                leaf authentication-server-name {
                  junos:must "(!(".. authentication-server"))";
                  junos:must-message "cannot have both authentication-server and authentication-server-name";
                  junos:must "(("access radius-server-name $$" || ".. .. radius-server-name $$"))";
                  junos:must-message "referenced radius-server-name must be defined";
                  type string {
                    length "4 .. 255";
                  }
                  description
                    "The authentication server to use to send authentication messages";
                }
    
                leaf accounting-server-name {
                  junos:must "(!(".. accounting-server"))";
                  junos:must-message "cannot have both accounting-server and accounting-server-name";
                  junos:must "(("access radius-server-name $$" || ".. .. radius-server-name $$"))";
                  junos:must-message "referenced radius-server-name must be defined";
                  type string {
                    length "4 .. 255";
                  }
                  description
                    "The accounting server to use to send accounting messages";
                }
    
                container options {
                  description
                    "Specifies the RADIUS options";
                  uses apply-advanced;
    
                  leaf ethernet-port-type-virtual {
                    type empty;
                    description
                      "Type of physical port to authenticate the user is virtual (RADIUS attribute 61)";
                  }
    
                  container interface-description-format {
                    description
                      "Interface description in the NAS-port-ID attribute";
                    uses apply-advanced;
    
                    leaf exclude-sub-interface {
                      type empty;
                      description
                        "Exclude sub-interface from interface description";
                    }
    
                    leaf exclude-adapter {
                      type empty;
                      description
                        "Exclude adapter from interface description";
                    }
    
                    leaf exclude-channel {
                      type empty;
                      description
                        "Exclude channel from interface description";
                    }
                  }  // container interface-description-format
    
                  leaf nas-identifier {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "NAS-Identifier to be used for authentication and accounting requests (RADIUS attribute 32)";
                  }
    
                  container nas-port-extended-format {
                    description
                      "RADIUS client's use of an extended format for RADIUS attribute 5";
                    uses apply-advanced;
    
                    leaf ae-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the aggregated ethernet identifier field";
                    }
    
                    leaf slot-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the slot field";
                    }
    
                    leaf adapter-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the adapter field";
                    }
    
                    leaf port-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the port field";
                    }
    
                    leaf pw-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the pseudo-wire field";
                    }
    
                    leaf stacked-vlan-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the S-VLAN subinterface field";
                    }
    
                    leaf vlan-width {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 32";
                        }
                      }
                      units "bits";
                      description
                        "Number of bits for the VLAN subinterface field";
                    }
    
                    container atm {
                      description
                        "ATM specific parameters for NAS Port";
                      uses apply-advanced;
    
                      leaf slot-width {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 32";
                          }
                        }
                        units "bits";
                        description
                          "Number of bits for the ATM slot field";
                      }
    
                      leaf adapter-width {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 32";
                          }
                        }
                        units "bits";
                        description
                          "Number of bits for the ATM adapter field";
                      }
    
                      leaf port-width {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 32";
                          }
                        }
                        units "bits";
                        description
                          "Number of bits for the ATM port field";
                      }
    
                      leaf vpi-width {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 32";
                          }
                        }
                        units "bits";
                        description
                          "Number of bits for the ATM VPI field";
                      }
    
                      leaf vci-width {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 32";
                          }
                        }
                        units "bits";
                        description
                          "Number of bits for the ATM VCI field";
                      }
                    }  // container atm
                  }  // container nas-port-extended-format
    
                  leaf nas-port-id-delimiter {
                    type string {
                      length "1";
                    }
                    description
                      "Single character delimiter character to use in the NAS-Port-Id";
                  }
    
                  container nas-port-id-format {
                    description
                      "Format methods for building the NAS-Port-Id radius attribute";
                    uses apply-advanced;
    
                    leaf nas-identifier {
                      type empty;
                      description
                        "Include the nas-identifier value";
                    }
    
                    leaf interface-description {
                      type empty;
                      description
                        "Include the interface-description value";
                    }
    
                    leaf agent-circuit-id {
                      type empty;
                      description
                        "Include (ACI) agent-circuit-id value";
                    }
    
                    leaf agent-remote-id {
                      type empty;
                      description
                        "Include (ARI) agent-remote-id value";
                    }
    
                    leaf postpend-vlan-tags {
                      type empty;
                      description
                        "Include the vlan tag(s) using :<outer>-<inner>";
                    }
    
                    leaf interface-text-description {
                      type empty;
                      description
                        "Include the interfaces description string";
                    }
    
                    leaf-list concatenated-vlan-tags {
                      type enumeration {
                        enum
                          "fixed-size-outer-tag" {
                          value 0;
                          description
                            "Fixed size outer VLAN tag value of 4 octets";
                        }
                        enum
                          "fixed-size-inner-tag" {
                          value 1;
                          description
                            "Fixed size inner VLAN tag value of 4 octets";
                        }
                      }
                      ordered-by user;
                      description
                        "Include the vlan tag(s) as a concatenated string";
                    }
    
                    leaf-list order {
                      junos:must "((!(".. nas-identifier") && (!(".. interface-description") && (!(".. agent-circuit-id") && (!(".. agent-remote-id") && (!(".. postpend-vlan-tags") && (!(".. concatenated-vlan-tags") && !(".. interface-text-description"))))))))";
                      junos:must-message "Order is mutually exclusive with other nas-port-id-format options";
                      type enumeration {
                        enum "nas-identifier" {
                          value 0;
                          description
                            "Include the nas-identifier value";
                        }
                        enum "agent-circuit-id" {
                          value 1;
                          description
                            "Include (ACI) agent-circuit-id value";
                        }
                        enum "agent-remote-id" {
                          value 2;
                          description
                            "Include (ARI) agent-remote-id value";
                        }
                        enum
                          "interface-description" {
                          value 3;
                          description
                            "Include the interface-description value";
                        }
                        enum
                          "interface-text-description" {
                          value 4;
                          description
                            "Include the interface's description string";
                        }
                        enum
                          "postpend-vlan-tags" {
                          value 5;
                          description
                            "Include the vlan tag(s) using :<outer>-<inner>";
                        }
                      }
                      ordered-by user;
                      description
                        "Order of options for appearance in the NAS-Port-Id string";
                    }
                  }  // container nas-port-id-format
    
                  container nas-port-type {
                    description
                      "Translation mechanism for changing the NAS-Port-Type radius attribute";
                    uses apply-advanced;
    
                    leaf ethernet {
                      type string;
                      description
                        "Translation mechanism for changing the Ethernet value";
                    }
                  }  // container nas-port-type
    
                  leaf calling-station-id-delimiter {
                    type string {
                      length "1";
                    }
                    description
                      "Single character separator for calling-station-id";
                  }
    
                  container calling-station-id-format {
                    description
                      "Format method for building the calling-station-id";
                    uses apply-advanced;
    
                    leaf nas-identifier {
                      type empty;
                      description
                        "Include the nas-identifier value";
                    }
    
                    leaf interface-description {
                      type empty;
                      description
                        "Include the interface-description value";
                    }
    
                    leaf agent-circuit-id {
                      type empty;
                      description
                        "Include agent-circuit-id value";
                    }
    
                    leaf agent-remote-id {
                      type empty;
                      description
                        "Include agent-remote-id value";
                    }
    
                    leaf mac-address {
                      type empty;
                      description
                        "Include mac-address value";
                    }
    
                    leaf interface-text-description {
                      type empty;
                      description
                        "Include the interfaces description string";
                    }
    
                    leaf stacked-vlan {
                      type empty;
                      description
                        "Include the stacked vlan tag value";
                    }
    
                    leaf vlan {
                      type empty;
                      description
                        "Include the vlan tag value";
                    }
                  }  // container calling-station-id-format
    
                  leaf accounting-session-id-format {
                    type enumeration {
                      enum "decimal" {
                        value 0;
                        description
                          "Decimal-session-identifier";
                      }
                      enum "description" {
                        value 1;
                        description
                          "Description Format: <jnpr> <interface-type> <interface-specifier>:<session-identifier>";
                      }
                    }
                    description
                      "Decimal format or description format for the accounting session ID";
                  }
    
                  leaf accounting-session-id-strict {
                    type empty;
                    description
                      "Enforce exact match of accounting-session-id in CoA processing";
                  }
    
                  leaf revert-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 604800";
                      }
                    }
                    units "seconds";
                    description
                      "Time after which to revert to primary server";
                  }
    
                  leaf vlan-nas-port-stacked-format {
                    type empty;
                    description
                      "Include the S-VLAN ID, in addition to the VLAN ID, for subscribers on Ethernet interfaces";
                  }
    
                  leaf client-authentication-algorithm {
                    type enumeration {
                      enum "direct" {
                        value 0;
                        description
                          "Contacts the first AAA server on the list for each request, the second AAA server if the first one fails, and so on";
                      }
                      enum "round-robin" {
                        value 1;
                        description
                          "Contacts the first AAA server for the first request, the second AAA server for the second request, and so on";
                      }
                    }
                    description
                      "Algorithm to access the RADIUS servers for authentication";
                  }
    
                  leaf client-accounting-algorithm {
                    type enumeration {
                      enum "direct" {
                        value 0;
                        description
                          "Contacts the first AAA server on the list for each request, the second AAA server if the first one fails, and so on";
                      }
                      enum "round-robin" {
                        value 1;
                        description
                          "Contacts the first AAA server for the first request, the second AAA server for the second request, and so on";
                      }
                    }
                    description
                      "Algorithm to access the RADIUS servers for accounting";
                  }
    
                  leaf juniper-access-line-attributes {
                    type empty;
                    description
                      "Include the Juniper (IANA 4874) access line VSAs in requests to RADIUS servers";
                  }
    
                  container ip-address-change-notify {
                    junos:must "(".. .. .. accounting address-change-immediate-update")";
                    junos:must-message "address-change-immediate-update must be configured";
                    presence
                      "enable ip-address-change-notify";
                    description
                      "Include IPv4-Release-Control VSA (26-164) in requests to RADIUS server";
                    leaf message {
                      type string {
                        length "1 .. 32";
                      }
                      description
                        "Message to be added in IPv4-Release-Control VSA (26-164)";
                    }
                  }  // container ip-address-change-notify
    
                  leaf coa-dynamic-variable-validation {
                    type empty;
                    description
                      "Enable strict dynamic variable validation (no undefined variable) in CoA processing";
                  }
    
                  leaf chap-challenge-in-request-authenticator {
                    type empty;
                    description
                      "Use 16-byte CHAP challenge as Request Authenticator";
                  }
    
                  container service-activation {
                    description
                      "Service activation requirement for successful login";
                    uses apply-advanced;
    
                    leaf extensible-service {
                      type enumeration {
                        enum "required-at-login" {
                          value 0;
                          description
                            "Service activation must succeed to allow subscriber login";
                        }
                        enum "optional-at-login" {
                          value 1;
                          description
                            "Service activation success is not required to allow subscriber login";
                        }
                      }
                      default
                        "optional-at-login";
                      description
                        "Service activation of extensible services requirement for successful login";
                    }
    
                    leaf dynamic-profile {
                      type enumeration {
                        enum "required-at-login" {
                          value 0;
                          description
                            "Service activation must succeed to allow subscriber login";
                        }
                        enum "optional-at-login" {
                          value 1;
                          description
                            "Service activation success is not required to allow subscriber login";
                        }
                      }
                      default
                        "required-at-login";
                      description
                        "Service activation of dynamic-profile services requirement for successful login";
                    }
                  }  // container service-activation
    
                  leaf accounting-username-original {
                    type empty;
                    description
                      "Use orignal (un-modified) username in accounting messages";
                  }
                }  // container options
    
                container attributes {
                  description
                    "Specifies how RADIUS attributes should be handled";
                  uses apply-advanced;
    
                  container ignore {
                    description
                      "Ignores the specified attribute in RADIUS Access-Accept messages";
                    uses apply-advanced;
    
                    leaf output-filter {
                      type empty;
                      description
                        "Juniper (IANA 4874) Output-filter / Egress-Policy-Name (VSA 26-11)";
                    }
    
                    leaf input-filter {
                      type empty;
                      description
                        "Juniper (IANA 4874) Input-filter / Ingress-Policy-Name (VSA 26-10)";
                    }
    
                    leaf framed-ip-netmask {
                      type empty;
                      description
                        "Framed-IP-Netmask (attribute 9)";
                    }
    
                    leaf logical-system-routing-instance {
                      type empty;
                      description
                        "Juniper (IANA 4874) Logical-system-routing-instance / Virtual-Router (VSA 26-1)";
                    }
    
                    leaf dynamic-iflset-name {
                      type empty;
                      description
                        "Juniper (IANA 4874) Dynamic interface set / Qos-Set-Name (VSA 26-130)";
                    }
    
                    leaf idle-timeout {
                      type empty;
                      description
                        "Idle-Timeout (attribute 28)";
                    }
    
                    leaf session-timeout {
                      type empty;
                      description
                        "Session-Timeout (attribute 27)";
                    }
    
                    leaf-list standard-attribute {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      ordered-by user;
                      description
                        "RADIUS standard attribute number";
                    }
    
                    list vendor-id {
                      key "name";
                      ordered-by user;
                      description
                        "Specify the vendor-identifier for a vendor-specific attribute (VSA)";
                      leaf name {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "1 .. 16777215";
                          }
                        }
                        description
                          "Vendor IANA enterprise number";
                      }
    
                      uses apply-advanced;
    
                      leaf-list vendor-attribute {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 255";
                          }
                        }
                        ordered-by user;
                        description
                          "Vendor specific attribute number";
                      }
                    }  // list vendor-id
                  }  // container ignore
    
                  container exclude {
                    description
                      "Configures the exclusion of RADIUS attributes in RADIUS messages";
                    uses apply-advanced;
    
                    list standard-attribute {
                      key "name";
                      ordered-by user;
                      description
                        "Specify RADIUS standard attribute number";
                      leaf name {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 255";
                          }
                        }
                        description
                          "RADIUS standard attribute number";
                      }
    
                      uses apply-advanced;
    
                      leaf-list packet-type {
                        type enumeration {
                          enum "access-request" {
                            value 0;
                            description
                              "RADIUS Access-Request message";
                          }
                          enum "accounting-on" {
                            value 1;
                            description
                              "RADIUS Accounting-On Message";
                          }
                          enum "accounting-off" {
                            value 2;
                            description
                              "RADIUS Accounting-Off message";
                          }
                          enum
                            "accounting-start" {
                            value 3;
                            description
                              "RADIUS Accounting-Start message";
                          }
                          enum "accounting-stop" {
                            value 4;
                            description
                              "RADIUS Accounting-Stop message";
                          }
                        }
                        ordered-by user;
                        description
                          "Specify packet types to be excluded";
                      }
                    }  // list standard-attribute
    
                    list vendor-id {
                      key "name";
                      ordered-by user;
                      description
                        "Specify the vendor-identifier for a vendor-specific attribute (VSA)";
                      leaf name {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range
                              "1 .. 16777215";
                          }
                        }
                        description
                          "Vendor IANA enterprise number";
                      }
    
                      uses apply-advanced;
    
                      list vendor-attribute {
                        key "name";
                        ordered-by user;
                        description
                          "Specify vendor specific attribute number";
                        leaf name {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "1 .. 255";
                            }
                          }
                          description
                            "Vendor specific attribute number";
                        }
    
                        uses apply-advanced;
    
                        leaf-list packet-type {
                          type enumeration {
                            enum
                              "access-request" {
                              value 0;
                              description
                                "RADIUS Access-Request message";
                            }
                            enum "accounting-on" {
                              value 1;
                              description
                                "RADIUS Accounting-On Message";
                            }
                            enum
                              "accounting-off" {
                              value 2;
                              description
                                "RADIUS Accounting-Off message";
                            }
                            enum
                              "accounting-start" {
                              value 3;
                              description
                                "RADIUS Accounting-Start message";
                            }
                            enum
                              "accounting-stop" {
                              value 4;
                              description
                                "RADIUS Accounting-Stop message";
                            }
                          }
                          ordered-by user;
                          description
                            "Specify packet types to be excluded";
                        }
                      }  // list vendor-attribute
                    }  // list vendor-id
    
                    leaf-list accounting-authentic {
                      type enumeration {
                        enum "accounting-on" {
                          value 0;
                          description
                            "RADIUS Accounting-On Message";
                        }
                        enum "accounting-off" {
                          value 1;
                          description
                            "RADIUS Accounting-Off message";
                        }
                        enum "accounting-start" {
                          value 2;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 3;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 45, Acct-Authentic";
                    }
    
                    leaf-list accounting-delay-time {
                      type enumeration {
                        enum "accounting-on" {
                          value 0;
                          description
                            "RADIUS Accounting-On Message";
                        }
                        enum "accounting-off" {
                          value 1;
                          description
                            "RADIUS Accounting-Off message";
                        }
                        enum "accounting-start" {
                          value 2;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 3;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 41, Acct-Delay-Time";
                    }
    
                    leaf-list accounting-session-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 44, Acct-Session-ID";
                    }
    
                    leaf-list accounting-terminate-cause {
                      type enumeration {
                        enum "accounting-off" {
                          value 0;
                          description
                            "RADIUS Accounting-Off message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 49, Acct-Terminate-Cause";
                    }
    
                    leaf-list called-station-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 30, Called-Station-ID";
                    }
    
                    leaf-list calling-station-id {
                      type enumeration {
                        enum "access-request" {
                          junos:must "(!(".. .. .. .. .. preauthentication-order"))";
                          junos:must-message "Preauthentication-order and exclude calling-station-id in access-request are mutually exclusive";
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 31, Calling-Station-ID";
                    }
    
                    leaf-list class {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 25, Class";
                    }
    
                    leaf-list delegated-ipv6-prefix {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 123, Delegated-IPv6-Prefix";
                    }
    
                    leaf-list dhcp-options {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-55, DHCP-Options";
                    }
    
                    leaf-list dhcp-gi-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-57, DHCP-GI-Address";
                    }
    
                    leaf-list dhcp-mac-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-56, DHCP-MAC-Address";
                    }
    
                    leaf-list output-filter {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-11, Egress-Policy-Name";
                    }
    
                    leaf-list event-time-stamp {
                      type enumeration {
                        enum "accounting-on" {
                          value 0;
                          description
                            "RADIUS Accounting-On Message";
                        }
                        enum "accounting-off" {
                          value 1;
                          description
                            "RADIUS Accounting-Off message";
                        }
                        enum "accounting-start" {
                          value 2;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 3;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 55, Event-Timestamp";
                    }
    
                    leaf-list filter-id {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 11, Filter-Id";
                    }
    
                    leaf-list framed-ip-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 8, Framed-IP-Address";
                    }
    
                    leaf-list framed-ip-netmask {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 9, Framed-IP-Netmask";
                    }
    
                    leaf-list framed-ip-route {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 22, Framed-Route";
                    }
    
                    leaf-list framed-ipv6-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 168, Framed-IPV6-Address";
                    }
    
                    leaf-list framed-ipv6-pool {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 100, Framed-IPv6-Pool";
                    }
    
                    leaf-list framed-ipv6-prefix {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 97, Framed-IPv6-Prefix";
                    }
    
                    leaf-list framed-ipv6-route {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 99, Framed-IPv6-Route";
                    }
    
                    leaf-list framed-pool {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 88, Framed-Pool";
                    }
    
                    leaf-list input-filter {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-10, Ingress-Policy-Name";
                    }
    
                    leaf-list input-gigapackets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-42, Acct-Input-Gigapackets";
                    }
    
                    leaf-list input-gigawords {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 52, Acct-Input-Gigawords";
                    }
    
                    leaf-list input-ipv6-packets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-153, Acct-Input-IPv6-Packets";
                    }
    
                    leaf-list input-ipv6-gigawords {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-155, Acct-Input-IPv6-Gigawords";
                    }
    
                    leaf-list input-ipv6-octets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-151, Acct-Input-IPv6-Octets";
                    }
    
                    leaf-list interface-description {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-63, Interface-Desc";
                    }
    
                    leaf-list nas-identifier {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-on" {
                          value 1;
                          description
                            "RADIUS Accounting-On Message";
                        }
                        enum "accounting-off" {
                          value 2;
                          description
                            "RADIUS Accounting-Off message";
                        }
                        enum "accounting-start" {
                          value 3;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 4;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 32, NAS-identifier";
                    }
    
                    leaf-list nas-port {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 5, NAS-Port";
                    }
    
                    leaf-list nas-port-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 87, NAS-Port-ID";
                    }
    
                    leaf-list nas-port-type {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 61, NAS-Port-Type";
                    }
    
                    leaf-list output-gigapackets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-43, Acct-Output-Gigapackets";
                    }
    
                    leaf-list output-gigawords {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 53, Acct-Output-Gigawords";
                    }
    
                    leaf-list output-ipv6-packets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-154, Acct-Output-IPv6-Packets";
                    }
    
                    leaf-list output-ipv6-gigawords {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-156, Acct-Output-IPv6-Gigawords";
                    }
    
                    leaf-list output-ipv6-octets {
                      type enumeration {
                        enum "accounting-stop" {
                          value 0;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA  26-152, Acct-Output-IPv6-Octets";
                    }
    
                    leaf-list dynamic-iflset-name {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-130, Dynamic-Iflset-Name";
                    }
    
                    leaf-list dsl-forum-attributes {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes DSL Forum RADIUS attributes (RFC 4679)";
                    }
    
                    leaf-list l2c-upstream-data {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-92, L2C-Upstream-Data";
                    }
    
                    leaf-list l2c-downstream-data {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-93, L2C-Downstream-Data";
                    }
    
                    leaf-list acc-loop-cir-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-110, Acc-Loop-Cir-Id";
                    }
    
                    leaf-list acc-aggr-cir-id-bin {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-111, Acc-Aggr-Cir-Id-Bin";
                    }
    
                    leaf-list acc-aggr-cir-id-asc {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-112, Acc-Aggr-Cir-Id-Asc";
                    }
    
                    leaf-list act-data-rate-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-113, Act-Data-Rate-Up";
                    }
    
                    leaf-list act-data-rate-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-114, Act-Data-Rate-Dn";
                    }
    
                    leaf-list min-data-rate-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-115, Min-Data-Rate-Up";
                    }
    
                    leaf-list min-data-rate-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-116, Min-Data-Rate-Dn";
                    }
    
                    leaf-list att-data-rate-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-117, Att-Data-Rate-Up";
                    }
    
                    leaf-list att-data-rate-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-118, Att-Data-Rate-Dn";
                    }
    
                    leaf-list max-data-rate-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-119, Max-Data-Rate-Up";
                    }
    
                    leaf-list max-data-rate-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-120, Max-Data-Rate-Dn";
                    }
    
                    leaf-list min-lp-data-rate-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-121, Min-Lp-Data-Rate-Up";
                    }
    
                    leaf-list min-lp-data-rate-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-122, Min-Lp-Data-Rate-Dn";
                    }
    
                    leaf-list max-interlv-delay-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-123, Max-Interlv-Delay-Up";
                    }
    
                    leaf-list act-interlv-delay-up {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-124, Act-Interlv-Delay-Up";
                    }
    
                    leaf-list max-interlv-delay-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-125, Max-Interlv-Delay-Dn";
                    }
    
                    leaf-list act-interlv-delay-dn {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-126, Act-Interlv-Delay-Dn";
                    }
    
                    leaf-list dsl-line-state {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-127, DSL-Line-State";
                    }
    
                    leaf-list dsl-type {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-128, DSL-Type";
                    }
    
                    leaf-list downstream-calculated-qos-rate {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-141, Downstream-Calculated-QoS-Rate";
                    }
    
                    leaf-list upstream-calculated-qos-rate {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) DSL VSA 26-142, Upstream-Calculated-QoS-Rate";
                    }
    
                    leaf-list cos-shaping-rate {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-177, Cos-Shaping-Rate";
                    }
    
                    leaf-list framed-interface-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 96, Framed-Interface-Id";
                    }
    
                    leaf-list chargeable-user-identity {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 89, Chargeable-User-Identity";
                    }
    
                    leaf-list l2tp-tx-connect-speed {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-162, , L2TP-Tx-Connect-Speed";
                    }
    
                    leaf-list l2tp-rx-connect-speed {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-163, , L2TP-Rx-Connect-Speed";
                    }
    
                    leaf-list tunnel-type {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 64, Tunnel-Type";
                    }
    
                    leaf-list tunnel-medium-type {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 65, Tunnel-Medium-Type";
                    }
    
                    leaf-list tunnel-client-endpoint {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 66, Tunnel-Client-Endpoint";
                    }
    
                    leaf-list tunnel-server-endpoint {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 67, Tunnel-Server-Endpoint";
                    }
    
                    leaf-list tunnel-assignment-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 82, Tunnel-Assignment-Id";
                    }
    
                    leaf-list tunnel-client-auth-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 90, Tunnel-Client-Auth-Id";
                    }
    
                    leaf-list tunnel-server-auth-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 91, Tunnel-Server-Auth-Id";
                    }
    
                    leaf-list acct-tunnel-connection {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 68, Acct-Tunnel-Connection";
                    }
    
                    leaf-list acc-loop-remote-id {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-XXX, ERX-Acc-Loop-Remote-Id";
                    }
    
                    leaf-list acc-loop-encap {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-182, ERX-Acc-Loop-Encap";
                    }
    
                    leaf-list pppoe-description {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-24, PPPOE-Description";
                    }
    
                    leaf-list virtual-router {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Juniper (IANA 4874) VSA 26-1, Virtual-Router";
                    }
    
                    leaf-list first-relay-ipv4-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-189, DHCP-First-Relay-IPv4-Address";
                    }
    
                    leaf-list first-relay-ipv6-address {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-190, DHCP-First-Relay-IPv6-Address";
                    }
    
                    leaf-list dhcpv6-options {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                        enum "accounting-start" {
                          value 1;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 2;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-207, DHCPv6-Options";
                    }
    
                    leaf-list dhcp-header {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-208, DHCP-Header";
                    }
    
                    leaf-list dhcpv6-header {
                      type enumeration {
                        enum "access-request" {
                          value 0;
                          description
                            "RADIUS Access-Request message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-209, DHCPv6-Header";
                    }
    
                    leaf-list acct-request-reason {
                      type enumeration {
                        enum "accounting-start" {
                          value 0;
                          description
                            "RADIUS Accounting-Start message";
                        }
                        enum "accounting-stop" {
                          value 1;
                          description
                            "RADIUS Accounting-Stop message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes RADIUS attribute 26-210, Acct-Request-Reason";
                    }
                  }  // container exclude
                }  // container attributes
              }  // container radius
    
              container session-options {
                description
                  "Options for an authenticated client's session";
                uses apply-advanced;
    
                leaf-list client-group {
                  type string;
                  ordered-by user;
                  description
                    "One or more groups to which client belongs";
                }
    
                leaf client-idle-timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 1440";
                    }
                  }
                  units "minutes";
                  description
                    "Time in minutes of idleness after which access is denied";
                }
    
                leaf client-idle-timeout-ingress-only {
                  type empty;
                  description
                    "Idle timeout applies to ingress traffic only";
                }
    
                leaf client-session-timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 527040";
                    }
                  }
                  units "minutes";
                  description
                    "Time in minutes since initial access after which access is denied";
                }
    
                container strip-user-name {
                  description
                    "Options for stripping user name string";
                  uses apply-advanced;
    
                  container delimiter {
                    description
                      "Allowable delimiter characters for strip user name separation";
                    leaf characters {
                      type string {
                        length "1 .. 8";
                      }
                      description
                        "Sequence of characters without spaces and commas";
                    }
                  }  // container delimiter
    
                  container parse-direction {
                    description
                      "Strip user name parsing direction";
                    choice direction {
                      leaf right-to-left {
                        type empty;
                        description
                          "Parse the username from right to left";
                      }
                      leaf left-to-right {
                        type empty;
                        description
                          "Parse the username field from left to right";
                      }
                    }  // choice direction
                  }  // container parse-direction
                }  // container strip-user-name
    
                container pcc-context {
                  description
                    "Pcc context configurations";
                  uses apply-advanced;
    
                  leaf pcef-profile {
                    junos:must "("services pcef profile $$")";
                    junos:must-message "Referenced pcef profile must be defined";
                    type string;
                    description
                      "Pcef profile name";
                  }
    
                  leaf input-service-set {
                    junos:must "("services service-set $$")";
                    junos:must-message "Referenced service-set must be defined";
                    type string;
                    description
                      "Input service-set name";
                  }
    
                  leaf output-service-set {
                    junos:must "("services service-set $$")";
                    junos:must-message "Referenced service-set must be defined";
                    type string;
                    description
                      "Output service-set name";
                  }
    
                  leaf input-ipv6-service-set {
                    junos:must "("services service-set $$")";
                    junos:must-message "Referenced service-set must be defined";
                    type string;
                    description
                      "Input ipv6 service set name";
                  }
    
                  leaf output-ipv6-service-set {
                    junos:must "("services service-set $$")";
                    junos:must-message "Referenced service-set must be defined";
                    type string;
                    description
                      "Output ipv6 service set name";
                  }
    
                  leaf input-service-filter {
                    junos:must "("firewall family inet service-filter $$")";
                    junos:must-message "Referenced service-filter must be defined";
                    type string;
                    description
                      "Input service filter name";
                  }
    
                  leaf output-service-filter {
                    junos:must "("firewall family inet service-filter $$")";
                    junos:must-message "Referenced service-filter must be defined";
                    type string;
                    description
                      "Output service filter name";
                  }
    
                  leaf input-ipv6-service-filter {
                    junos:must "("firewall family inet6 service-filter $$")";
                    junos:must-message "Referenced service-filter must be defined";
                    type string;
                    description
                      "Input ipv6 service filter name";
                  }
    
                  leaf output-ipv6-service-filter {
                    junos:must "("firewall family inet6 service-filter $$")";
                    junos:must-message "Referenced service-filter must be defined";
                    type string;
                    description
                      "Output ipv6 service filter name";
                  }
                }  // container pcc-context
              }  // container session-options
    
              container client-name-filter {
                description
                  "Restrictions on client names";
                uses access-client-name-filter-object;
              }  // container client-name-filter
    
              container ldap-options {
                junos:must "((!(any ".. client <*> l2tp") && (!(any ".. client <*> ike") && !(any ".. client <*> ppp"))))";
                junos:must-message "'ldap-options' statement is not supported in L2TP, IKE, or PPP configuration";
                description
                  "Lightweight Directory Access Protocol options";
                uses access-ldap-options;
              }  // container ldap-options
    
              list ldap-server {
                junos:must "(".. ldap-options")";
                junos:must-message "ldap-options must be configured when ldap-server is configured";
                junos:must "((!(any ".. client <*> l2tp") && (!(any ".. client <*> ike") && !(any ".. client <*> ppp"))))";
                junos:must-message "'ldap-server' statement is not supported in L2TP, IKE, or PPP configuration";
                key "name";
                ordered-by user;
                description
                  "Lightweight Directory Access Protocol server";
                uses ldap-server-object;
              }  // list ldap-server
    
              list radius-server {
                junos:must "(!(any ".. client <*> l2tp"))";
                junos:must-message "Not supported in L2TP configuration";
                key "name";
                ordered-by user;
                description
                  "RADIUS server configuration";
                uses profile-radius-server-object;
              }  // list radius-server
    
              list radius-server-name {
                junos:must "(!(any ".. client <*> l2tp"))";
                junos:must-message "Not supported in L2TP configuration";
                key "name";
                ordered-by user;
                description
                  "RADIUS server FQDN configuration";
                uses profile-radius-server-name-object;
              }  // list radius-server-name
    
              container radius-options {
                description "RADIUS options";
                uses access-radius-options;
              }  // container radius-options
    
              container accounting {
                description
                  "Specifies the accounting options";
                uses apply-advanced;
    
                leaf-list order {
                  type enumeration {
                    enum "radius" {
                      value 0;
                      description
                        "Remote authentication dial-in user service";
                    }
                  }
                  ordered-by user;
                  description
                    "Order in which accounting mechanisms are used";
                }
    
                leaf accounting-stop-on-failure {
                  type empty;
                  description
                    "Send an Acct-Stop message if a user fails authentication, but AAA-server grants access";
                }
    
                leaf accounting-stop-on-access-deny {
                  type empty;
                  description
                    "Send an Acct-Stop message if AAA-server denies access";
                }
    
                leaf immediate-update {
                  type empty;
                  description
                    "Send an Acct-Update message on receipt of a Acct-response for the Acct-Start message";
                }
    
                leaf coa-immediate-update {
                  type empty;
                  description
                    "Send an Acct-Update message on completion of processing a change of authorization";
                }
    
                leaf statistics {
                  type enumeration {
                    enum "volume-time" {
                      value 0;
                      description
                        "Configures the option to report both volume and uptime";
                    }
                    enum "time" {
                      value 1;
                      description
                        "Configures the option to report only uptime";
                    }
                  }
                  description
                    "Reports set of statistics attributes based on reporting type";
                }
    
                leaf wait-for-acct-on-ack {
                  type empty;
                  description
                    "Wait for ACCT-ON-ACK";
                }
    
                leaf duplication {
                  type empty;
                  description
                    "Send duplicated accounting reports if applied";
                }
    
                leaf-list duplication-filter {
                  type enumeration {
                    enum "interim-original" {
                      value 0;
                      description
                        "Do not send original accounting interims";
                    }
                    enum "interim-duplicated" {
                      value 1;
                      description
                        "Do not send duplicated accounting interims";
                    }
                    enum "exclude-attributes" {
                      value 2;
                      description
                        "Use duplication access profile exclude attributes";
                    }
                  }
                  ordered-by user;
                  description
                    "Configure duplication filters";
                }
    
                container duplication-vrf {
                  description
                    "Duplication vrf configurations";
                  uses apply-advanced;
    
                  leaf vrf-name {
                    type string {
                      length "1 .. 257";
                    }
                    description "VRF name";
                  }
    
                  leaf-list access-profile-name {
                    type string {
                      length "1 .. 63";
                    }
                    max-elements 5;
                    ordered-by user;
                    description
                      "Access profile name";
                  }
                }  // container duplication-vrf
    
                leaf-list duplication-attribute-format {
                  type enumeration {
                    enum "username" {
                      value 0;
                      description "Username";
                    }
                  }
                  ordered-by user;
                  description
                    "Use attribute format defined under duplication accouting access-profile";
                }
    
                leaf ancp-speed-change-immediate-update {
                  type empty;
                  description
                    "Send an Acct-Update message when ANCP speed change is detected";
                }
    
                leaf family-state-change-immediate-update {
                  type empty;
                  description
                    "Send an Acct-Update message to notify address family activation state change";
                }
              }  // container accounting
    
              container service {
                description
                  "Subscriber service configurations";
                uses apply-advanced;
    
                leaf accounting-order {
                  type enumeration {
                    enum "activation-protocol" {
                      value 0;
                      description
                        "Send service accounting reports via service activation protocol";
                    }
                    enum "radius" {
                      value 1;
                      description
                        "Send service accounting reports via radius protocol";
                    }
                    enum "local" {
                      junos:must "(".. .. local flat-file-profile")";
                      junos:must-message "local flat-file-profile must be configured under access profile for accounting-order local";
                      value 2;
                      description
                        "Send service accounting for local reporting - obsolete config";
                    }
                  }
                  description
                    "Order in which accounting mechanism service is used";
                }
    
                container accounting {
                  description
                    "Specifies the service accounting options";
                  uses apply-advanced;
    
                  leaf update-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 1440";
                      }
                    }
                    units "minutes";
                    description
                      "The interval in minutes between accounting updates(Interim-stats off, if not specified)";
                  }
    
                  leaf statistics {
                    junos:must "(!(".. .. accounting-order $$={local}"))";
                    junos:must-message "Statistics configuration is no-op when accounting-order is set to local for flat-file based accounting";
                    type enumeration {
                      enum "time" {
                        value 0;
                        description
                          "Configures the option to report only uptime";
                      }
                      enum "volume-time" {
                        value 1;
                        description
                          "Configures the option to report both volume and uptime";
                      }
                    }
                    description
                      "Reports set of statistics attributes based on reporting type";
                  }
                }  // container accounting
              }  // container service
    
              container jsrc {
                description
                  "Set of JSRC configurations";
                uses apply-advanced;
    
                container attributes {
                  description
                    "Specifies how JSRC attributes should be handled";
                  uses apply-advanced;
    
                  container exclude {
                    description
                      "Configures the exclusion of JSRC attributes in DIAMETER messages";
                    uses apply-advanced;
    
                    leaf-list user-name {
                      type enumeration {
                        enum
                          "authorization-request" {
                          value 0;
                          description
                            "Authorization AA-Request message";
                        }
                        enum
                          "provisioning-request" {
                          value 1;
                          description
                            "Provisioning AA-Request message";
                        }
                      }
                      ordered-by user;
                      description
                        "Excludes Diameter attribute 1, User-Name";
                    }
                  }  // container exclude
                }  // container attributes
              }  // container jsrc
    
              list subscriber {
                key "name";
                description
                  "Locally authenticated subscriber configuration";
                uses localauth-subscriber-object;
              }  // list subscriber
            }  // list profile
          }  // container access
    
          container services {
            presence "enable services";
            uses apply-advanced;
    
            container icap-redirect {
              description
                "Configure ICAP redirection service";
              uses apply-advanced;
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Congifure ICAP service profile";
                uses icap-profile-object;
              }  // list profile
    
              container traceoptions {
                description
                  "ICAP redirect trace options";
                uses icap-redirect-traceoptions;
              }  // container traceoptions
            }  // container icap-redirect
    
            container security-intelligence {
              uses apply-advanced;
    
              container category {
                description
                  "Category to be disabled";
                uses apply-advanced;
    
                container all {
                  presence "enable all";
                  description "All categories";
                  uses apply-advanced;
    
                  container disable {
                    presence "enable disable";
                    description
                      "To disable all categories";
                  }  // container disable
                }  // container all
    
                list category-name {
                  key "name";
                  ordered-by user;
                  uses secintel-category-disable;
                }  // list category-name
              }  // container category
    
              leaf url {
                type string;
                description
                  "Configure the url of feed server [https://<ip or hostname>:<port>/<uri>]";
              }
    
              leaf url-parameter {
                type jt:unreadable;
                description
                  "Configure the parameter of url";
              }
    
              leaf proxy-profile {
                junos:must "("services proxy profile")";
                junos:must-message "Proxy profile must be defined";
                type string {
                  length "1 .. 64";
                }
                description
                  "The proxy profile name";
              }
    
              container authentication {
                description
                  "Authenticate to use feed update services";
                uses apply-advanced;
    
                leaf auth-token {
                  type string {
                    junos:posix-pattern "^[A-Za-z0-9]{32}$";
                    junos:pattern-message "Auth token must be consisted of 32 alphanumeric characters";
                  }
                  description
                    "Token string for authentication";
                }
    
                leaf tls-profile {
                  junos:must "("services ssl initiation profile $$")";
                  junos:must-message "Referenced SSL initiation profile is not defined";
                  type string;
                  description "TLS profile";
                }
              }  // container authentication
    
              leaf http-persist {
                type empty;
                description
                  "Inspect all HTTP requests in a connection";
              }
    
              container traceoptions {
                description
                  "Security intelligence trace options";
                uses secintel-traceoptions;
              }  // container traceoptions
    
              list profile {
                key "name";
                ordered-by user;
                description
                  "Configure security intelligence profile";
                uses secintel-profile-setting;
              }  // list profile
    
              container default-policy {
                description
                  "Configure security intelligence default policy";
                uses apply-advanced;
    
                list category-profiles {
                  key "name";
                  ordered-by user;
                  description
                    "Security intelligence category profiles";
                  leaf name {
                    type enumeration {
                      enum "IPFilter" {
                        value 0;
                        description "IPFilter";
                      }
                      enum "GeoIP" {
                        value 1;
                        description "GeoIP";
                      }
                      enum "CC" {
                        value 2;
                        description
                          "Command and control";
                      }
                      enum "Infected-Hosts" {
                        value 3;
                        description
                          "Infected-Hosts";
                      }
                      enum "DNS" {
                        value 4;
                        description "DNS";
                      }
                    }
                    description
                      "Name of security intelligence category";
                  }
    
                  uses apply-advanced;
    
                  leaf profile-name {
                    junos:must "("services security-intelligence profile $$")";
                    junos:must-message "security intelligence profile must be defined";
                    type string;
                    description
                      "Name of profile";
                  }
                }  // list category-profiles
              }  // container default-policy
    
              list policy {
                key "name";
                ordered-by user;
                description
                  "Configure security intelligence policy";
                uses secintel-policy-setting;
              }  // list policy
    
              container global-disable-feed {
                presence
                  "enable global-disable-feed";
                description
                  "Security intelligence global feed disabling setting";
                uses apply-advanced;
    
                list feed-name {
                  key "name";
                  max-elements 32;
                  ordered-by user;
                  leaf name {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Name of security intelligence global Command and control feed";
                  }
    
                  uses apply-advanced;
                }  // list feed-name
    
                container all {
                  presence "enable all";
                  description
                    "All of security intelligence global Command and control feed";
                }  // container all
              }  // container global-disable-feed
            }  // container security-intelligence
    
            container advanced-anti-malware {
              uses apply-advanced;
    
              container connection {
                presence "enable connection";
                description
                  "Cloud service RE connection, only for master logical domain";
                uses apply-advanced;
    
                leaf url {
                  junos:must "("services advanced-anti-malware connection authentication tls-profile")";
                  junos:must-message "Authentication profile must be defined";
                  type string;
                  description
                    "The url of the cloud server [https://<ip or hostname>:<port>]";
                }
    
                container authentication {
                  description
                    "The authentication profile for using cloud services";
                  uses apply-advanced;
    
                  leaf tls-profile {
                    junos:must "(("services ssl initiation profile $$" && "services advanced-anti-malware connection url"))";
                    junos:must-message "Referenced SSL initiation profile and URL must be defined";
                    type string;
                    description "TLS profile";
                  }
                }  // container authentication
    
                leaf proxy-profile {
                  junos:must "("services proxy profile $$")";
                  junos:must-message "Referenced Proxy profile must be defined";
                  type string {
                    length "1 .. 63";
                  }
                  description "Proxy profile";
                }
    
                leaf source-address {
                  type jt:ipaddr;
                  description
                    "The source ip for connecting to the cloud server.";
                }
    
                leaf source-interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "The source interface for connecting to the cloud server";
                }
              }  // container connection
    
              container default-policy {
                presence "enable default-policy";
                description
                  "Advanced Anti-malware default policy";
                uses apply-advanced;
    
                container http {
                  description
                    "Configure HTTP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  leaf file-verdict-unknown {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict unknown";
                  }
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict meet threshold";
                  }
    
                  container client-notify {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    choice http-choice {
                      leaf file {
                        type string {
                          length "1 .. 255";
                        }
                        description
                          "File name for http response to client";
                      }
                      leaf message {
                        type string {
                          length "1 .. 1023";
                        }
                        description
                          "Block message to client";
                      }
                      leaf redirect-url {
                        type string {
                          junos:posix-pattern "^https?://.*";
                          junos:pattern-message "URL must begin with http:// or https://";
                          length "1 .. 1023";
                        }
                        description
                          "Redirect url to client";
                      }
                    }  // choice http-choice
                  }  // container client-notify
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container http
    
                container smtp {
                  description
                    "Configure SMTP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container smtp
    
                container imap {
                  description
                    "Configure IMAP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container imap
    
                container smb {
                  description
                    "Configure SMB options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict meet threshold";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container smb
    
                leaf verdict-threshold {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description
                        "Verdict-threshold level 1";
                    }
                    enum "2" {
                      value 1;
                      description
                        "Verdict-threshold level 2";
                    }
                    enum "3" {
                      value 2;
                      description
                        "Verdict-threshold level 3";
                    }
                    enum "4" {
                      value 3;
                      description
                        "Verdict-threshold level 4";
                    }
                    enum "5" {
                      value 4;
                      description
                        "Verdict-threshold level 5";
                    }
                    enum "6" {
                      value 5;
                      description
                        "Verdict-threshold level 6";
                    }
                    enum "7" {
                      value 6;
                      description
                        "Verdict-threshold level 7";
                    }
                    enum "8" {
                      value 7;
                      description
                        "Verdict-threshold level 8";
                    }
                    enum "9" {
                      value 8;
                      description
                        "Verdict-threshold level 9";
                    }
                    enum "10" {
                      value 9;
                      description
                        "Verdict-threshold level 10";
                    }
                    enum "recommended" {
                      value 10;
                      description
                        "Recommended verdict-threshold";
                    }
                  }
                  description
                    "Verdict threshold";
                }
    
                leaf inspection-profile {
                  type string {
                    length "1 .. 63";
                  }
                  status deprecated;
                  description
                    "Advanced Anti-malware inspection-profile name";
                }
    
                container fallback-options {
                  description
                    "Fallback options for abnormal conditions";
                  uses apply-advanced;
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for fallback conditions";
                  }
    
                  container notification {
                    description
                      "Notification action taken for fallback action";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware fallback action";
                    }
                  }  // container notification
    
                  container service-not-ready {
                    description
                      "Service not ready yet";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container service-not-ready
    
                  container invalid-content-size {
                    description
                      "Content size exceed supported range";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container invalid-content-size
    
                  container out-of-resources {
                    description
                      "Service out of resources";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container out-of-resources
    
                  container verdict-timeout {
                    description
                      "Verdict timed out";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container verdict-timeout
    
                  container submission-timeout {
                    description
                      "Submission timed out";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container submission-timeout
    
                  container unknown-file {
                    description
                      "File type unknown";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container unknown-file
                }  // container fallback-options
    
                container default-notification {
                  description
                    "Notification action taken for action";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware action";
                  }
                }  // container default-notification
    
                container whitelist-notification {
                  description
                    "Whitelist notification logging option";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware whitelist hit";
                  }
                }  // container whitelist-notification
    
                container blacklist-notification {
                  description
                    "Blacklist notification logging option";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware blacklist hit";
                  }
                }  // container blacklist-notification
              }  // container default-policy
    
              list policy {
                key "name";
                description
                  "Advanced Anti-malware policy";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Policy name, default policy must name (default-policy)";
                }
    
                uses apply-advanced;
    
                container match {
                  status deprecated;
                  description
                    "Policy match conditions";
                  uses apply-advanced;
    
                  leaf application {
                    type enumeration {
                      enum "HTTP" {
                        value 0;
                        description
                          "HTTP Traffic";
                      }
                    }
                    description "Application";
                  }
    
                  leaf verdict-threshold {
                    type enumeration {
                      enum "1" {
                        value 0;
                        description
                          "Verdict-threshold level 1";
                      }
                      enum "2" {
                        value 1;
                        description
                          "Verdict-threshold level 2";
                      }
                      enum "3" {
                        value 2;
                        description
                          "Verdict-threshold level 3";
                      }
                      enum "4" {
                        value 3;
                        description
                          "Verdict-threshold level 4";
                      }
                      enum "5" {
                        value 4;
                        description
                          "Verdict-threshold level 5";
                      }
                      enum "6" {
                        value 5;
                        description
                          "Verdict-threshold level 6";
                      }
                      enum "7" {
                        value 6;
                        description
                          "Verdict-threshold level 7";
                      }
                      enum "8" {
                        value 7;
                        description
                          "Verdict-threshold level 8";
                      }
                      enum "9" {
                        value 8;
                        description
                          "Verdict-threshold level 9";
                      }
                      enum "10" {
                        value 9;
                        description
                          "Verdict-threshold level 10";
                      }
                      enum "recommended" {
                        value 10;
                        description
                          "Recommended verdict-threshold";
                      }
                    }
                    description
                      "Verdict threshold";
                  }
                }  // container match
    
                container then {
                  junos:must "(".. match")";
                  junos:must-message "match must be defined";
                  status deprecated;
                  uses apply-advanced;
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict meet threshold";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container then
    
                container http {
                  description
                    "Configure HTTP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  leaf file-verdict-unknown {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict unknown";
                  }
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict meet threshold";
                  }
    
                  container client-notify {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    choice http-choice {
                      leaf file {
                        type string {
                          length "1 .. 255";
                        }
                        description
                          "File name for http response to client";
                      }
                      leaf message {
                        type string {
                          length "1 .. 1023";
                        }
                        description
                          "Block message to client";
                      }
                      leaf redirect-url {
                        type string {
                          junos:posix-pattern "^https?://.*";
                          junos:pattern-message "URL must begin with http:// or https://";
                          length "1 .. 1023";
                        }
                        description
                          "Redirect url to client";
                      }
                    }  // choice http-choice
                  }  // container client-notify
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container http
    
                container smtp {
                  description
                    "Configure SMTP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container smtp
    
                container imap {
                  description
                    "Configure IMAP options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
                }  // container imap
    
                container smb {
                  description
                    "Configure SMB options";
                  uses apply-advanced;
    
                  leaf inspection-profile {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Advanced Anti-malware inspection-profile name (default:default_profile)";
                  }
    
                  container notification {
                    description
                      "Notification action taken for contents with verdict meet threshold";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware actions";
                    }
                  }  // container notification
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for contents with verdict meet threshold";
                  }
                }  // container smb
    
                leaf verdict-threshold {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description
                        "Verdict-threshold level 1";
                    }
                    enum "2" {
                      value 1;
                      description
                        "Verdict-threshold level 2";
                    }
                    enum "3" {
                      value 2;
                      description
                        "Verdict-threshold level 3";
                    }
                    enum "4" {
                      value 3;
                      description
                        "Verdict-threshold level 4";
                    }
                    enum "5" {
                      value 4;
                      description
                        "Verdict-threshold level 5";
                    }
                    enum "6" {
                      value 5;
                      description
                        "Verdict-threshold level 6";
                    }
                    enum "7" {
                      value 6;
                      description
                        "Verdict-threshold level 7";
                    }
                    enum "8" {
                      value 7;
                      description
                        "Verdict-threshold level 8";
                    }
                    enum "9" {
                      value 8;
                      description
                        "Verdict-threshold level 9";
                    }
                    enum "10" {
                      value 9;
                      description
                        "Verdict-threshold level 10";
                    }
                    enum "recommended" {
                      value 10;
                      description
                        "Recommended verdict-threshold";
                    }
                  }
                  description
                    "Verdict threshold";
                }
    
                leaf inspection-profile {
                  type string {
                    length "1 .. 63";
                  }
                  status deprecated;
                  description
                    "Advanced Anti-malware inspection-profile name";
                }
    
                container fallback-options {
                  description
                    "Fallback options for abnormal conditions";
                  uses apply-advanced;
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow contents";
                      }
                      enum "block" {
                        value 1;
                        description
                          "Disallow contents";
                      }
                    }
                    description
                      "Action taken for fallback conditions";
                  }
    
                  container notification {
                    description
                      "Notification action taken for fallback action";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Advanced Anti-malware fallback action";
                    }
                  }  // container notification
    
                  container service-not-ready {
                    description
                      "Service not ready yet";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container service-not-ready
    
                  container invalid-content-size {
                    description
                      "Content size exceed supported range";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container invalid-content-size
    
                  container out-of-resources {
                    description
                      "Service out of resources";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container out-of-resources
    
                  container verdict-timeout {
                    description
                      "Verdict timed out";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container verdict-timeout
    
                  container submission-timeout {
                    description
                      "Submission timed out";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container submission-timeout
    
                  container unknown-file {
                    description
                      "File type unknown";
                    uses apply-advanced;
    
                    leaf action {
                      type enumeration {
                        enum "permit" {
                          value 0;
                          description
                            "Allow contents";
                        }
                        enum "block" {
                          value 1;
                          description
                            "Disallow contents";
                        }
                      }
                      description
                        "Action taken for fallback conditions";
                    }
    
                    container notification {
                      description
                        "Notification action taken for fallback action";
                      uses apply-advanced;
    
                      leaf log {
                        type empty;
                        description
                          "Logging option for Advanced Anti-malware fallback action";
                      }
                    }  // container notification
                  }  // container unknown-file
                }  // container fallback-options
    
                container default-notification {
                  description
                    "Notification action taken for action";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware action";
                  }
                }  // container default-notification
    
                container whitelist-notification {
                  description
                    "Whitelist notification logging option";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware whitelist hit";
                  }
                }  // container whitelist-notification
    
                container blacklist-notification {
                  description
                    "Blacklist notification logging option";
                  uses apply-advanced;
    
                  leaf log {
                    type empty;
                    description
                      "Logging option for Advanced Anti-malware blacklist hit";
                  }
                }  // container blacklist-notification
              }  // list policy
    
              container traceoptions {
                description
                  "Advanced Anti-malware trace options";
                uses aamwd-traceoptions;
              }  // container traceoptions
            }  // container advanced-anti-malware
    
            container user-identification {
              description
                "Configure user-identification";
              uses apply-advanced;
    
              container active-directory-access {
                presence
                  "enable active-directory-access";
                description
                  "Configure active directory access";
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Active-directory-access Tracing 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
    
                  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";
                      }
                    }
                    description
                      "Level of debugging output";
                  }
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum
                          "active-directory-authentication" {
                          value 0;
                          description
                            "Trace active directory auth";
                        }
                        enum "configuration" {
                          value 1;
                          description
                            "Trace configuration";
                        }
                        enum "db" {
                          value 2;
                          description "Trace db";
                        }
                        enum "ip-user-mapping" {
                          value 3;
                          description
                            "Trace ip-user-mapping module";
                        }
                        enum "ip-user-probe" {
                          value 4;
                          description
                            "Trace ip-user-probe";
                        }
                        enum "ipc" {
                          value 5;
                          description
                            "Trace ipc";
                        }
                        enum
                          "user-group-mapping" {
                          value 6;
                          description
                            "Trace user-group-mapping module";
                        }
                        enum "wmic" {
                          value 7;
                          description
                            "Trace wmic";
                        }
                        enum "memory" {
                          value 8;
                          description
                            "Trace memory";
                        }
                        enum "all" {
                          value 9;
                          description
                            "Trace everything";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
    
                list domain {
                  key "name";
                  max-elements 2;
                  ordered-by user;
                  description
                    "Configure active-directory-access domain";
                  leaf name {
                    type string {
                      junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                      junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                      length "1 .. 64";
                    }
                    description "Domain name";
                  }
    
                  uses apply-advanced;
    
                  container user {
                    description "User name";
                    uses apply-advanced;
    
                    leaf user-name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description "User name";
                    }
    
                    leaf password {
                      type string {
                        length "1 .. 128";
                      }
                      description
                        "Password string";
                    }
                  }  // container user
    
                  list domain-controller {
                    key "name";
                    max-elements 10;
                    ordered-by user;
                    description
                      "Domain controller";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description
                        "Domain controller name";
                    }
    
                    uses apply-advanced;
    
                    leaf address {
                      type jt:ipaddr;
                      description
                        "Address of domain controller";
                    }
                  }  // list domain-controller
    
                  container ip-user-mapping {
                    description
                      "Ip-user-mapping";
                    uses apply-advanced;
    
                    container discovery-method {
                      description
                        "Discovery method";
                      uses apply-advanced;
    
                      container wmi {
                        presence "enable wmi";
                        description "WMI";
                        uses apply-advanced;
    
                        leaf event-log-scanning-interval {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint16 {
                              range "5 .. 60";
                            }
                          }
                          units "seconds";
                          description
                            "Interval of event log scanning";
                        }
    
                        leaf initial-event-log-timespan {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint16 {
                              range "1 .. 168";
                            }
                          }
                          units "hours";
                          description
                            "Event log scanning timespan";
                        }
                      }  // container wmi
                    }  // container discovery-method
                  }  // container ip-user-mapping
    
                  container user-group-mapping {
                    description
                      "User-group-mapping";
                    uses user-group-mapping-type;
                  }  // container user-group-mapping
                }  // list domain
    
                leaf no-on-demand-probe {
                  type empty;
                  description
                    "Disable on-demand probe";
                }
    
                leaf authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Authentication entry timeout number (0, 10-1440)";
                }
    
                leaf invalid-authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Invalid authentication entry timeout number (0, 10-1440)";
                }
    
                leaf firewall-authentication-forced-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Firewallauth fallback authentication entry forced timeout number (10-1440)";
                }
    
                leaf wmi-timeout {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "3 .. 120";
                    }
                  }
                  units "seconds";
                  description
                    "Wmi timeout number";
                }
    
                leaf thread {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Thread to do PC probe";
                }
    
                leaf probe-rate {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "100 .. 1500";
                    }
                  }
                  description
                    "PC probe rate per minute";
                }
    
                leaf-list event-log-identifier {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "Event log identifier";
                }
    
                leaf-list logon-type {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description "Logon type";
                }
    
                container filter {
                  description
                    "Configure filter address or prefix";
                  uses apply-advanced;
    
                  list include {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Include address";
                    leaf name {
                      type jt:ipprefix;
                      description
                        "Address or prefix";
                    }
                  }  // list include
    
                  list exclude {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Exclude address";
                    leaf name {
                      type jt:ipprefix;
                      description
                        "Address or prefix";
                    }
                  }  // list exclude
                }  // container filter
              }  // container active-directory-access
    
              list authentication-source {
                key "name";
                max-elements 2;
                ordered-by user;
                description
                  "Configure authentication-source";
                leaf name {
                  type enumeration {
                    enum "aruba-clearpass" {
                      value 0;
                      description
                        "Authentication source from Aruba ClearPass";
                    }
                  }
                  description
                    "Authenticaton source name";
                }
    
                uses apply-advanced;
    
                leaf authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Aruba ClearPass authentication entry timeout number (0, 10-1440)";
                }
    
                leaf invalid-authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  description
                    "Invalid authentication entry timeout number (0, 10-1440)";
                }
    
                container traceoptions {
                  description
                    "Aruba ClearPass authentication table Tracing 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
    
                  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";
                      }
                    }
                    description
                      "Level of debugging output";
                  }
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum "all" {
                          value 0;
                          description
                            "Trace Aruba ClearPass all modules";
                        }
                        enum
                          "clearpass-authentication" {
                          value 1;
                          description
                            "Trace Aruba ClearPass auth table management module";
                        }
                        enum "configuration" {
                          value 2;
                          description
                            "Trace Aruba ClearPass configuration";
                        }
                        enum "dispatcher" {
                          value 3;
                          description
                            "Trace dispatcher module";
                        }
                        enum "ipc" {
                          value 4;
                          description
                            "Trace ipc";
                        }
                        enum "user-query" {
                          value 5;
                          description
                            "Trace user-query module";
                        }
                        enum "memory" {
                          value 6;
                          description
                            "Trace memory";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
    
                container user-query {
                  description
                    "ClearPass individual user query";
                  uses apply-advanced;
    
                  container web-server {
                    description
                      "Web server for user query";
                    uses apply-advanced;
    
                    leaf server-name {
                      type string {
                        length "1 .. 64";
                      }
                      description
                        "Web server name";
                    }
    
                    leaf connect-method {
                      type enumeration {
                        enum "https" {
                          value 0;
                          description
                            "HTTPS connection to web server";
                        }
                        enum "http" {
                          value 1;
                          description
                            "HTTP connection to web server";
                        }
                      }
                      description
                        "Method of connecting to web server";
                    }
    
                    leaf address {
                      type string {
                        length "1 .. 128";
                      }
                      description
                        "IP address or hostname of web server";
                    }
    
                    leaf port {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 65535";
                        }
                      }
                      default "443";
                      description
                        "Web server port";
                    }
                  }  // container web-server
    
                  leaf ca-certificate {
                    type string {
                      length "1 .. 256";
                    }
                    description
                      "Ca-certificate file name";
                  }
    
                  leaf client-id {
                    type string {
                      length "1 .. 64";
                    }
                    description
                      "Client ID for OAuth2 grant";
                  }
    
                  leaf client-secret {
                    type string {
                      length "1 .. 128";
                    }
                    description
                      "Client secret for OAuth2 grant";
                  }
    
                  leaf token-api {
                    type string {
                      length "1 .. 128";
                    }
                    description
                      "API of acquiring token for OAuth2 authentication";
                  }
    
                  leaf query-api {
                    type string {
                      length "4 .. 128";
                    }
                    description "User query API";
                  }
    
                  leaf delay-query-time {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "0 .. 60";
                      }
                    }
                    units "seconds";
                    default "15";
                    description
                      "Delay time to send user query (0~60sec)";
                  }
                }  // container user-query
    
                container no-user-query {
                  presence
                    "enable no-user-query";
                  description
                    "Disable user query from ClearPass";
                }  // container no-user-query
              }  // list authentication-source
    
              container device-information {
                description
                  "Device information configuration";
                uses apply-advanced;
    
                container authentication-source {
                  description
                    "Configure authentication-source";
                  uses apply-advanced;
    
                  leaf authentication-source-name {
                    type enumeration {
                      enum "active-directory" {
                        value 0;
                        description
                          "From windows active directory";
                      }
                      enum
                        "network-access-controller" {
                        value 1;
                        description
                          "From network access controller such as Aruba ClearPass or JIMS";
                      }
                      enum "no-configured" {
                        value 2;
                        description
                          "No configuring authentication source for device entry";
                      }
                    }
                    default "no-configured";
                  }
                }  // container authentication-source
    
                container end-user-profile {
                  description
                    "End-user-profile configuration";
                  uses apply-advanced;
    
                  list profile-name {
                    key "name";
                    ordered-by user;
                    description
                      "End-user-profile profile-name configuration";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description
                        "End-user-profile profile-name";
                    }
    
                    uses apply-advanced;
    
                    leaf domain-name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description "Domain name";
                    }
    
                    list attribute {
                      key "name";
                      ordered-by user;
                      description "Attribute";
                      leaf name {
                        type string;
                        description
                          "Attribute name";
                      }
    
                      uses apply-advanced;
    
                      choice attribute-value {
                        leaf-list string {
                          type string;
                          max-elements 20;
                          ordered-by user;
                          description
                            "Value type is strings";
                        }
                        container digital {
                          presence
                            "enable digital";
                          description
                            "Value type is digital";
                          uses apply-advanced;
    
                          leaf-list value {
                            type union {
                              type uint32;
                              type string {
                                pattern
                                  "<.*>|$.*";
                              }
                            }
                            ordered-by user;
                            description
                              "Digital value";
                          }
    
                          list from {
                            key "name";
                            ordered-by user;
                            description
                              "Range of digital value";
                            leaf name {
                              type union {
                                type uint32;
                                type string {
                                  pattern
                                    "<.*>|$.*";
                                }
                              }
                              description
                                "Digit range's start value";
                            }
    
                            uses apply-advanced;
    
                            leaf to {
                              type union {
                                type uint32;
                                type string {
                                  pattern
                                    "<.*>|$.*";
                                }
                              }
                              description
                                "Digit range's end value";
                            }
                          }  // list from
                        }  // container digital
                      }  // choice attribute-value
                    }  // list attribute
                  }  // list profile-name
                }  // container end-user-profile
    
                container traceoptions {
                  description
                    "Device info related Tracing 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
    
                  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";
                      }
                    }
                    description
                      "Level of debugging output";
                  }
    
                  list flag {
                    key "name";
                    ordered-by user;
                    description
                      "Tracing parameters";
                    leaf name {
                      type enumeration {
                        enum "all" {
                          value 0;
                          description
                            "Trace device info all modules";
                        }
                        enum "auth-source" {
                          value 1;
                          description
                            "Trace Auth source module";
                        }
                        enum "configuration" {
                          value 2;
                          description
                            "Trace Device info configuration";
                        }
                        enum "device-table" {
                          value 3;
                          description
                            "Trace device table management module";
                        }
                        enum "ipid-all" {
                          value 4;
                          description
                            "Trace IPID all functions";
                        }
                        enum "ipid-db" {
                          value 5;
                          description
                            "Trace IPID Database function";
                        }
                        enum "ipid-entry" {
                          value 6;
                          description
                            "Trace IPID entry management function";
                        }
                        enum "ipid-ipc" {
                          value 7;
                          description
                            "Trace IPID communication processing function";
                        }
                        enum "ipid-message" {
                          value 8;
                          description
                            "Trace IPID message processing function";
                        }
                        enum "ipid-others" {
                          value 9;
                          description
                            "Trace IPID other function";
                        }
                        enum "ipid-server" {
                          value 10;
                          description
                            "Trace IPID server handling function";
                        }
                        enum "ipid-statistics" {
                          value 11;
                          description
                            "Trace IPID statistics handling function";
                        }
                        enum "ipid-task" {
                          value 12;
                          description
                            "Trace IPID task handling function";
                        }
                        enum "profile-lookup" {
                          value 13;
                          description
                            "Trace End-user-profile lookup function";
                        }
                        enum "memory" {
                          value 14;
                          description
                            "Trace memory";
                        }
                      }
                    }
                  }  // list flag
                }  // container traceoptions
              }  // container device-information
    
              container identity-management {
                description
                  "Identity management configuration";
                uses apply-advanced;
    
                leaf authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  default "60";
                  description
                    "Authentication entry timeout number (0, 10-1440)";
                }
    
                leaf invalid-authentication-entry-timeout {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "minutes";
                  default "30";
                  description
                    "Invalid authentication entry timeout number (0, 10-1440)";
                }
    
                leaf preserve-valid-user {
                  type empty;
                  description
                    "Null user will not overwrite valid user for the same ip";
                }
    
                container connection {
                  description
                    "Connection to identity management";
                  uses identity-management-connection-type;
                }  // container connection
    
                container jims-validator {
                  description
                    "Web server from JIMS for Validate or group query request";
                  uses jims-validator-type;
                }  // container jims-validator
    
                container batch-query {
                  description
                    "Batch query parameters";
                  uses batch-query-type;
                }  // container batch-query
    
                container ip-query {
                  description
                    "IP query parameters";
                  uses apply-advanced;
    
                  leaf query-delay-time {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "0 .. 60";
                      }
                    }
                    units "seconds";
                    default "15";
                    description
                      "Delay time to send IP query (0~60sec)";
                  }
    
                  container no-ip-query {
                    presence
                      "enable no-ip-query";
                    description
                      "Disable IP query";
                  }  // container no-ip-query
    
                  leaf max-connections {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 20";
                      }
                    }
                    description
                      "Max connection number";
                  }
                }  // container ip-query
    
                container filter {
                  description "Filter for query";
                  uses apply-advanced;
    
                  list domain {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description "Domain filter";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description "Domain name";
                    }
                  }  // list domain
    
                  container include-ip {
                    description
                      "Include IP filter";
                    uses address-filter-type;
                  }  // container include-ip
    
                  container exclude-ip {
                    description
                      "Exclude IP filter";
                    uses address-filter-type;
                  }  // container exclude-ip
                }  // container filter
    
                container traceoptions {
                  description "Tracing Options";
                  uses ims-traceoptions-type;
                }  // container traceoptions
              }  // container identity-management
    
              container logical-domain-identity-management {
                description
                  "Logical domain identity management configuration";
                uses apply-advanced;
    
                container active {
                  description
                    "Actve mode for logical domain identity management moudule";
                  uses apply-advanced;
    
                  leaf authentication-entry-timeout {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "minutes";
                    default "60";
                    description
                      "Authentication entry timeout number (0, 10-1440)";
                  }
    
                  leaf invalid-authentication-entry-timeout {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "minutes";
                    default "30";
                    description
                      "Invalid authentication entry timeout number (0, 10-1440)";
                  }
    
                  container ip-query {
                    description
                      "IP query parameters";
                    uses apply-advanced;
    
                    leaf query-delay-time {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint8 {
                          range "0 .. 60";
                        }
                      }
                      units "seconds";
                      default "15";
                      description
                        "Delay time to send IP query (0~60sec)";
                    }
                  }  // container ip-query
    
                  container filter {
                    description
                      "Filter for query";
                    uses apply-advanced;
    
                    list domain {
                      key "name";
                      max-elements 20;
                      ordered-by user;
                      description
                        "Domain filter";
                      leaf name {
                        type string {
                          junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                          junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                          length "1 .. 64";
                        }
                        description
                          "Domain name";
                      }
                    }  // list domain
    
                    container include-ip {
                      description
                        "Include IP filter";
                      uses address-filter-type;
                    }  // container include-ip
    
                    container exclude-ip {
                      description
                        "Exclude IP filter";
                      uses address-filter-type;
                    }  // container exclude-ip
                  }  // container filter
    
                  list query-server {
                    key "name";
                    max-elements 1;
                    ordered-by user;
                    description "Query server";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                        junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                        length "1 .. 64";
                      }
                      description
                        "Query server name";
                    }
    
                    uses apply-advanced;
    
                    container connection {
                      description
                        "Connection to identity management";
                      uses ims-connection-type;
                    }  // container connection
    
                    container batch-query {
                      description
                        "Batch query parameters";
                      uses batch-query-type;
                    }  // container batch-query
                  }  // list query-server
                }  // container active
    
                container traceoptions {
                  description "Tracing Options";
                  uses ims-traceoptions-type;
                }  // container traceoptions
              }  // container logical-domain-identity-management
            }  // container user-identification
    
            container security-metadata-streaming {
              uses apply-advanced;
    
              list policy {
                key "name";
                description
                  "Security Metadata Streaming policy";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description "Policy name";
                }
    
                uses apply-advanced;
    
                container http {
                  description
                    "Configure HTTP options";
                  uses apply-advanced;
    
                  leaf action {
                    type enumeration {
                      enum "permit" {
                        value 0;
                        description
                          "Allow traffic";
                      }
                    }
                    description
                      "Action for HTTP";
                  }
    
                  container notification {
                    description
                      "Notification action taken for traffic";
                    uses apply-advanced;
    
                    leaf log {
                      type empty;
                      description
                        "Logging option for Security Metadata Streaming actions";
                    }
                  }  // container notification
                }  // container http
    
                container dns {
                  description
                    "Configure DNS options";
                  uses apply-advanced;
    
                  container cache {
                    description
                      "Storing DNS in Cache till TTL";
                    uses apply-advanced;
    
                    container ttl {
                      presence "enable ttl";
                      description
                        "For setting TTL values";
                      uses apply-advanced;
    
                      leaf benign {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "60 .. 172800";
                          }
                        }
                        units "seconds";
                        default "86400";
                        description
                          "Set Benign TTL value";
                      }
    
                      leaf c2 {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "60 .. 172800";
                          }
                        }
                        units "seconds";
                        default "86400";
                        description
                          "Set C2 TTL value";
                      }
                    }  // container ttl
                  }  // container cache
    
                  container detections {
                    description
                      "Type of Detection Methods for DNS Request";
                    uses apply-advanced;
    
                    container dga {
                      description
                        "Detecting DGA Algorithms on DNS Packets";
                      uses apply-advanced;
    
                      leaf action {
                        type enumeration {
                          enum "permit" {
                            value 0;
                            description
                              "Allow the packet";
                          }
                          enum "deny" {
                            value 1;
                            description
                              "Drop the packet";
                          }
                          enum "sinkhole" {
                            value 2;
                            description
                              "Sinkhole the packet";
                          }
                        }
                        description
                          "Action to take on the DNS tunneled packet";
                      }
    
                      leaf verdict-timeout {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "50 .. 500";
                          }
                        }
                        units "milliseconds";
                        default "100";
                        description
                          "Time to wait for a verdict on DNS Packet";
                      }
    
                      leaf notification {
                        type enumeration {
                          enum "log" {
                            value 0;
                            description
                              "Log Everything";
                          }
                          enum "log-detections" {
                            value 1;
                            description
                              "Only log malicious DNS activity";
                          }
                        }
                        description
                          "Notification action taken for DNS DGA Detection";
                      }
    
                      container fallback-options {
                        description
                          "Fallback options for DNS DGA detection";
                        uses apply-advanced;
    
                        container notification {
                          description
                            "Notification action taken for the packet";
                          uses apply-advanced;
    
                          leaf log {
                            type empty;
                            description
                              "Log DNS Request";
                          }
                        }  // container notification
                      }  // container fallback-options
                    }  // container dga
    
                    container tunneling {
                      description
                        "Detecting DNS Tunneling";
                      uses apply-advanced;
    
                      leaf action {
                        type enumeration {
                          enum "permit" {
                            value 0;
                            description
                              "Allow the packet";
                          }
                          enum "deny" {
                            value 1;
                            description
                              "Drop the packet";
                          }
                          enum "sinkhole" {
                            value 2;
                            description
                              "Sinkhole the packet";
                          }
                        }
                        description
                          " Action to take on the DNS tunneled packet";
                      }
    
                      leaf notification {
                        type enumeration {
                          enum "log" {
                            value 0;
                            description
                              "Log Everything";
                          }
                          enum "log-detections" {
                            value 1;
                            description
                              "Only log malicious DNS activity";
                          }
                        }
                        description
                          "Notification action taken for DNS Tunneling Detection";
                      }
    
                      leaf inspection-depth {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint8 {
                            range "0 .. 10";
                          }
                        }
                        default "4";
                        description
                          "Number of packets to be inspected for Tunnel Detection";
                      }
    
                      container fallback-options {
                        description
                          "Fallback options for DNS Tunneling detection";
                        uses apply-advanced;
    
                        container notification {
                          description
                            "Notification action taken for the packet";
                          uses apply-advanced;
    
                          leaf log {
                            type empty;
                            description
                              "Log DNS Request";
                          }
                        }  // container notification
                      }  // container fallback-options
                    }  // container tunneling
    
                    container all {
                      junos:must "((!(" .. dga") && !(" .. tunneling")))";
                      junos:must-message "All can only be configured if no other detection is configured";
                      description
                        "All Detections";
                      uses apply-advanced;
    
                      leaf action {
                        type enumeration {
                          enum "permit" {
                            value 0;
                            description
                              "Allow the packet";
                          }
                          enum "deny" {
                            value 1;
                            description
                              "Drop the packet";
                          }
                          enum "sinkhole" {
                            value 2;
                            description
                              "Sinkhole the packet";
                          }
                        }
                        description
                          " Global Action to take on the DNS packet";
                      }
    
                      leaf notification {
                        type enumeration {
                          enum "log" {
                            value 0;
                            description
                              "Log Everything";
                          }
                          enum "log-detections" {
                            value 1;
                            description
                              "Only log malicious DNS activity";
                          }
                        }
                        description
                          "Global Notification action taken for DNS Detection Methods";
                      }
    
                      container fallback-options {
                        description
                          "Fallback options for DNS detections";
                        uses apply-advanced;
    
                        container notification {
                          description
                            "Notification action taken for the packet";
                          uses apply-advanced;
    
                          leaf log {
                            type empty;
                            description
                              "Log DNS Request";
                          }
                        }  // container notification
                      }  // container fallback-options
                    }  // container all
                  }  // container detections
                }  // container dns
              }  // list policy
            }  // container security-metadata-streaming
    
            container dns-filtering {
              presence "enable dns-filtering";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Security intelligence trace options";
                uses dnsf-traceoptions-object;
              }  // container traceoptions
    
              container sinkhole {
                presence "enable sinkhole";
                description
                  "DNS Sinkhole Configuration";
                uses apply-advanced;
    
                leaf ipv4-address {
                  type jt:ipv4addr;
                  description
                    "Sinkhole IPv4 address";
                }
    
                leaf ipv6-address {
                  type jt:ipv6addr;
                  description
                    "Sinkhole IPv6 address";
                }
    
                leaf fqdn {
                  type string {
                    length "1 .. 80";
                  }
                  description
                    "FQDN sent as response to MX qeries";
                }
    
                leaf dns-resp-ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 3600";
                    }
                  }
                  units "seconds";
                  default "1800";
                  description
                    "TTL to be used in DNS response";
                }
    
                leaf wildcarding-level {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 10";
                    }
                  }
                  default "2";
                  description
                    "Wildcarding level for exact match";
                }
    
                leaf txt-resp-err-code {
                  type enumeration {
                    enum "Noerror" {
                      value 0;
                      description
                        "No error response";
                    }
                    enum "Refused" {
                      value 1;
                      description
                        "Refuse the DNS Query";
                    }
                  }
                  default "Refused";
                  description
                    "Text response error code";
                }
    
                leaf srv-resp-err-code {
                  type enumeration {
                    enum "Noerror" {
                      value 0;
                      description
                        "No error response";
                    }
                    enum "Refused" {
                      value 1;
                      description
                        "Refuse the DNS Query";
                    }
                  }
                  default "Refused";
                  description
                    "Server response error code";
                }
              }  // container sinkhole
            }  // container dns-filtering
          }  // container services
    
          container class-of-service {
            presence "enable class-of-service";
            description
              "Class-of-service configuration";
            uses apply-advanced;
    
            container application-traffic-control {
              presence
                "enable application-traffic-control";
              description
                "Application classifier configuration";
              uses apply-advanced;
    
              container traceoptions {
                description
                  "Trace options for application classifier";
                uses appqos-traceoptions-type;
              }  // container traceoptions
    
              list rate-limiters {
                key "name";
                ordered-by user;
                description
                  "Configure application-traffic-control rate limiters";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Application classifier rate-limiter name";
                }
    
                uses apply-advanced;
    
                leaf bandwidth-limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "64 .. 10485760";
                    }
                  }
                  units "kbps";
                  description "Bandwidth limit";
                }
    
                leaf burst-size-limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1342177280";
                    }
                  }
                  units "bytes";
                  description
                    "Burst size limit (default with bandwidth-limit and no larger than 6400 * bandwidth)";
                }
              }  // list rate-limiters
    
              list rule-sets {
                key "name";
                ordered-by user;
                description
                  "Configure application-traffic-control rule-sets";
                leaf name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Application classifier rule-set name";
                }
    
                uses apply-advanced;
    
                list rule {
                  key "name";
                  ordered-by user;
                  description "Rule";
                  uses appqos_rule_type;
                }  // list rule
              }  // list rule-sets
            }  // container application-traffic-control
          }  // container class-of-service
        }  // grouping juniper-tenant
    
        grouping aamwd-traceoptions {
          description
            "Advanced anti-malware 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
    
          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";
              }
            }
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description "Trace flags";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "Trace everything";
                }
                enum "connection" {
                  value 1;
                  description
                    "Trace the connection to server";
                }
                enum "content" {
                  value 2;
                  description
                    "Trace the content buffer management";
                }
                enum "daemon" {
                  value 3;
                  description
                    "Trace advanced-anti-malware daemon";
                }
                enum "http" {
                  value 4;
                  description
                    "Trace http protocol operations";
                }
                enum "identification" {
                  value 5;
                  description
                    "Trace file identification";
                }
                enum "imap" {
                  value 6;
                  description
                    "Trace imap protocol operations";
                }
                enum "parser" {
                  value 7;
                  description
                    "Trace protocol context parser";
                }
                enum "plugin" {
                  value 8;
                  description
                    "Trace advanced-anti-malware plugin";
                }
                enum "policy" {
                  value 9;
                  description
                    "Trace advanced-anti-malware policy";
                }
                enum "smb" {
                  value 10;
                  description
                    "Trace smb protocol operations";
                }
                enum "smtp" {
                  value 11;
                  description
                    "Trace smtp protocol operations";
                }
              }
            }
          }  // list flag
        }  // grouping aamwd-traceoptions
    
        grouping access-client-name-filter-object {
          description
            "Restrictions on client names authenticated on this server";
          uses apply-advanced;
    
          leaf domain-name {
            type string;
            description
              "Domain name to match (must be part of username)";
          }
    
          leaf separator {
            type string {
              length "1";
            }
            description
              "Separator character in domain name";
          }
    
          leaf count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 255";
              }
            }
            default "0";
            description
              "Number of separator instances";
          }
        }  // grouping access-client-name-filter-object
    
        grouping access-client-object {
          leaf name {
            type string;
            description
              "Name of entity requesting access";
          }
    
          uses apply-advanced;
    
          leaf no-rfc2486 {
            type empty;
            description
              "RFC2486 compliance is not enforced";
          }
    
          leaf chap-secret {
            type jt:unreadable;
            description "CHAP secret";
          }
    
          leaf pap-password {
            type jt:unreadable;
            description "PAP password";
          }
    
          choice client_type {
            case case_1 {
            }  // case case_1
    
            case case_2 {
            }  // case case_2
          }  // choice client_type
    
          container xauth {
            description
              "Configure xauth attributes";
            uses apply-advanced;
    
            leaf ip-address {
              type jt:ipv4prefix;
              description
                "Specify the ip-address for client";
            }
          }  // container xauth
    
          leaf-list client-group {
            type string;
            ordered-by user;
            description
              "One or more groups to which the client belongs";
          }
    
          container firewall-user {
            description
              "Client is configured as a firewall user";
            uses apply-advanced;
    
            leaf password {
              type string {
                length "1 .. 128";
              }
              description "Password for user";
            }
          }  // container firewall-user
        }  // grouping access-client-object
    
        grouping access-ldap-options {
          uses apply-advanced;
    
          leaf revert-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "60 .. 4294967295";
              }
            }
            units "seconds";
            default "600";
            description
              "Time after which to revert to primary server";
          }
    
          leaf base-distinguished-name {
            type string;
            description
              "Suffix when assembling user distinguished name (DN) or base DN under which to search for user DN";
          }
    
          choice search_type {
            container assemble {
              presence "enable assemble";
              description
                "Derive user distinguished name from 'common-name' and 'base-distinguished-name'";
              uses apply-advanced;
    
              leaf common-name {
                type string;
                default "cn";
                description
                  "Prefix in user distinguished name (for example, 'cn' or 'uid')";
              }
            }  // container assemble
            container search {
              presence "enable search";
              description
                "Search for user's distinguished name";
              uses apply-advanced;
    
              leaf search-filter {
                type string;
                description
                  "Filter to use in search (examples: 'cn=' or 'givenName=')";
              }
    
              container admin-search {
                presence "enable admin-search";
                description
                  "Perform an administrator search to find user's distinguished name";
                uses apply-advanced;
    
                leaf distinguished-name {
                  type string;
                  description
                    "Administrator's distinguished name";
                }
    
                leaf password {
                  type jt:unreadable;
                  description
                    "Administrator password";
                }
              }  // container admin-search
            }  // container search
          }  // choice search_type
        }  // grouping access-ldap-options
    
        grouping access-radius-options {
          uses apply-advanced;
    
          leaf revert-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 604800";
              }
            }
            units "seconds";
            default "60";
            description
              "Time after which to revert to primary server";
          }
    
          leaf timeout-grace {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 30";
              }
            }
            units "seconds";
            default "10";
            description
              "The period after a RADIUS server times out before marking the server as dead";
          }
    
          leaf request-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "100 .. 4000";
              }
            }
            default "500";
            description
              "Maximum number of RADIUS requests sent per second";
          }
    
          leaf interim-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "50 .. 4000";
              }
            }
            default "500";
            description
              "Maximum number of RADIUS requests sent per second";
          }
    
          leaf interim-update-tolerance {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 600";
              }
            }
            units "seconds";
            default "60";
            status deprecated;
            description
              "Maximum tolerance for Interim Updates to RADIUS";
          }
    
          container unique-nas-port {
            junos:must "(!(any "access profile <*> radius options vlan-nas-port-stacked-format"))";
            junos:must-message "unique-nas-port is not supported with vlan-nas-port-stacked-format";
            junos:must "(!(any "access profile <*> radius options nas-port-extended-format"))";
            junos:must-message "unique-nas-port is not supported with nas-port-extended-format";
            presence "enable unique-nas-port";
            description
              "Use unique value for NAS-Port radius attribute";
            uses apply-advanced;
    
            leaf chassis-id {
              junos:must "(".. chassis-id-width")";
              junos:must-message "chassis-id-width must be configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 127";
                }
              }
              description
                "Configure chassis identifier field of NAS-Port";
            }
    
            leaf chassis-id-width {
              junos:must "(".. chassis-id")";
              junos:must-message "chassis-id must be configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 7";
                }
              }
              units "bits";
              description
                "Number of bits for the chassis identifier field of NAS-Port";
            }
          }  // container unique-nas-port
        }  // grouping access-radius-options
    
        grouping address-filter-type {
          description "IP address filter";
          uses apply-advanced;
    
          leaf address-book {
            type string;
            description
              "Referenced address book";
          }
    
          leaf address-set {
            type string {
              length "1 .. 63";
            }
            description "Referenced address set";
          }
        }  // grouping address-filter-type
    
        grouping alg-object {
          uses apply-advanced;
    
          container traceoptions {
            description "ALG 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
    
            leaf level {
              type enumeration {
                enum "brief" {
                  value 0;
                  description "Brief messages";
                }
                enum "detail" {
                  value 1;
                  description "Detail messages";
                }
                enum "extensive" {
                  value 2;
                  description
                    "Extensive messages";
                }
                enum "verbose" {
                  value 3;
                  description "Verbose messages";
                }
              }
              default "brief";
              description
                "Set level of tracing output";
            }
          }  // container traceoptions
    
          container alg-manager {
            description "Configure ALG-MANAGER";
            leaf clear-dont-frag-bit {
              type empty;
              description
                "Enable ALG clear DF(don't frag) bit in IP header";
            }
    
            container traceoptions {
              description
                "ALG-MANAGER trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "ALG-MANAGER trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container alg-manager
    
          container alg-support-lib {
            description
              "Configure ALG-SUPPORT-LIB";
            container traceoptions {
              description
                "ALG-SUPPORT-LIB trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "ALG-SUPPORT-LIB trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container alg-support-lib
    
          container dns {
            description "Configure DNS ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable DNS ALG";
            }
    
            leaf maximum-message-length {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "512 .. 8192";
                }
              }
              units "bytes";
              default "512";
              description
                "Set maximum message length";
            }
    
            leaf oversize-message-drop {
              type empty;
              description
                "Drop oversized DNS packets";
            }
    
            container doctoring {
              description
                "Configure DNS ALG doctoring";
              uses apply-advanced;
    
              choice type {
                leaf none {
                  type empty;
                  description
                    "Disable all DNS ALG Doctoring";
                }
                leaf sanity-check {
                  type empty;
                  description
                    "Perform only DNS ALG sanity checks";
                }
              }  // choice type
            }  // container doctoring
    
            container traceoptions {
              description
                "DNS ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "DNS ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container dns
    
          container ftp {
            description "Configure FTP ALG";
            leaf disable {
              type empty;
              description "Disable FTP ALG";
            }
    
            leaf ftps-extension {
              type empty;
              description
                "Enable secure FTP and FTP-ssl protocols";
            }
    
            leaf line-break-extension {
              type empty;
              description
                "Enable CR+LF line termination";
            }
    
            leaf allow-mismatch-ip-address {
              type empty;
              description
                "Pass FTP packets with mismatched ip address headers and payload";
            }
    
            container traceoptions {
              description
                "FTP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "FTP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container ftp
    
          container h323 {
            presence "enable h323";
            description "Configure H.323 ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable H.323 ALG";
            }
    
            leaf endpoint-registration-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 65535";
                }
              }
              units "seconds";
              default "64800";
              description
                "Timeout for endpoints";
            }
    
            leaf media-source-port-any {
              type empty;
              description
                "Permit media from any source port on the endpoint";
            }
    
            container application-screen {
              description
                "Configure application screens";
              uses apply-advanced;
    
              container unknown-message {
                description
                  "Configure ALG action on receiving an unknown message";
                uses apply-advanced;
    
                leaf permit-nat-applied {
                  type empty;
                  description
                    "Permit unknown messages on packets that are NATed";
                }
    
                leaf permit-routed {
                  type empty;
                  description
                    "Permit unknown messages on routed packets";
                }
              }  // container unknown-message
    
              container message-flood {
                description
                  "Configure Message flood ALG options";
                uses apply-advanced;
    
                container gatekeeper {
                  description
                    "Set options for gatekeeper messages";
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 50000";
                      }
                    }
                    units "messages per second";
                    default "1000";
                    description
                      "Message flood gatekeeper threshold";
                  }
                }  // container gatekeeper
              }  // container message-flood
            }  // container application-screen
    
            container dscp-rewrite {
              description "DSCP code rewrite";
              uses apply-advanced;
    
              leaf code-point {
                type string {
                  junos:posix-pattern "^([01]{6})$";
                  junos:pattern-message "Must be form of xxxxxx, where x is 1 or 0";
                }
                description
                  "Set dscp codepoint 6-bit string";
              }
            }  // container dscp-rewrite
    
            container traceoptions {
              description
                "H.323 ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "H.323 ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "q931" {
                      value 0;
                      description
                        "Enable tracing for Q.931 processing";
                    }
                    enum "h245" {
                      value 1;
                      description
                        "Enable tracing for H.245 processing";
                    }
                    enum "ras" {
                      value 2;
                      description
                        "Enable tracing for RAS processing";
                    }
                    enum "h225-asn1" {
                      value 3;
                      description
                        "Enable tracing for H.225 ASN.1 processing";
                    }
                    enum "h245-asn1" {
                      value 4;
                      description
                        "Enable tracing for H.245 ASN.1 processing";
                    }
                    enum "ras-asn1" {
                      value 5;
                      description
                        "Enable tracing for RAS ASN.1 processing";
                    }
                    enum "chassis-cluster" {
                      value 6;
                      description
                        "Enable tracing for H.323 chassis cluster functions";
                    }
                    enum "all" {
                      value 7;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf terse {
                    type empty;
                    description
                      "Set trace verbosity level to terse";
                  }
                  leaf detail {
                    type empty;
                    description
                      "Set trace verbosity level to detail";
                  }
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container h323
    
          container mgcp {
            presence "enable mgcp";
            description "Configure MGCP ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable MGCP ALG";
            }
    
            leaf inactive-media-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 2550";
                }
              }
              units "seconds";
              default "120";
              description
                "Set inactive media timeout";
            }
    
            leaf transaction-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 50";
                }
              }
              units "seconds";
              default "30";
              description
                "Set transaction timeout";
            }
    
            leaf maximum-call-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 720";
                }
              }
              units "minutes";
              default "720";
              description
                "Set maximum call duration";
            }
    
            container application-screen {
              description
                "Configure application screens";
              uses apply-advanced;
    
              container unknown-message {
                description
                  "Configure ALG action on receiving an unknown message";
                uses apply-advanced;
    
                leaf permit-nat-applied {
                  type empty;
                  description
                    "Permit unknown messages on packets that are NATed";
                }
    
                leaf permit-routed {
                  type empty;
                  description
                    "Permit unknown messages on routed packets";
                }
              }  // container unknown-message
    
              container message-flood {
                description
                  "Set message flood ALG options";
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 50000";
                    }
                  }
                  units
                    "messages per second per MG";
                  default "100";
                  description
                    "Message flood threshold";
                }
              }  // container message-flood
    
              container connection-flood {
                description
                  "Set connection flood options";
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 10000";
                    }
                  }
                  units
                    "connection requests per second per MG";
                  default "10";
                  description
                    "Connection flood threshold";
                }
              }  // container connection-flood
            }  // container application-screen
    
            container dscp-rewrite {
              description "DSCP code rewrite";
              uses apply-advanced;
    
              leaf code-point {
                type string {
                  junos:posix-pattern "^([01]{6})$";
                  junos:pattern-message "Must be form of xxxxxx, where x is 1 or 0";
                }
                description
                  "Set dscp codepoint 6-bit string";
              }
            }  // container dscp-rewrite
    
            container traceoptions {
              description
                "MGCP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "MGCP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "call" {
                      value 0;
                      description
                        "Enable tracing for MGCP call processing";
                    }
                    enum "decode" {
                      value 1;
                      description
                        "Enable tracing for MGCP decoder operations";
                    }
                    enum "error" {
                      value 2;
                      description
                        "Enable tracing for MGCP processing errors";
                    }
                    enum "chassis-cluster" {
                      value 3;
                      description
                        "Enable tracing for MGCP chassis cluster functions";
                    }
                    enum "nat" {
                      value 4;
                      description
                        "Enable tracing for MGCP Network Address Translation (NAT) processing";
                    }
                    enum "packet" {
                      value 5;
                      description
                        "Enable tracing for MGCP protocol packet processing";
                    }
                    enum "rm" {
                      value 6;
                      description
                        "Enable tracing MGCP Resource Management (Resmgr) functions";
                    }
                    enum "all" {
                      value 7;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container mgcp
    
          container msrpc {
            description "Configure MSRPC ALG";
            leaf disable {
              type empty;
              description "Disable MSRPC ALG";
            }
    
            leaf group-max-usage {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 100";
                }
              }
              default "80";
              description
                "Set maximum group usage percentage, default 80";
            }
    
            leaf map-entry-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 4320";
                }
              }
              units "minutes";
              default "480";
              description
                "Set entry timeout, default 8hour";
            }
    
            container traceoptions {
              description
                "MSRPC ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "MSRPC ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container msrpc
    
          container sunrpc {
            description "Configure SUNRPC ALG";
            leaf disable {
              type empty;
              description "Disable SUNRPC ALG";
            }
    
            leaf group-max-usage {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 100";
                }
              }
              default "80";
              description
                "Set maximum group usage percentage, default 80";
            }
    
            leaf map-entry-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 4320";
                }
              }
              units "minutes";
              default "480";
              description
                "Set entry timeout, default 8hour";
            }
    
            container traceoptions {
              description
                "SUNRPC ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "SUNRPC ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container sunrpc
    
          container rsh {
            presence "enable rsh";
            description "Configure RSH ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable RSH ALG";
            }
    
            container traceoptions {
              description
                "RSH ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "RSH ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container rsh
    
          container rtsp {
            presence "enable rtsp";
            description "Configure RTSP ALG";
            leaf disable {
              type empty;
              description "Disable RTSP ALG";
            }
    
            container traceoptions {
              description
                "RTSP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "RTSP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container rtsp
    
          container sccp {
            presence "enable sccp";
            description "Configure SCCP ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable SCCP ALG";
            }
    
            leaf inactive-media-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 600";
                }
              }
              units "seconds";
              default "120";
              description
                "Set inactive media timeout";
            }
    
            container application-screen {
              description
                "Configure application screens";
              uses apply-advanced;
    
              container unknown-message {
                description
                  "Configure ALG action on receiving an unknown message";
                uses apply-advanced;
    
                leaf permit-nat-applied {
                  type empty;
                  description
                    "Permit unknown messages on packets that are NATed";
                }
    
                leaf permit-routed {
                  type empty;
                  description
                    "Permit unknown messages on routed packets";
                }
              }  // container unknown-message
    
              container call-flood {
                description
                  "Configure call flood thresholds";
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 1000";
                    }
                  }
                  default "20";
                  description
                    "Calls per second per client";
                }
              }  // container call-flood
            }  // container application-screen
    
            container dscp-rewrite {
              description "DSCP code rewrite";
              uses apply-advanced;
    
              leaf code-point {
                type string {
                  junos:posix-pattern "^([01]{6})$";
                  junos:pattern-message "Must be form of xxxxxx, where x is 1 or 0";
                }
                description
                  "Set dscp codepoint 6-bit string";
              }
            }  // container dscp-rewrite
    
            container traceoptions {
              description
                "SCCP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "SCCP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "call" {
                      value 0;
                      description
                        "Enable tracing SCCP call processing";
                    }
                    enum "cli" {
                      value 1;
                      description
                        "Enable tracing SCCP cli processing";
                    }
                    enum "decode" {
                      value 2;
                      description
                        "Enable tracing for SCCP decoder operations";
                    }
                    enum "error" {
                      value 3;
                      description
                        "Enable tracing for SCCP processing errors";
                    }
                    enum "chassis-cluster" {
                      value 4;
                      description
                        "Enable tracing for SCCP chassis cluster functions";
                    }
                    enum "init" {
                      value 5;
                      description
                        "Enable tracing for SCCP initialization errors";
                    }
                    enum "nat" {
                      value 6;
                      description
                        "Enable tracing for SCCP Network Address Translation (NAT) processing";
                    }
                    enum "rm" {
                      value 7;
                      description
                        "Enable tracing SCCP Resource Management (Resmgr) functions";
                    }
                    enum "all" {
                      value 8;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container sccp
    
          container sip {
            presence "enable sip";
            description "Configure SIP ALG";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description "Disable SIP ALG";
            }
    
            leaf inactive-media-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "10 .. 2550";
                }
              }
              units "seconds";
              default "120";
              description
                "Set inactive media timeout";
            }
    
            leaf maximum-call-duration {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "minutes";
              default "720";
              description
                "Set maximum call duration 0 or 3..720";
            }
    
            leaf t1-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "500 .. 5000";
                }
              }
              units "milliseconds";
              default "500";
              description "Set T1 interval";
            }
    
            leaf t4-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 10";
                }
              }
              units "seconds";
              default "5";
              description "Set T4 interval";
            }
    
            leaf c-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 10";
                }
              }
              units "minutes";
              default "3";
              description "Set C timeout";
            }
    
            leaf disable-call-id-hiding {
              type empty;
              status deprecated;
              description
                "Disable translation of host IP in Call-ID header";
            }
    
            leaf bulk-call-mode {
              type empty;
              description
                "Enable SIP distribution session in bulk mode";
            }
    
            leaf enable-call-distribution {
              type empty;
              description
                "Enable Call-id-based SIP call distribution between SPUs";
            }
    
            leaf retain-hold-resource {
              type empty;
              description
                "Retain SDP resources during call hold";
            }
    
            container hide-via-headers {
              description
                "Hide via headers options";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable hide via headers function";
              }
            }  // container hide-via-headers
    
            list distribution-ip {
              key "name";
              ordered-by user;
              description
                "Configure SIP distribute server IPV6 or IPV4 ip";
              leaf name {
                type jt:ipaddr;
                description
                  "Distribution IP address";
              }
    
              uses apply-advanced;
    
              container distribute-to {
                description
                  "Distribute sip packet";
                uses apply-advanced;
    
                container fpc {
                  description "FPC card number";
                  uses apply-advanced;
    
                  leaf slot {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 127";
                      }
                    }
                    description
                      "FPC slot number";
                  }
    
                  container pic {
                    description
                      "PIC card number";
                    uses apply-advanced;
    
                    leaf slot {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 11";
                        }
                      }
                      description
                        "Physical Interface Card number";
                    }
                  }  // container pic
                }  // container fpc
              }  // container distribute-to
            }  // list distribution-ip
    
            container application-screen {
              description
                "Configure application screens";
              uses apply-advanced;
    
              container unknown-message {
                description
                  "Configure ALG action on receiving an unknown message";
                uses apply-advanced;
    
                leaf permit-nat-applied {
                  type empty;
                  description
                    "Permit unknown messages on packets that are NATed";
                }
    
                leaf permit-routed {
                  type empty;
                  description
                    "Permit unknown messages on routed packets";
                }
              }  // container unknown-message
    
              container protect {
                description
                  "Configure Protect options";
                uses apply-advanced;
    
                container deny {
                  presence "enable deny";
                  description
                    "Protect deny options";
                  uses apply-advanced;
    
                  choice deny-choice {
                    list destination-ip {
                      key "name";
                      ordered-by user;
                      description
                        "List of protected destination server IP";
                      leaf name {
                        type jt:ipprefix;
                        description
                          "Protected destination server IPv4 or IPv6 entry";
                      }
    
                      uses apply-advanced;
                    }  // list destination-ip
                    leaf all {
                      type empty;
                      description
                        "Enable attack protection for all servers";
                    }
                  }  // choice deny-choice
    
                  leaf timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 3600";
                      }
                    }
                    units "seconds";
                    default "5";
                    description
                      "Timeout value for SIP INVITE attack table entry";
                  }
                }  // container deny
              }  // container protect
            }  // container application-screen
    
            container dscp-rewrite {
              description "DSCP code rewrite";
              uses apply-advanced;
    
              leaf code-point {
                type string {
                  junos:posix-pattern "^([01]{6})$";
                  junos:pattern-message "Must be form of xxxxxx, where x is 1 or 0";
                }
                description
                  "Set dscp codepoint 6-bit string";
              }
            }  // container dscp-rewrite
    
            container traceoptions {
              description
                "SIP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "SIP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "call" {
                      value 0;
                      description
                        "Enable tracing for SIP call processing";
                    }
                    enum "chassis-cluster" {
                      value 1;
                      description
                        "Enable tracing for SIP chassis cluster functions";
                    }
                    enum "nat" {
                      value 2;
                      description
                        "Enable tracing for SIP Network Address Translation (NAT) processing";
                    }
                    enum "parser" {
                      value 3;
                      description
                        "Enable tracing for SIP parser operations";
                    }
                    enum "rm" {
                      value 4;
                      description
                        "Enable tracing SIP Resource Management (Resmgr) functions";
                    }
                    enum "all" {
                      value 5;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf terse {
                    type empty;
                    description
                      "Set trace verbosity level to terse";
                  }
                  leaf detail {
                    type empty;
                    description
                      "Set trace verbosity level to detail";
                  }
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container sip
    
          container sql {
            presence "enable sql";
            description "Configure SQL ALG";
            leaf disable {
              type empty;
              description "Disable SQL ALG";
            }
    
            container traceoptions {
              description
                "SQL ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "SQL ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container sql
    
          container talk {
            description "Configure Talk ALG";
            leaf disable {
              type empty;
              description "Disable Talk ALG";
            }
    
            container traceoptions {
              description
                "TALK ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "TALK ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container talk
    
          container tftp {
            description "Configure TFTP ALG";
            leaf disable {
              type empty;
              description "Disable TFTP ALG";
            }
    
            container traceoptions {
              description
                "TFTP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "TFTP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container tftp
    
          container pptp {
            description "Configure PPTP ALG";
            leaf disable {
              type empty;
              description "Disable PPTP ALG";
            }
    
            container traceoptions {
              description
                "PPTP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "PPTP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container pptp
    
          container ike-esp-nat {
            description
              "Configure IKE-ESP ALG with NAT";
            uses apply-advanced;
    
            leaf enable {
              type empty;
              description "Enable IKE-ESP ALG";
            }
    
            leaf esp-gate-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 30";
                }
              }
              units "seconds";
              default "5";
              description "Set ESP gate timeout";
            }
    
            leaf esp-session-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2400";
                }
              }
              units "seconds";
              default "1800";
              description
                "Set ESP session timeout";
            }
    
            leaf state-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "180 .. 86400";
                }
              }
              units "seconds";
              default "14400";
              description
                "Set ALG state timeout";
            }
    
            container traceoptions {
              description
                "IKE-ESP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "IKE-ESP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Set trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container ike-esp-nat
    
          container twamp {
            presence "enable twamp";
            description "Configure TWAMP ALG";
            uses apply-advanced;
    
            container traceoptions {
              description
                "TWAMP ALG trace options";
              uses apply-advanced;
    
              list flag {
                key "name";
                ordered-by user;
                description
                  "TWAMP ALG trace flags";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                choice level {
                  leaf extensive {
                    type empty;
                    description
                      "Trace verbosity level to extensive";
                  }
                }  // choice level
              }  // list flag
            }  // container traceoptions
          }  // container twamp
        }  // grouping alg-object
    
        grouping anti-spam-feature {
          description "Anti-spam feature";
          uses apply-advanced;
    
          container sbl {
            presence "enable sbl";
            description "SBL settings";
            uses sbl-type;
          }  // container sbl
        }  // grouping anti-spam-feature
    
        grouping anti-virus-feature {
          description "Anti-virus feature";
          uses apply-advanced;
    
          container mime-whitelist {
            status deprecated;
            description
              "Anti-virus MIME whitelist";
            uses apply-advanced;
    
            leaf list {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description "MIME list";
            }
    
            leaf exception {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description
                "Exception settings for MIME white list";
            }
          }  // container mime-whitelist
    
          leaf url-whitelist {
            type string;
            status deprecated;
            description
              "Anti-virus URL white list";
          }
    
          leaf type {
            type enumeration {
              enum "sophos-engine" {
                value 0;
                status deprecated;
                description
                  "Anti-virus sophos-engine";
              }
              enum "avira-engine" {
                value 1;
                status deprecated;
                description
                  "Anti-virus avira-engine";
              }
              enum "anti-virus-none" {
                value 2;
                status deprecated;
              }
            }
            status deprecated;
            description "Anti-virus engine type";
          }
    
          list profile {
            key "name";
            ordered-by user;
            description "Anti-virus profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Anti-virus profile name";
            }
    
            uses apply-advanced;
    
            container fallback-options {
              presence "enable fallback-options";
              description
                "Anti-virus fallback options";
              uses av-fallback-settings;
            }  // container fallback-options
    
            container notification-options {
              presence
                "enable notification-options";
              description
                "Anti-virus notification options";
              uses anti-virus-notification-options;
            }  // container notification-options
    
            container mime-whitelist {
              description
                "Anti-virus MIME whitelist";
              uses apply-advanced;
    
              leaf list {
                junos:must "("security utm custom-objects mime-pattern $$")";
                junos:must-message "mime-pattern must be defined";
                type string;
                description "MIME list";
              }
    
              leaf exception {
                junos:must "("security utm custom-objects mime-pattern $$")";
                junos:must-message "mime-pattern must be defined";
                type string;
                description
                  "Exception settings for MIME white list";
              }
            }  // container mime-whitelist
    
            leaf url-whitelist {
              junos:must "("security utm custom-objects custom-url-category $$")";
              junos:must-message "custom-url-category must be defined";
              type string;
              description
                "Anti-virus URL white list";
            }
          }  // list profile
    
          container traceoptions {
            status deprecated;
            description
              "Trace options for anti-virus feature";
            uses anti-virus-traceoptions;
          }  // container traceoptions
    
          container sophos-engine {
            status deprecated;
            description
              "Anti-virus sophos-engine";
            uses apply-advanced;
    
            container server {
              status deprecated;
              description
                "SAV and Anti-Spam first hop DNS server";
              uses apply-advanced;
    
              leaf ip {
                type jt:ipaddr;
                description
                  "SAV and Anti-Spam first hop DNS server ip";
              }
    
              leaf routing-instance {
                junos:must "("routing-instances $$")";
                junos:must-message "Routing-instance must be defined";
                type string;
                description
                  "Routing instance name";
              }
    
              leaf source-address {
                type jt:ipaddr;
                description
                  "Source ip address used to connect server";
              }
            }  // container server
    
            leaf sxl-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 5";
                }
              }
              units "seconds";
              status deprecated;
              description
                "Sxl sophos anti-virus engine timeout";
            }
    
            leaf sxl-retry {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 5";
                }
              }
              status deprecated;
              description
                "Sxl sophos anti-virus engine query retry (number of times)";
            }
    
            container pattern-update {
              presence "enable pattern-update";
              status deprecated;
              description
                "Anti-virus sophos-engine pattern update";
              uses anti-virus-pattern-update;
            }  // container pattern-update
    
            list profile {
              key "name";
              ordered-by user;
              status deprecated;
              description
                "Anti-virus sophos-engine profile";
              leaf name {
                type string {
                  length "1 .. 29";
                }
                description
                  "Anti-virus sophos-engine profile name";
              }
    
              uses apply-advanced;
    
              container fallback-options {
                presence
                  "enable fallback-options";
                description
                  "Anti-virus sophos-engine fallback options";
                uses av-fallback-settings;
              }  // container fallback-options
    
              container scan-options {
                presence "enable scan-options";
                description
                  "Anti-virus sophos-engine scan options";
                uses sophos-scan-options;
              }  // container scan-options
    
              container trickling {
                presence "enable trickling";
                description
                  "Anti-virus trickling";
                uses anti-virus-trickling;
              }  // container trickling
    
              container notification-options {
                presence
                  "enable notification-options";
                description
                  "Anti-virus notification options";
                uses anti-virus-notification-options;
              }  // container notification-options
    
              container mime-whitelist {
                description
                  "Anti-virus MIME whitelist";
                uses apply-advanced;
    
                leaf list {
                  junos:must "("security utm custom-objects mime-pattern $$")";
                  junos:must-message "mime-pattern must be defined";
                  type string;
                  description "MIME list";
                }
    
                leaf exception {
                  junos:must "("security utm custom-objects mime-pattern $$")";
                  junos:must-message "mime-pattern must be defined";
                  type string;
                  description
                    "Exception settings for MIME white list";
                }
              }  // container mime-whitelist
    
              leaf url-whitelist {
                junos:must "("security utm custom-objects custom-url-category $$")";
                junos:must-message "custom-url-category must be defined";
                type string;
                description
                  "Anti-virus URL white list";
              }
            }  // list profile
          }  // container sophos-engine
        }  // grouping anti-virus-feature
    
        grouping anti-virus-notification-options {
          description
            "Anti-virus notification options";
          uses apply-advanced;
    
          container virus-detection {
            presence "enable virus-detection";
            description
              "Virus detection notification";
            uses apply-advanced;
    
            leaf type {
              type enumeration {
                enum "protocol-only" {
                  value 0;
                  description
                    "Notification in protocol level only";
                }
                enum "message" {
                  value 1;
                  description
                    "Notification in message";
                }
              }
              description
                "Virus detection notification type";
            }
    
            choice notify-mail-sender-choice {
              leaf notify-mail-sender {
                type empty;
                description "Notify mail sender";
              }
              leaf no-notify-mail-sender {
                type empty;
                description
                  "Don't notify mail sender";
              }
            }  // choice notify-mail-sender-choice
    
            leaf custom-message {
              type string {
                length "1 .. 512";
              }
              description
                "Custom message for notification";
            }
    
            leaf custom-message-subject {
              type string {
                length "1 .. 255";
              }
              description
                "Custom message subject for notification";
            }
          }  // container virus-detection
    
          container fallback-block {
            presence "enable fallback-block";
            description
              "Fallback block notification";
            uses apply-advanced;
    
            leaf type {
              type enumeration {
                enum "protocol-only" {
                  value 0;
                  description
                    "Notification in protocol level only";
                }
                enum "message" {
                  value 1;
                  description
                    "Notification in message";
                }
              }
              description
                "Fallback block notification type";
            }
    
            choice notify-mail-sender-choice {
              leaf notify-mail-sender {
                type empty;
                description "Notify mail sender";
              }
              leaf no-notify-mail-sender {
                type empty;
                description
                  "Don't notify mail sender";
              }
            }  // choice notify-mail-sender-choice
    
            leaf custom-message {
              type string {
                length "1 .. 512";
              }
              description
                "Custom message for notification";
            }
    
            leaf custom-message-subject {
              type string {
                length "1 .. 255";
              }
              description
                "Custom message subject for notification";
            }
          }  // container fallback-block
    
          container fallback-non-block {
            presence "enable fallback-non-block";
            description
              "Fallback non block notification";
            uses apply-advanced;
    
            choice notify-mail-recipient-choice {
              leaf notify-mail-recipient {
                type empty;
                description
                  "Notify mail recipient";
              }
              leaf no-notify-mail-recipient {
                type empty;
                description
                  "Don't notify mail recipient";
              }
            }  // choice notify-mail-recipient-choice
    
            leaf custom-message {
              type string {
                length "1 .. 512";
              }
              description
                "Custom message for notification";
            }
    
            leaf custom-message-subject {
              type string {
                length "1 .. 255";
              }
              description
                "Custom message subject for notification";
            }
          }  // container fallback-non-block
        }  // grouping anti-virus-notification-options
    
        grouping anti-virus-pattern-update {
          description
            "Anti-virus pattern update";
          uses apply-advanced;
    
          container email-notify {
            presence "enable email-notify";
            description
              "Virus pattern file updated notification";
            uses apply-advanced;
    
            leaf admin-email {
              type string {
                length "1 .. 255";
              }
              description
                "Admin emails to be notified about pattern file update";
            }
    
            leaf custom-message {
              type string {
                length "1 .. 512";
              }
              description
                "Custom message for notification";
            }
    
            leaf custom-message-subject {
              type string {
                length "1 .. 255";
              }
              description
                "Custom message subject for notification";
            }
          }  // container email-notify
    
          leaf url {
            type string {
              length "1 .. 256";
            }
            description "Server URL";
          }
    
          leaf proxy-profile {
            junos:must "("services proxy profile $$")";
            junos:must-message "Referenced Proxy profile must be defined";
            type string {
              length "1 .. 64";
            }
            description "Proxy profile";
          }
    
          leaf routing-instance {
            junos:must "("routing-instances $$")";
            junos:must-message "Routing-instance must be defined";
            type string;
            description "Routing instance name";
          }
    
          leaf interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 10080";
              }
            }
            description
              "Interval in minutes to check the update";
          }
    
          leaf start-time {
            type jt:time;
            description
              "Start time (YYYY-MM-DD.HH:MM:SS)";
          }
    
          leaf no-autoupdate {
            type empty;
            description
              "Don't automatically update anti-virus pattern";
          }
        }  // grouping anti-virus-pattern-update
    
        grouping anti-virus-traceoptions {
          description
            "Trace options for anti-virus feature";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Trace options for anti-virus feature flag";
            leaf name {
              type enumeration {
                enum "basic" {
                  value 0;
                  description
                    "Trace anti-virus module generic basic information";
                }
                enum "detail" {
                  value 1;
                  description
                    "Trace anti-virus module generic detail information";
                }
                enum "engine" {
                  value 2;
                  description
                    "Trace scan engine information";
                }
                enum "pattern" {
                  value 3;
                  description
                    "Trace detail information of pattern loading";
                }
                enum "updater" {
                  value 4;
                  description
                    "Trace pattern updater process activities";
                }
                enum "manager" {
                  value 5;
                  description
                    "Trace anti-virus manager process activities";
                }
                enum "worker" {
                  value 6;
                  description
                    "Trace anti-virus worker process activities";
                }
                enum "sendmail" {
                  value 7;
                  description
                    "Trace mail notifier process activities";
                }
                enum "ipc" {
                  value 8;
                  description
                    "Trace communication events with PFE";
                }
                enum "event" {
                  value 9;
                  description
                    "Trace communication events between RE side processes";
                }
                enum "statistics" {
                  value 10;
                  description
                    "Trace statistics information";
                }
                enum "all" {
                  value 11;
                  description
                    "Enable trace all anti-virus trace options";
                }
              }
              description
                "Trace options for anti-virus feature flag name";
            }
          }  // list flag
        }  // grouping anti-virus-traceoptions
    
        grouping anti-virus-trickling {
          description "Anti-virus trickling";
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 600";
              }
            }
            description "Trickling timeout";
          }
        }  // grouping anti-virus-trickling
    
        grouping apbr_rule_type {
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Rule name";
          }
    
          uses apply-advanced;
    
          leaf disable-midstream-routing {
            type empty;
            description
              "Disable midstream routing";
          }
    
          container match {
            presence "enable match";
            description
              "Specify security rule  match-criteria";
            uses apply-advanced;
    
            leaf-list dynamic-application {
              type string;
              ordered-by user;
            }
    
            leaf-list dynamic-application-group {
              type string;
              ordered-by user;
              description
                "Specify dynamic application group name to match";
            }
    
            leaf-list category {
              type string;
              ordered-by user;
              description "Url category";
            }
    
            leaf-list dscp {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "0 .. 63";
                }
              }
              ordered-by user;
              description
                "Specify dscp value to match";
            }
          }  // container match
    
          container then {
            presence "enable then";
            description
              "Specify rule action to take when packet match criteria";
            uses apply-advanced;
    
            container routing-instance {
              description
                "Packets are directed to specified routing instance";
              leaf routing-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
                  "Name of routing instance";
              }
            }  // container routing-instance
    
            container sla-rule {
              presence "enable sla-rule";
              description "SLA Rule";
              uses apply-advanced;
    
              leaf sla-rule-name {
                type string;
                description "SLA rule name";
              }
            }  // container sla-rule
    
            leaf application-services-bypass {
              type empty;
              description
                "Bypass the application services";
            }
          }  // container then
        }  // grouping apbr_rule_type
    
        grouping appfw_rule_type {
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Rule name";
          }
    
          uses apply-advanced;
    
          container match {
            presence "enable match";
            description
              "Specify security rule  match-criteria";
            uses apply-advanced;
    
            leaf-list dynamic-application {
              type string;
              ordered-by user;
            }
    
            leaf-list dynamic-application-group {
              type string;
              ordered-by user;
              description
                "Specify dynamic application group name to match";
            }
    
            leaf ssl-encryption {
              type enumeration {
                enum "any" {
                  value 0;
                  description
                    "Encrypted and non-encrypted rule";
                }
                enum "yes" {
                  value 1;
                  description "Encrypted rule";
                }
                enum "no" {
                  value 2;
                  description
                    "Non-encrypted rule";
                }
              }
              description
                "Select SSL encryption rules";
            }
          }  // container match
    
          container then {
            presence "enable then";
            description
              "Specify rule action to take when packet match criteria";
            uses apply-advanced;
    
            choice action {
              leaf permit {
                type empty;
                description "Permit packets";
              }
              container deny {
                presence "enable deny";
                description "Deny packets";
                uses apply-advanced;
    
                leaf block-message {
                  type empty;
                  description
                    "Redirect sessions";
                }
              }  // container deny
              container reject {
                presence "enable reject";
                description "Reject packets";
                uses apply-advanced;
    
                leaf block-message {
                  type empty;
                  description
                    "Redirect sessions";
                }
              }  // container reject
            }  // choice action
          }  // container then
        }  // grouping appfw_rule_type
    
        grouping application_object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Application name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of application";
          }
    
          list term {
            key "name";
            max-elements 8;
            ordered-by user;
            description
              "Define individual application protocols";
            uses term_object;
          }  // list term
    
          leaf application-protocol {
            type enumeration {
              enum "bootp" {
                value 0;
                description "Bootstrap protocol";
              }
              enum "dce-rpc" {
                value 1;
                description "DCE RPC";
              }
              enum "dce-rpc-portmap" {
                value 2;
                description "DCE RPC portmap";
              }
              enum "dns" {
                value 3;
                description
                  "Domain Name Service";
              }
              enum "exec" {
                value 4;
                description
                  "Remote Execution Protocol";
              }
              enum "ftp" {
                value 5;
                description
                  "File Transfer Protocol";
              }
              enum "ftp-data" {
                value 6;
                description
                  "File Transfer Protocol Data Session";
              }
              enum "gprs-gtp-c" {
                value 7;
                description
                  "GPRS Tunneling Control Plane";
              }
              enum "gprs-gtp-u" {
                value 8;
                description
                  "GPRS Tunneling User Plane";
              }
              enum "gprs-gtp-v0" {
                value 9;
                description
                  "GPRS Tunneling Version 0";
              }
              enum "gprs-sctp" {
                value 10;
                description
                  "GPRS Stream Control Protocol";
              }
              enum "h323" {
                value 11;
                description "H.323";
              }
              enum "icmp" {
                value 12;
                description "ICMP";
              }
              enum "icmpv6" {
                value 13;
                description "ICMPv6";
              }
              enum "ignore" {
                value 14;
                description
                  "Ignore application type";
              }
              enum "iiop" {
                value 15;
                description
                  "Internet Inter-ORB Protocol";
              }
              enum "ike-esp-nat" {
                value 16;
                description "IKE/ESP with NAT";
              }
              enum "ip" {
                value 17;
                description "IP";
              }
              enum "login" {
                value 18;
                description "Login";
              }
              enum "mgcp-ca" {
                value 19;
                description "MGCP-CA";
              }
              enum "mgcp-ua" {
                value 20;
                description "MGCP-UA";
              }
              enum "ms-rpc" {
                value 21;
                description "Microsoft RPC";
              }
              enum "netbios" {
                value 22;
                description "NetBIOS";
              }
              enum "netshow" {
                value 23;
                description "NetShow";
              }
              enum "none" {
                value 24;
                description "None";
              }
              enum "pptp" {
                value 25;
                description
                  "Point-to-Point Tunneling Protocol";
              }
              enum "q931" {
                value 26;
                description "Q.931";
              }
              enum "ras" {
                value 27;
                description "RAS";
              }
              enum "realaudio" {
                value 28;
                description "RealAudio";
              }
              enum "rpc" {
                value 29;
                description "RPC";
              }
              enum "rpc-portmap" {
                value 30;
                description "RPC portmap";
              }
              enum "rsh" {
                value 31;
                description "Remote Shell";
              }
              enum "rtsp" {
                value 32;
                description
                  "Real Time Streaming Protocol";
              }
              enum "sccp" {
                value 33;
                description
                  "Skinny Client Control Protocol";
              }
              enum "sip" {
                value 34;
                description
                  "Session Initiation Protocol";
              }
              enum "shell" {
                value 35;
                description "Shell";
              }
              enum "snmp" {
                value 36;
                description "SNMP";
              }
              enum "sqlnet" {
                value 37;
                description "SQLNet";
              }
              enum "sqlnet-v2" {
                value 38;
                description
                  "Oracle SQL*Net Version 2";
              }
              enum "sun-rpc" {
                value 39;
                description
                  "Sun Microsystems RPC";
              }
              enum "talk" {
                value 40;
                description "Talk Program";
              }
              enum "tftp" {
                value 41;
                description
                  "Trivial File Transfer Protocol";
              }
              enum "traceroute" {
                value 42;
                description "Traceroute";
              }
              enum "http" {
                value 43;
                description
                  "Hypertext Transfer Protocol";
              }
              enum "winframe" {
                value 44;
                description "WinFrame";
              }
              enum "https" {
                value 45;
                description
                  "Hypertext Transfer Protocol";
              }
              enum "imap" {
                value 46;
                description
                  "Internet Mail Access Protocol";
              }
              enum "smtp" {
                value 47;
                description
                  "Simple Mail Transfer Protocol";
              }
              enum "ssh" {
                value 48;
                description
                  "Secure Shell Protocol";
              }
              enum "telnet" {
                value 49;
                description "Telnet Protocol";
              }
              enum "twamp" {
                value 50;
                description
                  "Two Way Active Meaurement Protocol";
              }
              enum "pop3" {
                value 51;
                description
                  "Post Office Protocol 3 Protocol";
              }
              enum "smtps" {
                value 52;
                description
                  "Simple Mail Transfer Protocol Over TLS";
              }
              enum "imaps" {
                value 53;
                description
                  "Internet Mail Access Protocol Over TLS";
              }
              enum "pop3s" {
                value 54;
                description
                  "Post Office Protocol 3 Protocol Over TLS";
              }
            }
            description
              "Application protocol type";
          }
    
          leaf protocol {
            type string;
            description "Match IP protocol type";
          }
    
          leaf source-port {
            type string;
            description
              "Match TCP/UDP source port";
          }
    
          leaf destination-port {
            type string;
            description
              "Match TCP/UDP destination port";
          }
    
          leaf ether-type {
            type string {
              junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4})$|^([0-9A-Fa-f]{4})$";
              junos:pattern-message "Ether-type should be in hex - (example: 0x8906)";
            }
            description "Match ether type";
          }
    
          leaf icmp-type {
            type string;
            description
              "Match ICMP message type";
          }
    
          leaf icmp6-type {
            type string;
            description
              "Match ICMP6 message type";
          }
    
          leaf icmp-code {
            type string;
            description
              "Match ICMP message code";
          }
    
          leaf icmp6-code {
            type string;
            description
              "Match ICMP6 message code";
          }
    
          leaf rpc-program-number {
            type string {
              junos:posix-pattern "^(0|[1-9][0-9]{0,9})(-(0|[1-9][0-9]{0,9}))?$";
              junos:pattern-message "Value must be an integer or a range of integers";
            }
            description
              "Match range of RPC program numbers";
          }
    
          leaf uuid {
            type string {
              junos:posix-pattern "^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}$";
              junos:pattern-message "Value must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
            }
            description
              "Match universal unique identifier for DCE RPC objects";
          }
    
          leaf inactivity-timeout {
            type string;
            units "seconds";
            description
              "Application-specific inactivity timeout";
          }
    
          choice dns-choice {
            leaf do-not-translate-AAAA-query-to-A-query {
              junos:must "(".. application-protocol dns")";
              junos:must-message "Application protocol must be DNS";
              type empty;
              description
                "Knob to control the translation of AAAA query to A query";
            }
            leaf do-not-translate-A-query-to-AAAA-query {
              junos:must "(".. application-protocol dns")";
              junos:must-message "Application protocol must be DNS";
              type empty;
              description
                "Knob to control the translation of A query to AAAA query";
            }
          }  // choice dns-choice
        }  // grouping application_object
    
        grouping application_set_object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Application set name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of application set";
          }
    
          list application {
            key "name";
            ordered-by user;
            description
              "Application to be included in the set";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description "Application name";
            }
    
            uses apply-advanced;
          }  // list application
    
          list application-set {
            key "name";
            ordered-by user;
            description
              "Define an application-set";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description
                "Define an application-set name";
            }
    
            uses apply-advanced;
          }  // list application-set
        }  // grouping application_set_object
    
        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 appqoe-probe-params {
          description "Active probe parameters";
          uses apply-advanced;
    
          container data-fill {
            description
              "Probe Data Payload content";
            uses apply-advanced;
    
            leaf fill {
              type string {
                length "1 .. 63";
              }
              description
                "Repetitive payload string ";
            }
          }  // container data-fill
    
          container data-size {
            presence "enable data-size";
            description "Probe data size";
            uses apply-advanced;
    
            leaf size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "4 .. 256";
                }
              }
              description
                "Data Payload size of probe packet";
            }
          }  // container data-size
    
          container per-packet-loss-timeout {
            presence
              "enable per-packet-loss-timeout";
            description
              "Time interval between 2 consecutive SaaS probes";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "100 .. 10000";
                }
              }
              default "1000";
              description
                "Interval value in milliseconds";
            }
          }  // container per-packet-loss-timeout
    
          container probe-interval {
            presence "enable probe-interval";
            description
              "Time interval between 2 consecutive probes";
            uses apply-advanced;
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 60";
                }
              }
              default "10";
              description
                "Interval value in sec";
            }
          }  // container probe-interval
    
          container probe-count {
            presence "enable probe-count";
            description
              "Minimum number of samples to be collected to evaluate SLA measurement";
            uses apply-advanced;
    
            leaf count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000";
                }
              }
              default "5";
              description "Sample count";
            }
          }  // container probe-count
    
          container burst-size {
            presence "enable burst-size";
            description
              "Number of probes out of probe count to be sent as a burst";
            uses apply-advanced;
    
            leaf size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "1";
              description "Burst size";
            }
          }  // container burst-size
    
          container sla-export-interval {
            description
              "Enabled time based SLA exporting";
            uses apply-advanced;
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 600";
                }
              }
              description "Interval (sec)";
            }
          }  // container sla-export-interval
    
          container dscp-code-points {
            description
              "Mapping of code point aliases to bit strings";
            uses apply-advanced;
    
            leaf dscp {
              type string;
              description "DSCP";
            }
          }  // container dscp-code-points
    
          container forwarding-class {
            description
              "Forwarding class corresponding to the DSCP";
            uses apply-advanced;
    
            leaf fc-name {
              type string;
              description
                "Forwarding class name";
            }
          }  // container forwarding-class
    
          container loss-priority {
            presence "enable loss-priority";
            uses apply-advanced;
    
            leaf priority {
              type enumeration {
                enum "low" {
                  value 0;
                  description
                    "Low loss priority";
                }
                enum "medium-low" {
                  value 1;
                  description
                    "Medium-low loss priority";
                }
                enum "medium-high" {
                  value 2;
                  description
                    "Medium-high loss priority";
                }
                enum "high" {
                  value 3;
                  description
                    "High loss priority";
                }
              }
              description "Packet loss priority";
            }
          }  // container loss-priority
        }  // grouping appqoe-probe-params
    
        grouping appqoe-probe-path {
          description "Set probe path details";
          uses apply-advanced;
    
          container local {
            presence "enable local";
            description "Local node's info";
            uses appqoe-node;
          }  // container local
    
          container remote {
            presence "enable remote";
            description "Remote node's info";
            uses appqoe-node;
          }  // container remote
        }  // grouping appqoe-probe-path
    
        grouping appqoe-node {
          description "Set node info";
          uses apply-advanced;
    
          container ip-address {
            presence "enable ip-address";
            description "Set IP address";
            uses apply-advanced;
    
            leaf ip_address {
              type jt:ipaddr;
              description "IP address";
            }
          }  // container ip-address
        }  // grouping appqoe-node
    
        grouping appqoe_sla_metric_profile {
          description "Metric Name";
          uses apply-advanced;
    
          container delay-round-trip {
            presence "enable delay-round-trip";
            description
              "Maximum acceptable delay";
            uses apply-advanced;
    
            leaf delay-val {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60000000";
                }
              }
              description
                "Delay value(micro-sec)";
            }
          }  // container delay-round-trip
    
          container jitter {
            presence "enable jitter";
            description
              "Maximum acceptable jitter";
            uses apply-advanced;
    
            leaf jitter-val {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 60000000";
                }
              }
              description
                "Jitter value(micro-sec)";
            }
          }  // container jitter
    
          container jitter-type {
            presence "enable jitter-type";
            description "Type of Jitter";
            uses apply-advanced;
    
            leaf type {
              type enumeration {
                enum "two-way-jitter" {
                  value 0;
                  description
                    "Two-way-jitter-type";
                }
                enum "egress-jitter" {
                  value 1;
                  description
                    "Egress-jitter-type";
                }
                enum "ingress-jitter" {
                  value 2;
                  description
                    "Ingress-jitter-type";
                }
              }
              description "Jitter Type";
            }
          }  // container jitter-type
    
          container packet-loss {
            presence "enable packet-loss";
            description
              "Maximum acceptable packet-loss";
            uses apply-advanced;
    
            leaf loss {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              description
                "Packet loss percentage";
            }
          }  // container packet-loss
    
          container match {
            presence "enable match";
            description "Type of SLA match";
            uses apply-advanced;
    
            leaf sla_match {
              type enumeration {
                enum "any-one" {
                  value 0;
                  description
                    "Match any one strings";
                }
                enum "all" {
                  value 1;
                  description
                    "Match all metrics";
                }
              }
            }
          }  // container match
        }  // grouping appqoe_sla_metric_profile
    
        grouping appqos-traceoptions-type {
          description
            "Trace options for application classifier";
          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 other information to include in trace output";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "All events";
                }
              }
              description
                "Flag name to include in trace output";
            }
          }  // list flag
    
          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";
          }
        }  // grouping appqos-traceoptions-type
    
        grouping appqos_rule_type {
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Rule name";
          }
    
          uses apply-advanced;
    
          container match {
            description
              "Specify application traffic control rule match-criteria";
            uses apply-advanced;
    
            leaf application-any {
              type empty;
              description "Any applications";
            }
    
            leaf application-unknown {
              type empty;
              status deprecated;
              description "Uknown applcations";
            }
    
            leaf application-known {
              type empty;
              description
                "Identifiable applications";
            }
    
            leaf-list application {
              type string {
                length "1 .. 63";
              }
              ordered-by user;
              description
                "Specify application name to match";
            }
    
            leaf-list application-group {
              type string {
                length "1 .. 63";
              }
              ordered-by user;
              description
                "Specify application group name to match";
            }
          }  // container match
    
          container then {
            description
              "Specify rule action to take when packet match criteria";
            uses apply-advanced;
    
            leaf forwarding-class {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be string of 64 characters or less";
              }
              description
                "Forwarding class for outgoing packets";
            }
    
            leaf dscp-code-point {
              type string {
                junos:posix-pattern "^(([01]{6})|([a-zA-Z].{0,63}))$";
                junos:pattern-message "Not 6-bit pattern or code point alias";
              }
              description
                "DSCP code point bitmap or alias";
            }
    
            leaf loss-priority {
              type enumeration {
                enum "low" {
                  value 0;
                  description
                    "Low loss priority";
                }
                enum "medium-low" {
                  value 1;
                  description
                    "Medium-low loss priority";
                }
                enum "medium-high" {
                  value 2;
                  description
                    "Medium-high loss priority";
                }
                enum "high" {
                  value 3;
                  description
                    "High loss priority";
                }
              }
              description "Packet loss priority";
            }
    
            container rate-limit {
              description "Apply rate limiters";
              uses apply-advanced;
    
              leaf client-to-server {
                junos:must "("class-of-service application-traffic-control rate-limiters $$")";
                junos:must-message "Rate limiter must be defined";
                type string;
                description
                  "Client-to-server rate limiter";
              }
    
              leaf server-to-client {
                junos:must "("class-of-service application-traffic-control rate-limiters $$")";
                junos:must-message "Rate limiter must be defined";
                type string;
                description
                  "Server-to-client rate limiter";
              }
    
              leaf loss-priority-high {
                type empty;
                description
                  "Set Rate limiter's action Loss-Priority to high";
              }
            }  // container rate-limit
    
            leaf log {
              type empty;
              description "Log the action";
            }
          }  // container then
        }  // grouping appqos_rule_type
    
        grouping authentication-source-type {
          description
            "Configure user-identification authentication-source";
          leaf name {
            type enumeration {
              enum "local-authentication-table" {
                value 0;
                description
                  "Local-authentication-table, default priority is 100.";
              }
              enum "unified-access-control" {
                value 1;
                description
                  "Unified-access-control, default priority is 200.";
              }
              enum "firewall-authentication" {
                value 2;
                description
                  "Firewall-authentication, default priority is 150.";
              }
              enum
                "active-directory-authentication-table" {
                value 3;
                description
                  "Active-directory-authentication-table, default priority is 125.";
              }
              enum "aruba-clearpass" {
                value 4;
                description
                  "ClearPass-authentication-table, default priority is 110.";
              }
            }
            description
              "User-identification authentication-source name";
          }
    
          uses apply-advanced;
    
          choice authentication-source-option {
            leaf priority {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "0 .. 65535";
                }
              }
              description
                "Larger number means lower priority, 0 for disable";
            }
          }  // choice authentication-source-option
        }  // grouping authentication-source-type
    
        grouping av-fallback-settings {
          description
            "Anti-virus fallback settings";
          uses apply-advanced;
    
          leaf default {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description "Default action";
          }
    
          leaf content-size {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for over content size";
          }
    
          leaf engine-not-ready {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for engine not ready";
          }
    
          leaf timeout {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for engine scan timeout";
          }
    
          leaf out-of-resources {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for out of resources";
          }
    
          leaf too-many-requests {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for requests exceed engine limit";
          }
    
          leaf decompress-err {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
            }
            description
              "Fallback action for decompress error";
          }
        }  // grouping av-fallback-settings
    
        grouping aws-object {
          uses apply-advanced;
    
          container cloudwatch {
            description
              "Configure AWS CloudWatch";
            uses apply-advanced;
    
            container metric {
              description
                "Configure AWS CloudWatch metric";
              uses apply-advanced;
    
              leaf collect-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 60";
                  }
                }
                units "minutes";
                default "3";
                description
                  "Set metric collection interval";
              }
    
              leaf namespace {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 32";
                }
                description
                  "Container for collected metrics";
              }
    
              leaf region {
                type string;
                description
                  "Set AWS CloudWatch metric region";
              }
            }  // container metric
    
            container log {
              description
                "Configure AWS CloudWatch metric";
              uses apply-advanced;
    
              leaf group {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 32";
                }
                description
                  "Group of log streams";
              }
    
              leaf region {
                type string;
                description
                  "Set AWS CloudWatch log region";
              }
    
              list file {
                key "name";
                description
                  "File from which to collect log data";
                leaf name {
                  type string {
                    junos:posix-pattern "![/ %]";
                    junos:pattern-message "Must not contain '/', % or a space";
                    length "1 .. 64";
                  }
                  description
                    "Name of file from which to collect log data";
                }
    
                uses apply-advanced;
    
                leaf security-hub-import {
                  type empty;
                  description
                    "Import security events in the file to AWS Security Hub";
                }
    
                leaf collect-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 60";
                    }
                  }
                  units "minutes";
                  default "3";
                  description
                    "Set log collection interval";
                }
              }  // list file
            }  // container log
          }  // container cloudwatch
        }  // grouping aws-object
    
        grouping banner-object {
          uses apply-advanced;
    
          container banner {
            description
              "Banners that are prompted during authentication";
            uses apply-advanced;
    
            leaf login {
              type string {
                length "1 .. 250";
              }
              description
                "The message that will be displayed before login";
            }
    
            leaf success {
              type string {
                length "1 .. 250";
              }
              description
                "The message that will be displayed on successful login";
            }
    
            leaf fail {
              type string {
                length "1 .. 250";
              }
              description
                "The message that will be displayed after failed user login";
            }
          }  // container banner
        }  // grouping banner-object
    
        grouping batch-query-type {
          description
            "Batch query configuration";
          uses apply-advanced;
    
          leaf items-per-batch {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "100 .. 1000";
              }
            }
            default "200";
            description
              "Items number per batch query";
          }
    
          leaf query-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 60";
              }
            }
            units "seconds";
            default "5";
            description "Query interval";
          }
        }  // grouping batch-query-type
    
        grouping category-list-type {
          description
            "Configure category-list object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 59";
            }
            description
              "Configure name of category-list object";
          }
    
          uses apply-advanced;
    
          leaf-list value {
            type string;
            ordered-by user;
            description
              "Configure value of category-list object";
          }
        }  // grouping category-list-type
    
        grouping certificate-object {
          leaf name {
            type string;
            description
              "Simple name to identify this certificate";
          }
    
          uses apply-advanced;
    
          leaf certificate {
            type string;
            description
              "Certificate and private key string";
          }
        }  // grouping certificate-object
    
        grouping clients-object {
          leaf name {
            junos:must "((".. user" || ".. user-groups"))";
            junos:must-message "user or user-groups must be defined";
            type string {
              length "1 .. 31";
            }
            description "Client config name";
          }
    
          uses apply-advanced;
    
          list remote-protected-resources {
            key "name";
            ordered-by user;
            description
              "IP/mask of remote protected resources";
            leaf name {
              type jt:ipv4prefix-mandatory;
              description
                "IP/mask of remote protected resources";
            }
          }  // list remote-protected-resources
    
          list remote-exceptions {
            key "name";
            ordered-by user;
            description
              "Ip/mask of exceptions being passthru";
            leaf name {
              type jt:ipv4prefix-mandatory;
              description
                "Ip/mask of exceptions being passthru";
            }
          }  // list remote-exceptions
    
          leaf ipsec-vpn {
            junos:must "("security ipsec vpn $$")";
            junos:must-message "ipsec-vpn must be defined";
            type string;
            description
              "IPSec VPN assigned to remote access client";
          }
    
          list user {
            key "name";
            description "Remote IPSec VPN users";
            leaf name {
              type string;
              description "User name";
            }
    
            uses apply-advanced;
          }  // list user
    
          list user-groups {
            key "name";
            description
              "Remote IPSec VPN usergroups";
            leaf name {
              type string;
              description "Usergroup name";
            }
    
            uses apply-advanced;
          }  // list user-groups
        }  // grouping clients-object
    
        grouping command-list-type {
          description
            "Configure command-list object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 29";
            }
            description
              "Configure name of command-list object";
          }
    
          uses apply-advanced;
    
          leaf-list value {
            type string {
              length "1 .. 64";
            }
            ordered-by user;
            description
              "Configure value of command-list object";
          }
        }  // grouping command-list-type
    
        grouping content-filtering-feature {
          description
            "Content-filtering feature";
          uses apply-advanced;
    
          list profile {
            key "name";
            ordered-by user;
            description
              "Content filtering profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Content-filtering feature profile name";
            }
    
            uses apply-advanced;
    
            leaf permit-command {
              junos:must "("security utm custom-objects protocol-command $$")";
              junos:must-message "protocol-command must be defined";
              type string;
              description "Permit command list";
            }
    
            leaf block-command {
              junos:must "("security utm custom-objects protocol-command $$")";
              junos:must-message "protocol-command must be defined";
              type string;
              description "Block command list";
            }
    
            leaf block-extension {
              junos:must "("security utm custom-objects filename-extension $$")";
              junos:must-message "filename-extension must be defined";
              type string;
              description "Block extension list";
            }
    
            container block-mime {
              presence "enable block-mime";
              description
                "Content-filtering feature block MIME";
              uses apply-advanced;
    
              leaf list {
                junos:must "("security utm custom-objects mime-pattern $$")";
                junos:must-message "mime-pattern must be defined";
                type string;
                description "Block MIME list";
              }
    
              leaf exception {
                junos:must "("security utm custom-objects mime-pattern $$")";
                junos:must-message "mime-pattern must be defined";
                type string;
                description
                  "Exception of block MIME list";
              }
            }  // container block-mime
    
            container block-content-type {
              description
                "Content-filtering feature block content type";
              uses apply-advanced;
    
              leaf activex {
                type empty;
                description "Block activex";
              }
    
              leaf java-applet {
                type empty;
                description "Block Java-applet";
              }
    
              leaf exe {
                type empty;
                description
                  "Block Windows/dos exe file";
              }
    
              leaf zip {
                type empty;
                description "Block zip file";
              }
    
              leaf http-cookie {
                type empty;
                description "Block HTTP cookie";
              }
            }  // container block-content-type
    
            container notification-options {
              presence
                "enable notification-options";
              description "Notification options";
              uses apply-advanced;
    
              leaf type {
                type enumeration {
                  enum "protocol-only" {
                    value 0;
                    description
                      "Notification in protocol level";
                  }
                  enum "message" {
                    value 1;
                    description
                      "Notification in message";
                  }
                }
                description
                  "Notification options type";
              }
    
              choice notify-mail-sender-choice {
                leaf notify-mail-sender {
                  type empty;
                  description
                    "Notifiy mail sender";
                }
                leaf no-notify-mail-sender {
                  type empty;
                  description
                    "Don't notifiy mail sender";
                }
              }  // choice notify-mail-sender-choice
    
              leaf custom-message {
                type string {
                  length "1 .. 512";
                }
                description
                  "Custom notification message";
              }
            }  // container notification-options
          }  // list profile
        }  // grouping content-filtering-feature
    
        grouping custom-attack-group-type {
          description
            "Define custom attack group";
          leaf name {
            type string;
            description
              "Custom attack group name";
          }
    
          uses apply-advanced;
    
          leaf attack-group-description {
            type string;
            status deprecated;
            description
              "Attack group description in xml format";
          }
    
          leaf-list group-members {
            type string;
            ordered-by user;
            description
              "List of attacks/attack groups belonging to this group";
          }
        }  // grouping custom-attack-group-type
    
        grouping custom-attack-type {
          description "Define custom attack";
          leaf name {
            type string {
              junos:posix-pattern "^.{1,60}$";
              junos:pattern-message "Custom attack name must be a string of 60 characters or less";
            }
            description "Custom attack name";
          }
    
          uses apply-advanced;
    
          leaf-list attack-description {
            type string;
            ordered-by user;
            description "Attack description";
          }
    
          leaf recommended-action {
            type enumeration {
              enum "none" {
                value 0;
                description "No action";
              }
              enum "ignore" {
                value 1;
                description
                  "No further inspection on the flow";
              }
              enum "drop-packet" {
                value 2;
                description "Drop the packet";
              }
              enum "drop" {
                value 3;
                description
                  "Drop the packet and subsequent packets of the flow";
              }
              enum "close-client" {
                value 4;
                description
                  "Reset the client side";
              }
              enum "close-server" {
                value 5;
                description
                  "Reset the server side";
              }
              enum "close" {
                value 6;
                description
                  "Reset both client and server";
              }
            }
            description "Recommended Action";
          }
    
          leaf severity {
            type enumeration {
              enum "info" {
                value 0;
                description
                  "Provide information of attack when it matches.";
              }
              enum "warning" {
                value 1;
                description
                  "Issue a warning when attack matches.";
              }
              enum "minor" {
                value 2;
                description
                  "The attack is a  minor one.";
              }
              enum "major" {
                value 3;
                description
                  "The attack is a major one.";
              }
              enum "critical" {
                value 4;
                description
                  "The attack is a critical one.";
              }
            }
            description
              "Select the severity that matches the lethality of this attack on your network";
          }
    
          container time-binding {
            description "Time binding params";
            leaf count {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Number of times this attack is to be triggered";
            }
    
            leaf scope {
              junos:must "((!(".. count 0") && !(".. count 1")))";
              junos:must-message "Scope should be defined if count > 1";
              type enumeration {
                enum "peer" {
                  value 0;
                  description
                    "If the attack is between a single source and single destination";
                }
                enum "source" {
                  value 1;
                  description
                    "If the attack is from one source and multiple destination";
                }
                enum "destination" {
                  value 2;
                  description
                    "If the attack is from multiple sources to one destination";
                }
              }
              description
                "Scope within which the count occurs";
            }
    
            leaf interval {
              junos:must "((!(".. count 0") && (!(".. count 1") && (".. count" && ".. scope"))))";
              junos:must-message "To configure interval, count & scope should be set and count should be greater than or equal to 2";
              type string {
                junos:posix-pattern "^((([0-5][0-9])[m][-]([0-5][0-9])[s])|([6][0][m][-][0][0][s]))$";
                junos:pattern-message "Invalid interval format: Correct format MMm-SSs, with minutes range 00-60, seconds range 00-59";
              }
              default "01m-00s";
              description
                "Maximum time-gap between two instances of the attack. Format : MMm-SSs";
            }
          }  // container time-binding
    
          container detection-filter {
            junos:must "(!(".. time-binding"))";
            junos:must-message "Time-binding and detection-filter will not be allowed together";
            description
              "Detection filter params";
            leaf count {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Number of matches for this attack to be triggered. Must be greater than 0";
            }
    
            leaf scope {
              type enumeration {
                enum "session" {
                  value 0;
                  description
                    "If the attack is between a single source and single destination";
                }
                enum "source" {
                  value 1;
                  description
                    "If the attack is from one source and multiple destination";
                }
                enum "destination" {
                  value 2;
                  description
                    "If the attack is from multiple sources to one destination";
                }
              }
              description
                "Scope within which the count occurs";
            }
    
            leaf interval {
              type string {
                junos:posix-pattern "^((([0-5][0-9])[m][-]([0-5][0-9])[s])|([6][0][m][-][0][0][s]))$";
                junos:pattern-message "Invalid interval format: Correct format MMm-SSs, with minutes range 00-60, seconds range 00-59";
              }
              description
                "Time period over which count is accrued. Format : MMm-SSs. Minimum value is 1 second";
            }
          }  // container detection-filter
    
          container attack-type {
            description "Type of attack";
            uses apply-advanced;
    
            container signature {
              junos:must "(!((".. anomaly" || ".. chain")))";
              junos:must-message "Only one attack type is permitted";
              description
                "Signature based attack";
              uses apply-advanced;
    
              container protocol-binding {
                description
                  "Protocol binding over which attack will be detected";
                uses apply-advanced;
    
                choice protocol {
                  container tcp {
                    presence "enable tcp";
                    description
                      "Attack is for TCP packets only";
                    uses apply-advanced;
    
                    list minimum-port {
                      key "name";
                      ordered-by user;
                      description
                        "Multiple sets of (single port/port ranges) can be specified";
                      uses port-range;
                    }  // list minimum-port
                  }  // container tcp
                  container udp {
                    presence "enable udp";
                    description
                      "Attack is for UDP packets only";
                    uses apply-advanced;
    
                    list minimum-port {
                      key "name";
                      ordered-by user;
                      description
                        "Either single port or port ranges can be specified";
                      uses port-range;
                    }  // list minimum-port
                  }  // container udp
                  container rpc {
                    presence "enable rpc";
                    description
                      "Attack is for RPC packets only";
                    uses apply-advanced;
    
                    leaf program-number {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "RPC Program Number";
                    }
                  }  // container rpc
                  leaf icmp {
                    type empty;
                    description
                      "Attack is for ICMP packets only";
                  }
                  leaf icmpv6 {
                    type empty;
                    description
                      "Attack is for ICMPv6 packets only";
                  }
                  container ip {
                    presence "enable ip";
                    description
                      "Attack is for all IP based packets";
                    uses apply-advanced;
    
                    leaf protocol-number {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 139";
                        }
                      }
                      description
                        "Transport layer protocol number";
                    }
                  }  // container ip
                  container ipv6 {
                    presence "enable ipv6";
                    description
                      "Attack is for all IPv6 based packets";
                    uses apply-advanced;
    
                    leaf protocol-number {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 139";
                        }
                      }
                      description
                        "Transport layer protocol number";
                    }
                  }  // container ipv6
                  leaf application {
                    type string;
                    description
                      "Application name";
                  }
                  leaf nested-application {
                    type string;
                    status deprecated;
                    description
                      "Nested application name";
                  }
                }  // choice protocol
              }  // container protocol-binding
    
              leaf context {
                type string;
                description "Context";
              }
    
              leaf pattern {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                type string {
                  length "0 .. 511";
                }
                description
                  "Pattern is the signature of the attack you want to detect";
              }
    
              leaf pattern-pcre {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                type string {
                  length "0 .. 511";
                }
                description
                  "Attack signature pattern in PCRE format";
              }
    
              container content {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                description
                  "Mention the match-modifire parameters to enhance pattern matching";
                leaf pattern {
                  type string;
                  description
                    "Specify match-modifier pattern";
                }
    
                leaf pcre {
                  type string {
                    length "0 .. 511";
                  }
                  description "PCRE expression";
                }
    
                container depth {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum depth to search pattern within a packet. Depth is not relative";
                  leaf depth-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'depth'";
                  }
    
                  leaf depth-variable {
                    type string;
                    description
                      "Specify the variable name from which 'depth' should be extracted";
                  }
                }  // container depth
    
                container offset {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Where to start searching for a pattern within a packet. Offset value is not relative";
                  leaf offset-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "0 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'offset'";
                  }
    
                  leaf offset-variable {
                    type string;
                    description
                      "Specify the variable name from which 'offset' should be extracted";
                  }
                }  // container offset
    
                container within {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum Number of bytes present between two conjugative pattern match. within is  relative";
                  leaf within-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'within'";
                  }
    
                  leaf within-variable {
                    type string;
                    description
                      "Specify the variable name from which 'within' should be extracted";
                  }
                }  // container within
    
                container distance {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum Length to ignore before searching next pattern match. Distance is  relative";
                  leaf distance-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "-65535 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'distance'";
                  }
    
                  leaf distance-variable {
                    type string;
                    description
                      "Specify the variable name from which 'distance' should be extracted";
                  }
                }  // container distance
    
                container byte-extract {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-extract parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  leaf offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the number of bytes in to payload to start processing";
                  }
    
                  leaf var-name {
                    type string;
                    description
                      "Specify the name of the variable to reference in other rule options";
                  }
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf multiplier {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the value to be multiplied against the bytes read";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf align {
                    type enumeration {
                      enum "2-byte" {
                        value 0;
                        description
                          "Round the number of converted bytes to 2-byte boundary";
                      }
                      enum "4-byte" {
                        value 1;
                        description
                          "Round the number of converted bytes to 4-byte boundary";
                      }
                    }
                    description
                      "Specify the byte alignment";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
                }  // container byte-extract
    
                container byte-test {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-test parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  container rvalue {
                    description
                      "Specify the rvalue to test the converted value against";
                    leaf rvalue-value {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the value";
                    }
    
                    leaf rvalue-variable {
                      type string;
                      description
                        "Specify the variable name";
                    }
                  }  // container rvalue
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf operator {
                    type enumeration {
                      enum "less-than" {
                        value 0;
                        description
                          "Perform operation 'less than'";
                      }
                      enum "greater-than" {
                        value 1;
                        description
                          "Perform operation 'greater than'";
                      }
                      enum "less-than-or-equal" {
                        value 2;
                        description
                          "Perform operation 'less than or equal'";
                      }
                      enum
                        "greater-than-or-equal" {
                        value 3;
                        description
                          "Perform operation 'greater than or equal'";
                      }
                      enum "equal" {
                        value 4;
                        description
                          "Perform operation 'equal'";
                      }
                      enum "bitwise-AND" {
                        value 5;
                        description
                          "Perform operation 'bitwise AND'";
                      }
                      enum "bitwise-XOR" {
                        value 6;
                        description
                          "Perform operation 'bitwise OR'";
                      }
                    }
                    description
                      "Specify the operation to perform on extracted value";
                  }
    
                  leaf negate {
                    type empty;
                    description
                      "Check if the operator is not true";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
                }  // container byte-test
    
                container byte-math {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-math parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  leaf offset {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "0 .. 65535";
                      }
                    }
                    description
                      "Specify the number of bytes in to payload to start processing";
                  }
    
                  container rvalue {
                    description
                      "Specify the value to use mathematical operation against";
                    leaf rvalue-value {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the value";
                    }
    
                    leaf rvalue-variable {
                      type string;
                      description
                        "Specify the variable name";
                    }
                  }  // container rvalue
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf operator {
                    type enumeration {
                      enum "addition" {
                        value 0;
                        description
                          "Perform operation 'addition'";
                      }
                      enum "subtraction" {
                        value 1;
                        description
                          "Perform operation 'subtraction'";
                      }
                      enum "multiplication" {
                        value 2;
                        description
                          "Perform operation 'multiplication'";
                      }
                      enum "division" {
                        value 3;
                        description
                          "Perform operation 'division'";
                      }
                      enum "right-shift" {
                        value 4;
                        description
                          "Perform operation 'right shift'";
                      }
                      enum "left-shift" {
                        value 5;
                        description
                          "Perform operation 'left shift'";
                      }
                    }
                    description
                      "Specify the operation to perform on extracted value";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
    
                  leaf result {
                    type string;
                    description
                      "Specify the variable name to which result should be stored";
                  }
                }  // container byte-math
    
                container byte-jump {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-jump parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "0 .. 65535";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf multiplier {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the value to be multiplied against the bytes read";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf align {
                    type enumeration {
                      enum "4-byte" {
                        value 0;
                        description
                          "Round the number of converted bytes to 4-byte boundary";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
    
                  leaf from-beginning {
                    type empty;
                    description
                      "Enable jump from the beginning of the payload";
                  }
    
                  leaf from-end {
                    type empty;
                    description
                      "Enable jump from the end of the payload";
                  }
    
                  leaf post-offset {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "-65535 .. 65535";
                      }
                    }
                    description
                      "Specify the number of bytes to skip forward or backward";
                  }
                }  // container byte-jump
    
                container is-data-at {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the is-data-at parameters for signature in length encoded protocols";
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "0 .. 65535";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf negate {
                    type empty;
                    description
                      "Negates the results of the isdataat test";
                  }
                }  // container is-data-at
              }  // container content
    
              container optional-parameters {
                junos:must "(".. pattern-pcre")";
                junos:must-message "Applicable only for pattern-pcre defined signatures";
                description
                  "Mention the optional parameters to enhance pattern matching";
                leaf min-offset {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Minimum offset in data at which pattern-match can end";
                }
    
                leaf max-offset {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Maximum offset in data at which pattern-match can end";
                }
    
                leaf min-length {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Minimum match length required to match the pattern";
                }
    
                leaf edit-distance {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Match the pattern within this edit distance";
                }
    
                leaf hamming-distance {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Match the pattern within this hamming distance";
                }
              }  // container optional-parameters
    
              leaf regexp {
                junos:must "((".. pattern" || ".. pattern-pcre"))";
                junos:must-message "A pattern or pattern-pcre must be defined ";
                type string {
                  length "0 .. 511";
                }
                description
                  "Regular expression used for matching repetition of patterns";
              }
    
              leaf negate {
                junos:must "(!((".. context normalized-stream" || (".. context normalized-stream256" || (".. context normalized-stream1k" || ".. context normalized-stream8k")))))";
                junos:must-message "Negation not supported for normalized-stream contexts";
                junos:must "(!((".. context stream" || (".. context stream256" || (".. context stream1k" || ".. context stream8k")))))";
                junos:must-message "Negation not supported for stream contexts";
                type empty;
                description
                  "Trigger the attack if condition is not met";
              }
    
              leaf direction {
                type enumeration {
                  enum "client-to-server" {
                    value 0;
                    description
                      "Client to Server";
                  }
                  enum "server-to-client" {
                    value 1;
                    description
                      "Server to Client";
                  }
                  enum "any" {
                    value 2;
                    description "Any direction";
                  }
                }
                description
                  "Connection direction of the attack";
              }
    
              leaf shellcode {
                type enumeration {
                  enum "intel" {
                    value 0;
                    description
                      "Detect shellcode for intel platforms";
                  }
                  enum "sparc" {
                    value 1;
                    description
                      "Detect shellcode for sparc platforms";
                  }
                  enum "all" {
                    value 2;
                    description
                      "Detect shellcode for both intel and sparc platforms";
                  }
                  enum "no-shellcode" {
                    value 3;
                    description
                      "Do not detect shellcode";
                  }
                }
                description
                  "Specify shellcode flag for this attack";
              }
    
              container protocol {
                description
                  "Protocol header matches";
                uses apply-advanced;
    
                container ipv4 {
                  description
                    "IPv4 protocol parameters";
                  uses apply-advanced;
    
                  container tos {
                    presence "enable tos";
                    description
                      "Type of Service";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container tos
    
                  container ihl {
                    presence "enable ihl";
                    description
                      "Header length in words";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 15";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ihl
    
                  container total-length {
                    presence
                      "enable total-length";
                    description
                      "Total Length of IP datagram";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container total-length
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Fragment Identification";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container ip-flags {
                    presence "enable ip-flags";
                    description "IP Flag bits";
                    choice rb-choice {
                      leaf rb {
                        type empty;
                        description
                          "Reserved bit";
                      }
                      leaf no-rb {
                        type empty;
                        description
                          "Don't reserved bit";
                      }
                    }  // choice rb-choice
    
                    choice mf-choice {
                      leaf mf {
                        type empty;
                        description
                          "More Fragment bit";
                      }
                      leaf no-mf {
                        type empty;
                        description
                          "Don't more Fragment bit";
                      }
                    }  // choice mf-choice
    
                    choice df-choice {
                      leaf df {
                        type empty;
                        description
                          "Don't Fragment bit";
                      }
                      leaf no-df {
                        type empty;
                        description
                          "Don't don't Fragment bit";
                      }
                    }  // choice df-choice
                  }  // container ip-flags
    
                  container ttl {
                    presence "enable ttl";
                    description "Time to live";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ttl
    
                  container protocol {
                    presence "enable protocol";
                    description
                      "Transport layer protocol";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container protocol
    
                  container source {
                    presence "enable source";
                    description
                      "Source IP-address/Hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv4addr;
                      description "Match value";
                    }
                  }  // container source
    
                  container destination {
                    presence
                      "enable destination";
                    description
                      "Destination IP-address/Hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv4addr;
                      description "Match value";
                    }
                  }  // container destination
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container ipv4
    
                container ipv6 {
                  description
                    "IPv6 protocol parameters";
                  uses apply-advanced;
    
                  container traffic-class {
                    presence
                      "enable traffic-class";
                    description
                      "Traffic class. Similar to TOS in IPv4";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container traffic-class
    
                  container payload-length {
                    presence
                      "enable payload-length";
                    description
                      "Length of the payload in the IPv6 datagram";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container payload-length
    
                  container flow-label {
                    presence "enable flow-label";
                    description
                      "Flow label identification";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 1048575";
                        }
                      }
                      description "Match value";
                    }
                  }  // container flow-label
    
                  container hop-limit {
                    presence "enable hop-limit";
                    description "Hop limit";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container hop-limit
    
                  container next-header {
                    presence
                      "enable next-header";
                    description
                      "The header following the basic IPv6 header";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container next-header
    
                  container source {
                    presence "enable source";
                    description
                      "Source IP-address or hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv6addr;
                      description "Match value";
                    }
                  }  // container source
    
                  container destination {
                    presence
                      "enable destination";
                    description
                      "Destination IP-address or hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv6addr;
                      description "Match value";
                    }
                  }  // container destination
    
                  container extension-header {
                    description
                      "IPv6 Extension headers";
                    uses apply-advanced;
    
                    container routing-header {
                      presence
                        "enable routing-header";
                      description
                        "IPv6 Routing extension header";
                      uses apply-advanced;
    
                      container header-type {
                        description
                          "Routing header type";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "0 .. 255";
                            }
                          }
                          description
                            "Match value";
                        }
                      }  // container header-type
                    }  // container routing-header
    
                    container destination-option {
                      description
                        "IPv6 Destination option extension header";
                      uses apply-advanced;
    
                      container option-type {
                        description
                          "Destination option header type";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "0 .. 255";
                            }
                          }
                          description
                            "Match value";
                        }
                      }  // container option-type
    
                      container home-address {
                        description
                          "IPv6 Home address of the mobile node";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type jt:ipv6addr;
                          description
                            "Match value";
                        }
                      }  // container home-address
                    }  // container destination-option
                  }  // container extension-header
                }  // container ipv6
    
                container tcp {
                  junos:must "((!(".. udp") && !(".. icmp")))";
                  junos:must-message "tcp cannot be specified with udp or icmp";
                  description
                    "TCP protocol parameters";
                  uses apply-advanced;
    
                  container source-port {
                    presence
                      "enable source-port";
                    description "Source port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container source-port
    
                  container destination-port {
                    presence
                      "enable destination-port";
                    description
                      "Destination port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container destination-port
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "0 .. 4294967295";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container ack-number {
                    presence "enable ack-number";
                    description
                      "Acknowledgement Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "0 .. 4294967295";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ack-number
    
                  container header-length {
                    presence
                      "enable header-length";
                    description
                      "Header Length in words";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 15";
                        }
                      }
                      description "Match value";
                    }
                  }  // container header-length
    
                  container reserved {
                    presence "enable reserved";
                    description
                      "Three reserved bits";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 7";
                        }
                      }
                      description "Match value";
                    }
                  }  // container reserved
    
                  container window-size {
                    presence
                      "enable window-size";
                    description "Window Size";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container window-size
    
                  container urgent-pointer {
                    presence
                      "enable urgent-pointer";
                    description "Urgent Pointer";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container urgent-pointer
    
                  container tcp-flags {
                    presence "enable tcp-flags";
                    description
                      "TCP header flags";
                    choice r1-choice {
                      leaf r1 {
                        type empty;
                        description
                          "Set Reserverd bit 1";
                      }
                      leaf no-r1 {
                        type empty;
                        description
                          "Don't set Reserverd bit 1";
                      }
                    }  // choice r1-choice
    
                    choice r2-choice {
                      leaf r2 {
                        type empty;
                        description
                          "Set Reserved bit 2";
                      }
                      leaf no-r2 {
                        type empty;
                        description
                          "Don't set Reserved bit 2";
                      }
                    }  // choice r2-choice
    
                    choice urg-choice {
                      leaf urg {
                        type empty;
                        description
                          "Set Urgent bit";
                      }
                      leaf no-urg {
                        type empty;
                        description
                          "Don't set Urgent bit";
                      }
                    }  // choice urg-choice
    
                    choice ack-choice {
                      leaf ack {
                        type empty;
                        description
                          "Set Acknowledge bit";
                      }
                      leaf no-ack {
                        type empty;
                        description
                          "Don't set Acknowledge bit";
                      }
                    }  // choice ack-choice
    
                    choice psh-choice {
                      leaf psh {
                        type empty;
                        description
                          "Set Push bit";
                      }
                      leaf no-psh {
                        type empty;
                        description
                          "Don't set Push bit";
                      }
                    }  // choice psh-choice
    
                    choice rst-choice {
                      leaf rst {
                        type empty;
                        description
                          "Set Reset bit";
                      }
                      leaf no-rst {
                        type empty;
                        description
                          "Don't set Reset bit";
                      }
                    }  // choice rst-choice
    
                    choice syn-choice {
                      leaf syn {
                        type empty;
                        description
                          "Set SYN bit";
                      }
                      leaf no-syn {
                        type empty;
                        description
                          "Don't set SYN bit";
                      }
                    }  // choice syn-choice
    
                    choice fin-choice {
                      leaf fin {
                        type empty;
                        description
                          "Set FINish bit";
                      }
                      leaf no-fin {
                        type empty;
                        description
                          "Don't set FINish bit";
                      }
                    }  // choice fin-choice
                  }  // container tcp-flags
    
                  container option {
                    presence "enable option";
                    description "Kind";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container option
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by TCP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container window-scale {
                    presence
                      "enable window-scale";
                    description "Window scale";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container window-scale
    
                  container mss {
                    presence "enable mss";
                    description
                      "Maximum Segment Size";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container mss
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container tcp
    
                container udp {
                  junos:must "((!(".. tcp") && !(".. icmp")))";
                  junos:must-message "udp cannot be specified with tcp or icmp";
                  description
                    "UDP protocol parameters";
                  uses apply-advanced;
    
                  container source-port {
                    presence
                      "enable source-port";
                    description "Source port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container source-port
    
                  container destination-port {
                    presence
                      "enable destination-port";
                    description
                      "Destination port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container destination-port
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by UDP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container udp
    
                container icmp {
                  junos:must "((!(".. udp") && (!(".. tcp") && !(".. icmpv6"))))";
                  junos:must-message "icmp cannot be specified with tcp or udp or icmpv6";
                  description
                    "ICMP protocol parameters";
                  uses apply-advanced;
    
                  container type {
                    presence "enable type";
                    description "Type";
                    uses apply-advanced;
    
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container type
    
                  container code {
                    presence "enable code";
                    description "Code";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container code
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Identifier in echo request/reply";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by ICMP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container icmp
    
                container icmpv6 {
                  junos:must "((!(".. udp") && (!(".. tcp") && !(".. icmp"))))";
                  junos:must-message "icmpv6 cannot be specified with tcp or udp or icmp";
                  description
                    "ICMPv6 protocol parameters";
                  uses apply-advanced;
    
                  container type {
                    presence "enable type";
                    description "Type";
                    uses apply-advanced;
    
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container type
    
                  container code {
                    presence "enable code";
                    description "Code";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container code
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Identifier in echo request/reply";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IPv6 datagram subtracted by ICMPv6 header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container icmpv6
              }  // container protocol
            }  // container signature
    
            container anomaly {
              junos:must "(!((".. signature" || ".. chain")))";
              junos:must-message "Only one attack type is permitted";
              description "Protocol anomaly";
              uses apply-advanced;
    
              leaf service {
                type string;
                description "Service name";
              }
    
              leaf test {
                type string;
                description
                  "Protocol anomaly condition to be checked";
              }
    
              leaf direction {
                type enumeration {
                  enum "client-to-server" {
                    value 0;
                    description
                      "From Client to Server";
                  }
                  enum "server-to-client" {
                    value 1;
                    description
                      "From Server to Client";
                  }
                  enum "any" {
                    value 2;
                    description "Any direction";
                  }
                }
                description "Direction";
              }
    
              leaf shellcode {
                type enumeration {
                  enum "intel" {
                    value 0;
                    description
                      "Detect shellcode for intel platforms";
                  }
                  enum "sparc" {
                    value 1;
                    description
                      "Detect shellcode for sparc platforms";
                  }
                  enum "all" {
                    value 2;
                    description
                      "Detect shellcode for both intel and sparc platforms";
                  }
                  enum "no-shellcode" {
                    value 3;
                    description
                      "Do not detect shellcode";
                  }
                }
                description
                  "Specify shellcode flag for this attack";
              }
            }  // container anomaly
    
            container chain {
              junos:must "(!((".. signature" || ".. anomaly")))";
              junos:must-message "Only one attack type is permitted";
              description "Chain attack";
              uses apply-advanced;
    
              container protocol-binding {
                description
                  "Protocol binding over which attack will be detected";
                uses apply-advanced;
    
                choice protocol {
                  container tcp {
                    presence "enable tcp";
                    description
                      "Attack is for TCP packets only";
                    uses apply-advanced;
    
                    list minimum-port {
                      key "name";
                      ordered-by user;
                      description
                        "Multiple sets of (single port/port ranges) can be specified";
                      uses port-range;
                    }  // list minimum-port
                  }  // container tcp
                  container udp {
                    presence "enable udp";
                    description
                      "Attack is for UDP packets only";
                    uses apply-advanced;
    
                    list minimum-port {
                      key "name";
                      ordered-by user;
                      description
                        "Either single port or port ranges can be specified";
                      uses port-range;
                    }  // list minimum-port
                  }  // container udp
                  container rpc {
                    presence "enable rpc";
                    description
                      "Attack is for RPC packets only";
                    uses apply-advanced;
    
                    leaf program-number {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "RPC Program Number";
                    }
                  }  // container rpc
                  leaf icmp {
                    type empty;
                    description
                      "Attack is for ICMP packets only";
                  }
                  leaf icmpv6 {
                    type empty;
                    description
                      "Attack is for ICMPv6 packets only";
                  }
                  container ip {
                    presence "enable ip";
                    description
                      "Attack is for all IP based packets";
                    uses apply-advanced;
    
                    leaf protocol-number {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 139";
                        }
                      }
                      description
                        "Transport layer protocol number";
                    }
                  }  // container ip
                  container ipv6 {
                    presence "enable ipv6";
                    description
                      "Attack is for all IPv6 based packets";
                    uses apply-advanced;
    
                    leaf protocol-number {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 139";
                        }
                      }
                      description
                        "Transport layer protocol number";
                    }
                  }  // container ipv6
                  leaf application {
                    type string;
                    description
                      "Application name";
                  }
                  leaf nested-application {
                    type string;
                    status deprecated;
                    description
                      "Nested application name";
                  }
                }  // choice protocol
              }  // container protocol-binding
    
              leaf scope {
                type enumeration {
                  enum "session" {
                    value 0;
                    description
                      "Allow matches across transactions within the same session";
                  }
                  enum "transaction" {
                    value 1;
                    description
                      "Allow matches in single transactions within the same session";
                  }
                }
                description
                  "Scope of the attack";
              }
    
              leaf order {
                type empty;
                description
                  "Attacks should match in the order in which they are defined";
              }
    
              leaf reset {
                type empty;
                description
                  "Repeat match should generate a new alert";
              }
    
              leaf expression {
                junos:must "(!(".. order"))";
                junos:must-message "Boolean Expression cannot be specified with order";
                type string;
                description
                  "Boolean Expression(or, and, oand). Multiple expressions can be combined using parenthesis.";
              }
    
              list member {
                key "name";
                ordered-by user;
                description
                  "List of member attacks.";
                uses chain-member-type;
              }  // list member
            }  // container chain
          }  // container attack-type
        }  // grouping custom-attack-type
    
        grouping chain-member-type {
          description "Chain member";
          leaf name {
            type string;
            description "Custom attack name";
          }
    
          uses apply-advanced;
    
          container attack-type {
            presence "enable attack-type";
            description "Type of attack";
            uses apply-advanced;
    
            container signature {
              junos:must "(!(".. anomaly"))";
              junos:must-message "Only one attack type is permitted";
              description
                "Signature based attack";
              uses apply-advanced;
    
              leaf context {
                type string;
                description "Context";
              }
    
              leaf pattern {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                type string {
                  length "0 .. 511";
                }
                description
                  "Pattern is the signature of the attack you want to detect";
              }
    
              leaf pattern-pcre {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                type string {
                  length "0 .. 511";
                }
                description
                  "Attack signature pattern in PCRE format";
              }
    
              container content {
                junos:must "(".. context")";
                junos:must-message "Context must be specified";
                description
                  "Mention the match-modifire parameters to enhance pattern matching";
                leaf pattern {
                  type string;
                  description
                    "Specify match-modifier pattern";
                }
    
                leaf pcre {
                  type string {
                    length "0 .. 511";
                  }
                  description "PCRE expression";
                }
    
                container depth {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum depth to search pattern within a packet. Depth is not relative";
                  leaf depth-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'depth'";
                  }
    
                  leaf depth-variable {
                    type string;
                    description
                      "Specify the variable name from which 'depth' should be extracted";
                  }
                }  // container depth
    
                container offset {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Where to start searching for a pattern within a packet. Offset value is not relative";
                  leaf offset-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "0 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'offset'";
                  }
    
                  leaf offset-variable {
                    type string;
                    description
                      "Specify the variable name from which 'offset' should be extracted";
                  }
                }  // container offset
    
                container within {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum Number of bytes present between two conjugative pattern match. within is  relative";
                  leaf within-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'within'";
                  }
    
                  leaf within-variable {
                    type string;
                    description
                      "Specify the variable name from which 'within' should be extracted";
                  }
                }  // container within
    
                container distance {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Maximum Length to ignore before searching next pattern match. Distance is  relative";
                  leaf distance-value {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "-65535 .. 65535";
                      }
                    }
                    description
                      "Specify the value of 'distance'";
                  }
    
                  leaf distance-variable {
                    type string;
                    description
                      "Specify the variable name from which 'distance' should be extracted";
                  }
                }  // container distance
    
                container byte-extract {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-extract parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  leaf offset {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the number of bytes in to payload to start processing";
                  }
    
                  leaf var-name {
                    type string;
                    description
                      "Specify the name of the variable to reference in other rule options";
                  }
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf multiplier {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the value to be multiplied against the bytes read";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf align {
                    type enumeration {
                      enum "2-byte" {
                        value 0;
                        description
                          "Round the number of converted bytes to 2-byte boundary";
                      }
                      enum "4-byte" {
                        value 1;
                        description
                          "Round the number of converted bytes to 4-byte boundary";
                      }
                    }
                    description
                      "Specify the byte alignment";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
                }  // container byte-extract
    
                container byte-test {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-test parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type int32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  container rvalue {
                    description
                      "Specify the rvalue to test the converted value against";
                    leaf rvalue-value {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the value";
                    }
    
                    leaf rvalue-variable {
                      type string;
                      description
                        "Specify the variable name";
                    }
                  }  // container rvalue
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf operator {
                    type enumeration {
                      enum "less-than" {
                        value 0;
                        description
                          "Perform operation 'less than'";
                      }
                      enum "greater-than" {
                        value 1;
                        description
                          "Perform operation 'greater than'";
                      }
                      enum "less-than-or-equal" {
                        value 2;
                        description
                          "Perform operation 'less than or equal'";
                      }
                      enum
                        "greater-than-or-equal" {
                        value 3;
                        description
                          "Perform operation 'greater than or equal'";
                      }
                      enum "equal" {
                        value 4;
                        description
                          "Perform operation 'equal'";
                      }
                      enum "bitwise-AND" {
                        value 5;
                        description
                          "Perform operation 'bitwise AND'";
                      }
                      enum "bitwise-XOR" {
                        value 6;
                        description
                          "Perform operation 'bitwise OR'";
                      }
                    }
                    description
                      "Specify the operation to perform on extracted value";
                  }
    
                  leaf negate {
                    type empty;
                    description
                      "Check if the operator is not true";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
                }  // container byte-test
    
                container byte-math {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-math parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  leaf offset {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "0 .. 65535";
                      }
                    }
                    description
                      "Specify the number of bytes in to payload to start processing";
                  }
    
                  container rvalue {
                    description
                      "Specify the value to use mathematical operation against";
                    leaf rvalue-value {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Specify the value";
                    }
    
                    leaf rvalue-variable {
                      type string;
                      description
                        "Specify the variable name";
                    }
                  }  // container rvalue
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf operator {
                    type enumeration {
                      enum "addition" {
                        value 0;
                        description
                          "Perform operation 'addition'";
                      }
                      enum "subtraction" {
                        value 1;
                        description
                          "Perform operation 'subtraction'";
                      }
                      enum "multiplication" {
                        value 2;
                        description
                          "Perform operation 'multiplication'";
                      }
                      enum "division" {
                        value 3;
                        description
                          "Perform operation 'division'";
                      }
                      enum "right-shift" {
                        value 4;
                        description
                          "Perform operation 'right shift'";
                      }
                      enum "left-shift" {
                        value 5;
                        description
                          "Perform operation 'left shift'";
                      }
                    }
                    description
                      "Specify the operation to perform on extracted value";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
    
                  leaf result {
                    type string;
                    description
                      "Specify the variable name to which result should be stored";
                  }
                }  // container byte-math
    
                container byte-jump {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the byte-jump parameters for signature in length encoded protocols";
                  leaf bytes {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10";
                      }
                    }
                    description
                      "Specify the number of bytes to extract from packet";
                  }
    
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "0 .. 65535";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf multiplier {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Specify the value to be multiplied against the bytes read";
                  }
    
                  leaf endianness {
                    type enumeration {
                      enum "Little" {
                        value 0;
                        description
                          "Process data in little endian";
                      }
                      enum "Big" {
                        value 1;
                        description
                          "Process data in big endian";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf align {
                    type enumeration {
                      enum "4-byte" {
                        value 0;
                        description
                          "Round the number of converted bytes to 4-byte boundary";
                      }
                    }
                    description
                      "Specify the endianness with which bytes read should be processed";
                  }
    
                  leaf string {
                    type enumeration {
                      enum "hex" {
                        value 0;
                        description
                          "Process data in hexadecimal format";
                      }
                      enum "dec" {
                        value 1;
                        description
                          "Process data in decimal format";
                      }
                      enum "oct" {
                        value 2;
                        description
                          "Process data in octal format";
                      }
                    }
                    description
                      "Specify the data type in which string data should be parsed";
                  }
    
                  leaf bitmask {
                    type string;
                    description
                      "Specify the bitmask (1-4 bytes) for AND operation in hexadecimal format";
                  }
    
                  leaf from-beginning {
                    type empty;
                    description
                      "Enable jump from the beginning of the payload";
                  }
    
                  leaf from-end {
                    type empty;
                    description
                      "Enable jump from the end of the payload";
                  }
    
                  leaf post-offset {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type int32 {
                        range "-65535 .. 65535";
                      }
                    }
                    description
                      "Specify the number of bytes to skip forward or backward";
                  }
                }  // container byte-jump
    
                container is-data-at {
                  junos:must "(".. pattern")";
                  junos:must-message "Content pattern must be specified";
                  description
                    "Mention the is-data-at parameters for signature in length encoded protocols";
                  container offset {
                    description
                      "Mention the offset variable name or offset value to be used";
                    leaf offset-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "0 .. 65535";
                        }
                      }
                      description
                        "Specify the number of bytes in to payload to start processing";
                    }
    
                    leaf offset-variable {
                      type string;
                      description
                        "Specify the name of the offset variable";
                    }
                  }  // container offset
    
                  leaf relative {
                    type empty;
                    description
                      "Specify whether to use an offset relative to last pattern match or not";
                  }
    
                  leaf negate {
                    type empty;
                    description
                      "Negates the results of the isdataat test";
                  }
                }  // container is-data-at
              }  // container content
    
              container optional-parameters {
                junos:must "(".. pattern-pcre")";
                junos:must-message "Applicable only for pattern-pcre defined signatures";
                description
                  "Mention the optional parameters to enhance pattern matching";
                leaf min-offset {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Minimum offset in data at which pattern-match can end";
                }
    
                leaf max-offset {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Maximum offset in data at which pattern-match can end";
                }
    
                leaf min-length {
                  type union {
                    type uint64;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Minimum match length required to match the pattern";
                }
    
                leaf edit-distance {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Match the pattern within this edit distance";
                }
    
                leaf hamming-distance {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Match the pattern within this hamming distance";
                }
              }  // container optional-parameters
    
              leaf regexp {
                junos:must "((".. pattern" || ".. pattern-pcre"))";
                junos:must-message "A pattern or pattern-pcre must be defined ";
                type string {
                  length "0 .. 511";
                }
                description
                  "Regular expression used for matching repetition of patterns";
              }
    
              leaf negate {
                junos:must "(!((".. context normalized-stream" || (".. context normalized-stream256" || (".. context normalized-stream1k" || ".. context normalized-stream8k")))))";
                junos:must-message "Negation not supported for normalized-stream contexts";
                junos:must "(!((".. context stream" || (".. context stream256" || (".. context stream1k" || ".. context stream8k")))))";
                junos:must-message "Negation not supported for stream contexts";
                type empty;
                description
                  "Trigger the attack if condition is not met";
              }
    
              leaf direction {
                type enumeration {
                  enum "client-to-server" {
                    value 0;
                    description
                      "Client to Server";
                  }
                  enum "server-to-client" {
                    value 1;
                    description
                      "Server to Client";
                  }
                  enum "any" {
                    value 2;
                    description "Any direction";
                  }
                }
                description
                  "Connection direction of the attack";
              }
    
              leaf shellcode {
                type enumeration {
                  enum "intel" {
                    value 0;
                    description
                      "Detect shellcode for intel platforms";
                  }
                  enum "sparc" {
                    value 1;
                    description
                      "Detect shellcode for sparc platforms";
                  }
                  enum "all" {
                    value 2;
                    description
                      "Detect shellcode for both intel and sparc platforms";
                  }
                  enum "no-shellcode" {
                    value 3;
                    description
                      "Do not detect shellcode";
                  }
                }
                description
                  "Specify shellcode flag for this attack";
              }
    
              container protocol {
                description
                  "Protocol header matches";
                uses apply-advanced;
    
                container ipv4 {
                  description
                    "IPv4 protocol parameters";
                  uses apply-advanced;
    
                  container tos {
                    presence "enable tos";
                    description
                      "Type of Service";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container tos
    
                  container ihl {
                    presence "enable ihl";
                    description
                      "Header length in words";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 15";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ihl
    
                  container total-length {
                    presence
                      "enable total-length";
                    description
                      "Total Length of IP datagram";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container total-length
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Fragment Identification";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container ip-flags {
                    presence "enable ip-flags";
                    description "IP Flag bits";
                    choice rb-choice {
                      leaf rb {
                        type empty;
                        description
                          "Reserved bit";
                      }
                      leaf no-rb {
                        type empty;
                        description
                          "Don't reserved bit";
                      }
                    }  // choice rb-choice
    
                    choice mf-choice {
                      leaf mf {
                        type empty;
                        description
                          "More Fragment bit";
                      }
                      leaf no-mf {
                        type empty;
                        description
                          "Don't more Fragment bit";
                      }
                    }  // choice mf-choice
    
                    choice df-choice {
                      leaf df {
                        type empty;
                        description
                          "Don't Fragment bit";
                      }
                      leaf no-df {
                        type empty;
                        description
                          "Don't don't Fragment bit";
                      }
                    }  // choice df-choice
                  }  // container ip-flags
    
                  container ttl {
                    presence "enable ttl";
                    description "Time to live";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ttl
    
                  container protocol {
                    presence "enable protocol";
                    description
                      "Transport layer protocol";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container protocol
    
                  container source {
                    presence "enable source";
                    description
                      "Source IP-address/Hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv4addr;
                      description "Match value";
                    }
                  }  // container source
    
                  container destination {
                    presence
                      "enable destination";
                    description
                      "Destination IP-address/Hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv4addr;
                      description "Match value";
                    }
                  }  // container destination
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container ipv4
    
                container ipv6 {
                  description
                    "IPv6 protocol parameters";
                  uses apply-advanced;
    
                  container traffic-class {
                    presence
                      "enable traffic-class";
                    description
                      "Traffic class. Similar to TOS in IPv4";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container traffic-class
    
                  container payload-length {
                    presence
                      "enable payload-length";
                    description
                      "Length of the payload in the IPv6 datagram";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container payload-length
    
                  container flow-label {
                    presence "enable flow-label";
                    description
                      "Flow label identification";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 1048575";
                        }
                      }
                      description "Match value";
                    }
                  }  // container flow-label
    
                  container hop-limit {
                    presence "enable hop-limit";
                    description "Hop limit";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container hop-limit
    
                  container next-header {
                    presence
                      "enable next-header";
                    description
                      "The header following the basic IPv6 header";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container next-header
    
                  container source {
                    presence "enable source";
                    description
                      "Source IP-address or hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv6addr;
                      description "Match value";
                    }
                  }  // container source
    
                  container destination {
                    presence
                      "enable destination";
                    description
                      "Destination IP-address or hostname";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type jt:ipv6addr;
                      description "Match value";
                    }
                  }  // container destination
    
                  container extension-header {
                    description
                      "IPv6 Extension headers";
                    uses apply-advanced;
    
                    container routing-header {
                      presence
                        "enable routing-header";
                      description
                        "IPv6 Routing extension header";
                      uses apply-advanced;
    
                      container header-type {
                        description
                          "Routing header type";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "0 .. 255";
                            }
                          }
                          description
                            "Match value";
                        }
                      }  // container header-type
                    }  // container routing-header
    
                    container destination-option {
                      description
                        "IPv6 Destination option extension header";
                      uses apply-advanced;
    
                      container option-type {
                        description
                          "Destination option header type";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "0 .. 255";
                            }
                          }
                          description
                            "Match value";
                        }
                      }  // container option-type
    
                      container home-address {
                        description
                          "IPv6 Home address of the mobile node";
                        uses apply-advanced;
    
                        leaf match {
                          type enumeration {
                            enum "equal" {
                              value 0;
                              description
                                "Match when value in packet is exact match";
                            }
                            enum "greater-than" {
                              value 1;
                              description
                                "Match when value in packet is greater";
                            }
                            enum "less-than" {
                              value 2;
                              description
                                "Match when value in packet is less";
                            }
                            enum "not-equal" {
                              value 3;
                              description
                                "Match when value in packet is not exact match";
                            }
                          }
                          description
                            "Match condition";
                        }
    
                        leaf value {
                          type jt:ipv6addr;
                          description
                            "Match value";
                        }
                      }  // container home-address
                    }  // container destination-option
                  }  // container extension-header
                }  // container ipv6
    
                container tcp {
                  junos:must "((!(".. udp") && !(".. icmp")))";
                  junos:must-message "tcp cannot be specified with udp or icmp";
                  description
                    "TCP protocol parameters";
                  uses apply-advanced;
    
                  container source-port {
                    presence
                      "enable source-port";
                    description "Source port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container source-port
    
                  container destination-port {
                    presence
                      "enable destination-port";
                    description
                      "Destination port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container destination-port
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "0 .. 4294967295";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container ack-number {
                    presence "enable ack-number";
                    description
                      "Acknowledgement Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range
                            "0 .. 4294967295";
                        }
                      }
                      description "Match value";
                    }
                  }  // container ack-number
    
                  container header-length {
                    presence
                      "enable header-length";
                    description
                      "Header Length in words";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 15";
                        }
                      }
                      description "Match value";
                    }
                  }  // container header-length
    
                  container reserved {
                    presence "enable reserved";
                    description
                      "Three reserved bits";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 7";
                        }
                      }
                      description "Match value";
                    }
                  }  // container reserved
    
                  container window-size {
                    presence
                      "enable window-size";
                    description "Window Size";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container window-size
    
                  container urgent-pointer {
                    presence
                      "enable urgent-pointer";
                    description "Urgent Pointer";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container urgent-pointer
    
                  container tcp-flags {
                    presence "enable tcp-flags";
                    description
                      "TCP header flags";
                    choice r1-choice {
                      leaf r1 {
                        type empty;
                        description
                          "Set Reserverd bit 1";
                      }
                      leaf no-r1 {
                        type empty;
                        description
                          "Don't set Reserverd bit 1";
                      }
                    }  // choice r1-choice
    
                    choice r2-choice {
                      leaf r2 {
                        type empty;
                        description
                          "Set Reserved bit 2";
                      }
                      leaf no-r2 {
                        type empty;
                        description
                          "Don't set Reserved bit 2";
                      }
                    }  // choice r2-choice
    
                    choice urg-choice {
                      leaf urg {
                        type empty;
                        description
                          "Set Urgent bit";
                      }
                      leaf no-urg {
                        type empty;
                        description
                          "Don't set Urgent bit";
                      }
                    }  // choice urg-choice
    
                    choice ack-choice {
                      leaf ack {
                        type empty;
                        description
                          "Set Acknowledge bit";
                      }
                      leaf no-ack {
                        type empty;
                        description
                          "Don't set Acknowledge bit";
                      }
                    }  // choice ack-choice
    
                    choice psh-choice {
                      leaf psh {
                        type empty;
                        description
                          "Set Push bit";
                      }
                      leaf no-psh {
                        type empty;
                        description
                          "Don't set Push bit";
                      }
                    }  // choice psh-choice
    
                    choice rst-choice {
                      leaf rst {
                        type empty;
                        description
                          "Set Reset bit";
                      }
                      leaf no-rst {
                        type empty;
                        description
                          "Don't set Reset bit";
                      }
                    }  // choice rst-choice
    
                    choice syn-choice {
                      leaf syn {
                        type empty;
                        description
                          "Set SYN bit";
                      }
                      leaf no-syn {
                        type empty;
                        description
                          "Don't set SYN bit";
                      }
                    }  // choice syn-choice
    
                    choice fin-choice {
                      leaf fin {
                        type empty;
                        description
                          "Set FINish bit";
                      }
                      leaf no-fin {
                        type empty;
                        description
                          "Don't set FINish bit";
                      }
                    }  // choice fin-choice
                  }  // container tcp-flags
    
                  container option {
                    presence "enable option";
                    description "Kind";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container option
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by TCP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "2 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container window-scale {
                    presence
                      "enable window-scale";
                    description "Window scale";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container window-scale
    
                  container mss {
                    presence "enable mss";
                    description
                      "Maximum Segment Size";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container mss
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container tcp
    
                container udp {
                  junos:must "((!(".. tcp") && !(".. icmp")))";
                  junos:must-message "udp cannot be specified with tcp or icmp";
                  description
                    "UDP protocol parameters";
                  uses apply-advanced;
    
                  container source-port {
                    presence
                      "enable source-port";
                    description "Source port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container source-port
    
                  container destination-port {
                    presence
                      "enable destination-port";
                    description
                      "Destination port";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container destination-port
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by UDP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container udp
    
                container icmp {
                  junos:must "((!(".. udp") && (!(".. tcp") && !(".. icmpv6"))))";
                  junos:must-message "icmp cannot be specified with tcp or udp or icmpv6";
                  description
                    "ICMP protocol parameters";
                  uses apply-advanced;
    
                  container type {
                    presence "enable type";
                    description "Type";
                    uses apply-advanced;
    
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container type
    
                  container code {
                    presence "enable code";
                    description "Code";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container code
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Identifier in echo request/reply";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence Number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IP datagram subtracted by ICMP header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container icmp
    
                container icmpv6 {
                  junos:must "((!(".. udp") && (!(".. tcp") && !(".. icmp"))))";
                  junos:must-message "icmpv6 cannot be specified with tcp or udp or icmp";
                  description
                    "ICMPv6 protocol parameters";
                  uses apply-advanced;
    
                  container type {
                    presence "enable type";
                    description "Type";
                    uses apply-advanced;
    
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container type
    
                  container code {
                    presence "enable code";
                    description "Code";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container code
    
                  container identification {
                    presence
                      "enable identification";
                    description
                      "Identifier in echo request/reply";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container identification
    
                  container sequence-number {
                    presence
                      "enable sequence-number";
                    description
                      "Sequence number";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      description "Match value";
                    }
                  }  // container sequence-number
    
                  container data-length {
                    presence
                      "enable data-length";
                    description
                      "Size of IPv6 datagram subtracted by ICMPv6 header length";
                    leaf match {
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when value in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when value in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when value in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when value in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description "Match value";
                    }
                  }  // container data-length
    
                  container checksum-validate {
                    presence
                      "enable checksum-validate";
                    description
                      "Validate checksum field against calculated checksum";
                    leaf match {
                      junos:must "(".. value")";
                      junos:must-message "Missing mandatory statement: 'value'";
                      type enumeration {
                        enum "equal" {
                          value 0;
                          description
                            "Match when checksum field in packet is exact match";
                        }
                        enum "greater-than" {
                          value 1;
                          description
                            "Match when checksum field in packet is greater";
                        }
                        enum "less-than" {
                          value 2;
                          description
                            "Match when checksum field in packet is less";
                        }
                        enum "not-equal" {
                          value 3;
                          description
                            "Match when checksum field in packet is not exact match";
                        }
                      }
                      description
                        "Match condition";
                    }
    
                    leaf value {
                      junos:must "(".. match")";
                      junos:must-message "Missing mandatory statement: 'match'";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 65535";
                        }
                      }
                      default "0";
                      description "Match value";
                    }
                  }  // container checksum-validate
                }  // container icmpv6
              }  // container protocol
            }  // container signature
    
            container anomaly {
              junos:must "(!(".. signature"))";
              junos:must-message "Only one attack type is permitted";
              description "Protocol anomaly";
              uses apply-advanced;
    
              leaf test {
                type string;
                description
                  "Protocol anomaly condition to be checked";
              }
    
              leaf direction {
                type enumeration {
                  enum "client-to-server" {
                    value 0;
                    description
                      "From Client to Server";
                  }
                  enum "server-to-client" {
                    value 1;
                    description
                      "From Server to Client";
                  }
                  enum "any" {
                    value 2;
                    description "Any direction";
                  }
                }
                description "Direction";
              }
    
              leaf shellcode {
                type enumeration {
                  enum "intel" {
                    value 0;
                    description
                      "Detect shellcode for intel platforms";
                  }
                  enum "sparc" {
                    value 1;
                    description
                      "Detect shellcode for sparc platforms";
                  }
                  enum "all" {
                    value 2;
                    description
                      "Detect shellcode for both intel and sparc platforms";
                  }
                  enum "no-shellcode" {
                    value 3;
                    description
                      "Do not detect shellcode";
                  }
                }
                description
                  "Specify shellcode flag for this attack";
              }
            }  // container anomaly
          }  // container attack-type
        }  // grouping chain-member-type
    
        grouping custom-message-type {
          description
            "Configure custom-message object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 59";
            }
            description
              "Configure name of custom-message object";
          }
    
          uses apply-advanced;
    
          leaf type {
            type enumeration {
              enum "redirect-url" {
                value 0;
                description "Redirect URL";
              }
              enum "user-message" {
                value 1;
                description "User message";
              }
              enum "custom-page" {
                value 2;
                description "Customer page";
              }
            }
            description "Type of custom message";
          }
    
          choice contents {
            leaf content {
              type string {
                length "1 .. 1024";
              }
              description
                "Content of custom message";
            }
            leaf custom-page-file {
              type string {
                length "1 .. 64";
              }
              description
                "Name of custom page file";
            }
          }  // choice contents
        }  // grouping custom-message-type
    
        grouping default-anti-spam-feature {
          description "Anti-spam feature";
          uses apply-advanced;
    
          leaf type {
            type enumeration {
              enum "sbl" {
                value 0;
                description
                  "Anti-spam sophos sbl";
              }
              enum "anti-spam-none" {
                value 1;
              }
            }
            description "Anti-spam type";
          }
    
          leaf address-whitelist {
            junos:must "("security utm custom-objects url-pattern $$")";
            junos:must-message "url-pattern must be defined";
            type string;
            description "Anti-spam whitelist";
          }
    
          leaf address-blacklist {
            junos:must "("security utm custom-objects url-pattern $$")";
            junos:must-message "url-pattern must be defined";
            type string;
            description "Anti-spam blacklist";
          }
    
          container traceoptions {
            description
              "Trace options for anti-spam feature";
            uses anti-spam-traceoptions;
          }  // container traceoptions
    
          container sbl {
            presence "enable sbl";
            description "SBL settings";
            uses default-sbl-type;
          }  // container sbl
        }  // grouping default-anti-spam-feature
    
        grouping anti-spam-traceoptions {
          description
            "Trace options for anti-spam  feature";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Trace options for anti-spam feature flag";
            leaf name {
              type enumeration {
                enum "manager" {
                  value 0;
                  description
                    "Trace anti-spam manager information";
                }
                enum "sbl" {
                  value 1;
                  description
                    "Trace SBL server information";
                }
                enum "all" {
                  value 2;
                  description
                    "Enable trace all anti-spam trace options";
                }
              }
              description
                "Trace options for anti-spam feature flag name";
            }
          }  // list flag
        }  // grouping anti-spam-traceoptions
    
        grouping default-anti-virus-feature {
          description "Anti-virus feature";
          uses apply-advanced;
    
          container mime-whitelist {
            description
              "Anti-virus MIME whitelist";
            uses apply-advanced;
    
            leaf list {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description "MIME list";
            }
    
            leaf exception {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description
                "Exception settings for MIME white list";
            }
          }  // container mime-whitelist
    
          leaf url-whitelist {
            type string;
            description
              "Anti-virus URL white list";
          }
    
          leaf type {
            type enumeration {
              enum "sophos-engine" {
                value 0;
                description
                  "Anti-virus sophos-engine";
              }
              enum "avira-engine" {
                value 1;
                description
                  "Anti-virus avira-engine";
              }
              enum "anti-virus-none" {
                value 2;
              }
            }
            default "anti-virus-none";
            description "Anti-virus engine type";
          }
    
          container forwarding-mode {
            description
              "Anti-virus forwarding mode";
            uses apply-advanced;
    
            leaf hold {
              type empty;
              description
                "Hold mode (hold file until analysis is complete, default is CDF mode)";
            }
    
            leaf inline-tap {
              type empty;
              description
                "Detect-only mode without blocking (default is off)";
            }
          }  // container forwarding-mode
    
          container scan-options {
            presence "enable scan-options";
            description
              "Anti-virus scan options";
            uses apply-advanced;
    
            choice pre-detection-choice {
              leaf pre-detection {
                type empty;
                description
                  "Anti-virus Pre-Detection";
              }
              leaf no-pre-detection {
                type empty;
                description
                  "Don't anti-virus Pre-Detection";
              }
            }  // choice pre-detection-choice
    
            choice uri-check-choice {
              leaf uri-check {
                type empty;
                description
                  "Anti-virus uri-check";
              }
              leaf no-uri-check {
                type empty;
                description
                  "Don't anti-virus uri-check";
              }
            }  // choice uri-check-choice
    
            leaf content-size-limit {
              type string;
              units "kilobytes";
              description "Content size limit";
            }
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              description "Scan engine timeout";
            }
    
            leaf decompress-layer-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 10";
                }
              }
              description
                "Decompress layer limit";
            }
          }  // container scan-options
    
          container trickling {
            presence "enable trickling";
            description "Anti-virus trickling";
            uses anti-virus-trickling;
          }  // container trickling
    
          container notification-options {
            presence
              "enable notification-options";
            description
              "Anti-virus notification options";
            uses anti-virus-notification-options;
          }  // container notification-options
    
          container fallback-options {
            presence "enable fallback-options";
            description
              "Anti-virus fallback options";
            uses av-fallback-settings;
          }  // container fallback-options
    
          container traceoptions {
            description
              "Trace options for anti-virus feature";
            uses anti-virus-traceoptions;
          }  // container traceoptions
    
          container avira-engine {
            description
              "Anti-virus Avira-engine";
            uses apply-advanced;
    
            container pattern-update {
              presence "enable pattern-update";
              description
                "Anti-virus avira-engine pattern update";
              uses anti-virus-pattern-update;
            }  // container pattern-update
          }  // container avira-engine
    
          container sophos-engine {
            description
              "Anti-virus sophos-engine";
            uses apply-advanced;
    
            container server {
              description
                "SAV and Anti-Spam first hop DNS server";
              uses apply-advanced;
    
              leaf ip {
                type jt:ipaddr;
                description
                  "SAV and Anti-Spam first hop DNS server ip";
              }
    
              leaf routing-instance {
                junos:must "("routing-instances $$")";
                junos:must-message "Routing-instance must be defined";
                type string;
                description
                  "Routing instance name";
              }
    
              leaf source-address {
                type jt:ipaddr;
                description
                  "Source ip address used to connect server";
              }
            }  // container server
    
            leaf sxl-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 5";
                }
              }
              units "seconds";
              default "2";
              description
                "Sxl sophos anti-virus engine timeout";
            }
    
            leaf sxl-retry {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 5";
                }
              }
              default "1";
              description
                "Sxl sophos anti-virus engine query retry (number of times)";
            }
    
            container pattern-update {
              presence "enable pattern-update";
              description
                "Anti-virus sophos-engine pattern update";
              uses anti-virus-pattern-update;
            }  // container pattern-update
    
            container fallback-options {
              presence "enable fallback-options";
              status deprecated;
              description
                "Anti-virus sophos-engine fallback options";
              uses av-fallback-settings;
            }  // container fallback-options
    
            container scan-options {
              presence "enable scan-options";
              status deprecated;
              description
                "Anti-virus sophos-engine scan options";
              uses default-sophos-scan-options;
            }  // container scan-options
    
            container trickling {
              presence "enable trickling";
              status deprecated;
              description "Anti-virus trickling";
              uses anti-virus-trickling;
            }  // container trickling
    
            container notification-options {
              presence
                "enable notification-options";
              status deprecated;
              description
                "Anti-virus notification options";
              uses anti-virus-notification-options;
            }  // container notification-options
          }  // container sophos-engine
        }  // grouping default-anti-virus-feature
    
        grouping default-content-filtering-feature {
          description
            "Content-filtering feature";
          uses apply-advanced;
    
          leaf type {
            type enumeration {
              enum "local" {
                value 0;
                description
                  "Content-filtering local";
              }
              enum "content-filtering-none" {
                value 1;
              }
            }
            default "local";
            description "Content-filtering type";
          }
    
          container traceoptions {
            description
              "Trace options for content-filtering feature";
            uses content-filtering-traceoptions;
          }  // container traceoptions
    
          leaf permit-command {
            junos:must "("security utm custom-objects protocol-command $$")";
            junos:must-message "protocol-command must be defined";
            type string;
            description "Permit command list";
          }
    
          leaf block-command {
            junos:must "("security utm custom-objects protocol-command $$")";
            junos:must-message "protocol-command must be defined";
            type string;
            description "Block command list";
          }
    
          leaf block-extension {
            junos:must "("security utm custom-objects filename-extension $$")";
            junos:must-message "filename-extension must be defined";
            type string;
            description "Block extension list";
          }
    
          container block-mime {
            presence "enable block-mime";
            description
              "Content-filtering feature block MIME";
            uses apply-advanced;
    
            leaf list {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description "Block MIME list";
            }
    
            leaf exception {
              junos:must "("security utm custom-objects mime-pattern $$")";
              junos:must-message "mime-pattern must be defined";
              type string;
              description
                "Exception of block MIME list";
            }
          }  // container block-mime
    
          container block-content-type {
            description
              "Content-filtering feature block content type";
            uses apply-advanced;
    
            leaf activex {
              type empty;
              description "Block activex";
            }
    
            leaf java-applet {
              type empty;
              description "Block Java-applet";
            }
    
            leaf exe {
              type empty;
              description
                "Block Windows/dos exe file";
            }
    
            leaf zip {
              type empty;
              description "Block zip file";
            }
    
            leaf http-cookie {
              type empty;
              description "Block HTTP cookie";
            }
          }  // container block-content-type
    
          container notification-options {
            presence
              "enable notification-options";
            description "Notification options";
            uses apply-advanced;
    
            leaf type {
              type enumeration {
                enum "protocol-only" {
                  value 0;
                  description
                    "Notification in protocol level";
                }
                enum "message" {
                  value 1;
                  description
                    "Notification in message";
                }
              }
              description
                "Notification options type";
            }
    
            choice notify-mail-sender-choice {
              leaf notify-mail-sender {
                type empty;
                description
                  "Notifiy mail sender";
              }
              leaf no-notify-mail-sender {
                type empty;
                description
                  "Don't notifiy mail sender";
              }
            }  // choice notify-mail-sender-choice
    
            leaf custom-message {
              type string {
                length "1 .. 512";
              }
              description
                "Custom notification message";
            }
          }  // container notification-options
        }  // grouping default-content-filtering-feature
    
        grouping content-filtering-traceoptions {
          description
            "Trace options for content-filtering feature";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Trace options for content-filtering feature flag";
            leaf name {
              type enumeration {
                enum "basic" {
                  value 0;
                  description
                    "Trace content-filtering basic information";
                }
                enum "detail" {
                  value 1;
                  description
                    "Trace content-filtering detail information";
                }
                enum "all" {
                  value 2;
                  description
                    "Enable trace all content-filtering trace options";
                }
              }
              description
                "Trace options for content-filtering feature flag name";
            }
          }  // list flag
        }  // grouping content-filtering-traceoptions
    
        grouping default-sbl-type {
          description "SBL type";
          uses apply-advanced;
    
          choice sbl-default-server-choice {
            leaf sbl-default-server {
              type empty;
              description "Default SBL server";
            }
            leaf no-sbl-default-server {
              type empty;
              description
                "Don't default SBL server";
            }
          }  // choice sbl-default-server-choice
    
          leaf spam-action {
            type enumeration {
              enum "block" {
                value 0;
                description "Block e-mail";
              }
              enum "tag-header" {
                value 1;
                description
                  "Tag header of e-mail";
              }
              enum "tag-subject" {
                value 2;
                description
                  "Tag subject of e-mail";
              }
            }
            default "tag-subject";
            description "Anti-spam actions";
          }
    
          leaf custom-tag-string {
            type string {
              length "1 .. 512";
            }
            description "Custom tag string";
          }
        }  // grouping default-sbl-type
    
        grouping default-sophos-scan-options {
          description "Anti-virus scan options";
          uses apply-advanced;
    
          choice uri-check-choice {
            leaf uri-check {
              type empty;
              description "Anti-virus uri-check";
            }
            leaf no-uri-check {
              type empty;
              description
                "Don't anti-virus uri-check";
            }
          }  // choice uri-check-choice
    
          leaf content-size-limit {
            type string;
            units "kilobytes";
            default "10000";
            description "Content size limit";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1800";
              }
            }
            units "seconds";
            description "Scan engine timeout";
          }
        }  // grouping default-sophos-scan-options
    
        grouping default-webfilter-feature {
          description
            "Web-filtering feature settings";
          uses apply-advanced;
    
          leaf url-whitelist {
            type string;
            description
              "Configure custom URL for whitelist category";
          }
    
          leaf url-blacklist {
            type string;
            description
              "Configure custom URL for blacklist category";
          }
    
          leaf http-reassemble {
            type empty;
            description
              "Reassemble HTTP request segments";
          }
    
          leaf http-persist {
            type empty;
            description
              "Check all HTTP request in a connection";
          }
    
          leaf type {
            type enumeration {
              enum "websense-redirect" {
                value 0;
              }
              enum "juniper-local" {
                value 1;
              }
              enum "juniper-enhanced" {
                value 2;
              }
              enum "web-filtering-none" {
                value 3;
              }
            }
            default "web-filtering-none";
            description
              "Configure web-filtering engine type";
          }
    
          container traceoptions {
            description
              "Trace options for web-filtering feature";
            uses web-filtering-traceoptions;
          }  // container traceoptions
    
          container websense-redirect {
            description
              "Configure web-filtering websense redirect engine";
            uses default-websense-type;
          }  // container websense-redirect
    
          container juniper-local {
            description
              "Configure web-filtering juniper local engine";
            uses default-juniper-local-type;
          }  // container juniper-local
    
          container juniper-enhanced {
            description
              "Configure web-filtering juniper enhanced engine";
            uses default-juniper-enhanced-type;
          }  // container juniper-enhanced
        }  // grouping default-webfilter-feature
    
        grouping default-juniper-enhanced-type {
          description "Juniper Enhanced";
          uses apply-advanced;
    
          container cache {
            presence "enable cache";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "minutes";
              default "1440";
              description
                "Juniper enhanced cache timeout";
            }
    
            leaf size {
              type string;
              units "kilobytes";
              default "1024";
              description
                "Juniper enhanced cache size";
            }
          }  // container cache
    
          container server {
            presence "enable server";
            description
              "Juniper enhanced server";
            uses juniper-enhanced-server;
          }  // container server
    
          container reputation {
            presence "enable reputation";
            description
              "Customize reputation level";
            uses apply-advanced;
    
            leaf reputation-very-safe {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "90";
              description
                "Base-reputation-value (default 90)";
            }
    
            leaf reputation-moderately-safe {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "80";
              description
                "Base-reputation-value (default 80)";
            }
    
            leaf reputation-fairly-safe {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "70";
              description
                "Base-reputation-value (default 70)";
            }
    
            leaf reputation-suspicious {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100";
                }
              }
              default "60";
              description
                "Base-reputation-value (default 60)";
            }
          }  // container reputation
    
          leaf query-type {
            type enumeration {
              enum "url-ip" {
                value 0;
                description
                  "Query category by URL and IP address";
              }
              enum "url" {
                value 1;
                description
                  "Query category by URL only";
              }
            }
            description
              "Juniper enhanced query type";
          }
    
          leaf base-filter {
            type string;
            description "Juniper base filter";
          }
    
          list category {
            key "name";
            ordered-by user;
            description
              "Juniper enhanced category";
            uses juniper-enhanced-category-type;
          }  // list category
    
          container site-reputation-action {
            presence
              "enable site-reputation-action";
            description
              "Juniper enhanced site reputation action";
            uses juniper-enhanced-site-reputation-setting;
          }  // container site-reputation-action
    
          leaf default {
            type enumeration {
              enum "permit" {
                value 0;
                description "Permit action";
              }
              enum "block" {
                value 1;
                description "Block action";
              }
              enum "log-and-permit" {
                value 2;
                description
                  "Log and permit action";
              }
              enum "quarantine" {
                value 3;
                description "Quarantine action";
              }
            }
            description
              "Juniper enhanced profile default";
          }
    
          leaf custom-message {
            junos:must "("security utm custom-objects custom-message $$")";
            junos:must-message "custom-message must be defined";
            type string;
            description "Custom message";
          }
    
          container fallback-settings {
            presence "enable fallback-settings";
            description
              "Juniper enhanced fallback settings";
            uses web-filtering-fallback-setting;
          }  // container fallback-settings
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            default "15";
            description
              "Juniper enhanced timeout";
          }
    
          leaf no-safe-search {
            type empty;
            description
              "Do not perform safe-search for Juniper enhanced protocol";
          }
        }  // grouping default-juniper-enhanced-type
    
        grouping default-juniper-local-type {
          description "Juniper local";
          uses apply-advanced;
    
          leaf default {
            type enumeration {
              enum "permit" {
                value 0;
                description "Permit action";
              }
              enum "block" {
                value 1;
                description "Block action";
              }
              enum "log-and-permit" {
                value 2;
                description
                  "Log and permit action";
              }
            }
            description
              "Juniper local profile default";
          }
    
          list category {
            key "name";
            ordered-by user;
            description "Custom category";
            uses custom-category-type;
          }  // list category
    
          leaf custom-message {
            junos:must "("security utm custom-objects custom-message $$")";
            junos:must-message "custom-message must be defined";
            type string;
            description "Custom message";
          }
    
          leaf no-safe-search {
            type empty;
            description
              "Do not perform safe-search for Juniper local protocol";
          }
    
          container fallback-settings {
            presence "enable fallback-settings";
            description
              "Juniper local fallback settings";
            uses web-filtering-fallback-setting;
          }  // container fallback-settings
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1800";
              }
            }
            units "seconds";
            default "15";
            description "Juniper local timeout";
          }
        }  // grouping default-juniper-local-type
    
        grouping custom-category-type {
          description "Custom category type";
          leaf name {
            junos:must "("security utm custom-objects custom-url-category $$")";
            junos:must-message "custom-url-category must be defined";
            type string {
              length "1 .. 59";
            }
            description
              "Name of custom category";
          }
    
          uses apply-advanced;
    
          leaf action {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action to perform when web traffic matches category";
          }
    
          leaf custom-message {
            junos:must "("security utm custom-objects custom-message $$")";
            junos:must-message "custom-message must be defined";
            type string;
            description "Custom message";
          }
        }  // grouping custom-category-type
    
        grouping default-websense-type {
          description "Websense redirect";
          uses apply-advanced;
    
          container server {
            presence "enable server";
            description
              "Websense redirect server";
            uses server;
          }  // container server
    
          list category {
            key "name";
            ordered-by user;
            description "Custom category";
            uses custom-category-type;
          }  // list category
    
          leaf custom-message {
            junos:must "("security utm custom-objects custom-message $$")";
            junos:must-message "custom-message must be defined";
            type string;
            description "Custom message";
          }
    
          leaf no-safe-search {
            type empty;
            description
              "Do not perform safe-search for websense redirect protocol";
          }
    
          container fallback-settings {
            presence "enable fallback-settings";
            description
              "Websense redirect fallback settings";
            uses web-filtering-fallback-setting;
          }  // container fallback-settings
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1800";
              }
            }
            units "seconds";
            default "15";
            description
              "Websense redirect timeout";
          }
    
          leaf sockets {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 32";
              }
            }
            default "32";
            description
              "Websense redirect sockets number";
          }
    
          leaf account {
            type string {
              length "1 .. 28";
            }
            description
              "Websense redirect account";
          }
        }  // grouping default-websense-type
    
        grouping dnsf-traceoptions-object {
          description
            "URL filtering 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
    
          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 flag parameters";
            leaf name {
              type enumeration {
                enum "normal" {
                  value 0;
                  description
                    "Trace normal events";
                }
                enum "config" {
                  value 1;
                  description
                    "Trace dns filtering config events";
                }
                enum "dns" {
                  value 2;
                  description
                    "Trace url filtering DNS crawler events";
                }
                enum "timer" {
                  value 3;
                  description
                    "Trace url filtering timer events";
                }
                enum "connect" {
                  value 4;
                  description
                    "Trace url filtering ipc events";
                }
                enum "parse" {
                  value 5;
                  description
                    "Trace url filtering parse events";
                }
                enum "statistics" {
                  value 6;
                  description
                    "Trace url filtering statistics events";
                }
                enum "system" {
                  value 7;
                  description
                    "Trace url filtering system events";
                }
                enum "operational-commands" {
                  value 8;
                  description
                    "Trace url filtering show events";
                }
                enum "filter" {
                  value 9;
                  description
                    "Trace url filtering filter programming events";
                }
                enum "gencfg" {
                  value 10;
                  description
                    "Trace url filtering gencfg events";
                }
                enum "routing" {
                  value 11;
                  description
                    "Trace url filtering route programming events";
                }
                enum "snmp" {
                  value 12;
                  description
                    "Trace url filtering snmp events";
                }
                enum "all" {
                  value 13;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
        }  // grouping dnsf-traceoptions-object
    
        grouping dynamic-attack-group-type {
          description
            "Define dynamic attack group";
          leaf name {
            type string;
            description
              "Name of the dynamic attack group";
          }
    
          uses apply-advanced;
    
          leaf attack-group-description {
            type string;
            status deprecated;
            description
              "Filter name/value in xml format";
          }
    
          container filters {
            description "Configure filters";
            uses apply-advanced;
    
            container direction {
              presence "enable direction";
              description "Direction of attack";
              uses apply-advanced;
    
              leaf expression {
                type enumeration {
                  enum "and" {
                    value 0;
                    description
                      "AND values together (recommended if 'exclude-*' values are set)";
                  }
                  enum "or" {
                    value 1;
                    description
                      "OR values together";
                  }
                }
                default "or";
                description
                  "Boolean AND/OR to be used for values";
              }
    
              leaf-list values {
                type enumeration {
                  enum "client-to-server" {
                    value 0;
                    description
                      "Select attacks from client to server";
                  }
                  enum "server-to-client" {
                    value 1;
                    description
                      "Select attacks from server to client";
                  }
                  enum "any" {
                    value 2;
                    description
                      "Select attacks which can occur in either direction";
                  }
                  enum
                    "exclude-client-to-server" {
                    value 3;
                    description
                      "Filter out attacks from client to server";
                  }
                  enum
                    "exclude-server-to-client" {
                    value 4;
                    description
                      "Filter out attacks from server to client";
                  }
                  enum "exclude-any" {
                    value 5;
                    description
                      "Filter out attacks which occur in either direction";
                  }
                }
                ordered-by user;
                description
                  "Values for direction field";
              }
            }  // container direction
    
            container severity {
              presence "enable severity";
              description "Severity of attack";
              uses apply-advanced;
    
              leaf-list values {
                type enumeration {
                  enum "info" {
                    value 0;
                    description
                      "Provide information of attack when it matches.";
                  }
                  enum "warning" {
                    value 1;
                    description
                      "Issue a warning when attack matches.";
                  }
                  enum "minor" {
                    value 2;
                    description
                      "The attack is a minor one.";
                  }
                  enum "major" {
                    value 3;
                    description
                      "The attack is a major one.";
                  }
                  enum "critical" {
                    value 4;
                    description
                      "The attack is a critical one.";
                  }
                }
                ordered-by user;
                description
                  "Values for severity field";
              }
            }  // container severity
    
            container type {
              presence "enable type";
              description "Type of attack";
              uses apply-advanced;
    
              leaf-list values {
                type enumeration {
                  enum "signature" {
                    value 0;
                    description
                      "Signature based attacks";
                  }
                  enum "anomaly" {
                    value 1;
                    description
                      "Protocol anomalies";
                  }
                }
                ordered-by user;
                description
                  "Values for type field";
              }
            }  // container type
    
            choice recommended-choice {
              leaf recommended {
                type empty;
                description "Recommended flag";
              }
              leaf no-recommended {
                type empty;
                description
                  "Don't recommended flag";
              }
            }  // choice recommended-choice
    
            container performance {
              presence "enable performance";
              description
                "Performance of attack";
              uses apply-advanced;
    
              leaf-list values {
                type enumeration {
                  enum "unknown" {
                    value 0;
                    description
                      "Performance level unknown";
                  }
                  enum "fast" {
                    value 1;
                    description
                      "Fast performance";
                  }
                  enum "normal" {
                    value 2;
                    description
                      "Normal performance";
                  }
                  enum "slow" {
                    value 3;
                    description
                      "Slow performance";
                  }
                }
                ordered-by user;
                description
                  "Values for performance field";
              }
            }  // container performance
    
            container category {
              presence "enable category";
              description "Category of attack";
              uses apply-advanced;
    
              leaf-list values {
                type string;
                ordered-by user;
                description
                  "Values for category field";
              }
            }  // container category
    
            container service {
              presence "enable service";
              description
                "Service/Application of attack";
              uses apply-advanced;
    
              leaf-list values {
                type string;
                ordered-by user;
                description
                  "Values for service field";
              }
            }  // container service
    
            container false-positives {
              presence "enable false-positives";
              description
                "False positive field in attack";
              uses apply-advanced;
    
              leaf-list values {
                type enumeration {
                  enum "unknown" {
                    value 0;
                    description
                      "Unknown information";
                  }
                  enum "rarely" {
                    value 1;
                    description
                      "Rare false positives occurrence";
                  }
                  enum "occasionally" {
                    value 2;
                    description
                      "Ocassional false positives occurrence";
                  }
                  enum "frequently" {
                    value 3;
                    description
                      "Frequent false positives occurrence";
                  }
                }
                ordered-by user;
                description
                  "Values for false-positives field";
              }
            }  // container false-positives
    
            list vendor {
              key "name";
              ordered-by user;
              description
                "Vendor/Product the attack belongs to";
              uses vendor-object;
            }  // list vendor
    
            container file-type {
              presence "enable file-type";
              description
                "File type the attack is valid for";
              uses apply-advanced;
    
              leaf-list values {
                type string;
                ordered-by user;
                description
                  "Values for file-type field";
              }
            }  // container file-type
    
            container vulnerability-type {
              presence
                "enable vulnerability-type";
              description
                "Vulnariability type of attack";
              uses apply-advanced;
    
              leaf-list values {
                type string;
                ordered-by user;
                description
                  "Values for vulnariability-type field";
              }
            }  // container vulnerability-type
    
            choice excluded-choice {
              leaf excluded {
                type empty;
                description "Excluded Attacks";
              }
              leaf no-excluded {
                type empty;
                description
                  "Don't excluded Attacks";
              }
            }  // choice excluded-choice
    
            container attack-prefix {
              presence "enable attack-prefix";
              description
                "Prefix match for attack names";
              uses apply-advanced;
    
              leaf-list values {
                type string;
                ordered-by user;
                description
                  "Values for attack name prefix match";
              }
            }  // container attack-prefix
    
            list cvss-score {
              key "name";
              ordered-by user;
              description
                "CVSS score of Attack ";
              leaf name {
                type enumeration {
                  enum "greater-than" {
                    value 0;
                    description
                      "Match when cvss score is greater";
                  }
                  enum "less-than" {
                    value 1;
                    description
                      "Match when cvss score is less";
                  }
                }
                description
                  "Match condition of CVSS score";
              }
    
              uses apply-advanced;
    
              leaf value {
                junos:must "(".. value")";
                junos:must-message "Missing mandatory statement: 'value'";
                type decimal64 {
                  fraction-digits 9;
                  range "0 .. 10";
                }
                description "Match value";
              }
            }  // list cvss-score
    
            list age-of-attack {
              key "name";
              ordered-by user;
              description "Age of an Attack ";
              leaf name {
                type enumeration {
                  enum "greater-than" {
                    value 0;
                    description
                      "Match when Age of Attack is greater";
                  }
                  enum "less-than" {
                    value 1;
                    description
                      "Match when Age of Attack is less";
                  }
                }
                description
                  "Match condition of Age of Attack";
              }
    
              uses apply-advanced;
    
              leaf value {
                junos:must "(".. value")";
                junos:must-message "Missing mandatory statement: 'value'";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description "Match value";
              }
            }  // list age-of-attack
          }  // container filters
        }  // grouping dynamic-attack-group-type
    
        grouping e2e-action-profile {
          leaf name {
            type string {
              length "1 .. 64";
            }
            description
              "Name of the action profile";
          }
    
          uses apply-advanced;
    
          leaf preserve-trace-order {
            type empty;
            description
              "Preserve trace order (has performance overhead)";
          }
    
          leaf record-pic-history {
            type empty;
            description
              "Record the PIC(s) in which the packet has been processed";
          }
    
          list event {
            key "name";
            ordered-by user;
            uses e2e-event;
          }  // list event
    
          list module {
            key "name";
            ordered-by user;
            uses e2e-module;
          }  // list module
        }  // grouping e2e-action-profile
    
        grouping e2e-event {
          leaf name {
            type enumeration {
              enum "np-ingress" {
                value 0;
                description "NP ingress";
              }
              enum "np-egress" {
                value 1;
                description "NP egress";
              }
              enum "mac-ingress" {
                value 2;
                description
                  "SRX1K/3K IOC Mac ingress";
              }
              enum "mac-egress" {
                value 3;
                description
                  "SRX1K/3K IOC Mac egress";
              }
              enum "lbt" {
                value 4;
                description
                  "Load-Balance-Thread";
              }
              enum "pot" {
                value 5;
                description
                  "Packet-Order-Thread";
              }
              enum "jexec" {
                value 6;
                description "JExec";
              }
              enum "lt-enter" {
                value 7;
                description
                  "LT(Logical Tunnel) enter";
              }
              enum "lt-leave" {
                value 8;
                description
                  "LT(Logical Tunnel) leave";
              }
            }
            description "Name of the event";
          }
    
          uses apply-advanced;
    
          leaf trace {
            type empty;
            description "Trace action";
          }
    
          leaf count {
            type empty;
            description "Count action";
          }
    
          leaf packet-summary {
            type empty;
            description "Packet summary action";
          }
    
          leaf packet-dump {
            type empty;
            description "Packet dump action";
          }
        }  // grouping e2e-event
    
        grouping e2e-module {
          leaf name {
            type enumeration {
              enum "flow" {
                value 0;
                description "Flow module";
              }
            }
            description "Name of the module";
          }
    
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Events and other information to include in trace output";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "All flow trace";
                }
              }
            }
          }  // list flag
        }  // grouping e2e-module
    
        grouping end-to-end-debug-filter {
          description
            "End to end debug packer filter settings";
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
              length "1 .. 64";
            }
            description "Name of the filter";
          }
    
          uses apply-advanced;
    
          leaf action-profile {
            type string;
            description
              "Actions to take with this filter";
          }
    
          leaf protocol {
            type string;
            description "Match IP protocol type";
          }
    
          leaf source-prefix {
            type jt:ipprefix;
            description
              "Source IPv4/IPv6 address prefix";
          }
    
          leaf destination-prefix {
            type jt:ipprefix;
            description
              "Destination IPv4/IPv6 address prefix";
          }
    
          leaf source-port {
            type string;
            description
              "Match TCP/UDP source port";
          }
    
          leaf destination-port {
            type string;
            description
              "Match TCP/UDP destination port";
          }
    
          leaf interface {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Logical interface";
          }
        }  // grouping end-to-end-debug-filter
    
        grouping extension-list-type {
          description
            "Configure extension-list object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 29";
            }
            description
              "Configure name of extension-list object";
          }
    
          uses apply-advanced;
    
          leaf-list value {
            type string {
              length "1 .. 29";
            }
            ordered-by user;
            description
              "Configure value of extension-list object";
          }
        }  // grouping extension-list-type
    
        grouping flow-filter-type {
          description "Flow filter settings";
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
              length "1 .. 63";
            }
            description "Name of the filter";
          }
    
          uses apply-advanced;
    
          leaf protocol {
            type string;
            description "Match IP protocol type";
          }
    
          leaf source-prefix {
            type jt:ipprefix;
            description
              "Source IP address prefix";
          }
    
          leaf destination-prefix {
            type jt:ipprefix;
            description
              "Destination IP address prefix";
          }
    
          leaf conn-tag {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            description "Session connection tag";
          }
    
          leaf logical-system {
            type string {
              length "1 .. 63";
            }
            status deprecated;
            description "Logical system";
          }
    
          leaf source-port {
            type string;
            description
              "Match TCP/UDP source port";
          }
    
          leaf destination-port {
            type string;
            description
              "Match TCP/UDP destination port";
          }
    
          leaf interface {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Source logical interface";
          }
        }  // grouping flow-filter-type
    
        grouping flow-traceoptions-object {
          description
            "Trace options for flow services";
          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 other information to include in trace output";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "All events";
                }
                enum "basic-datapath" {
                  value 1;
                  description
                    "Basic packet flow";
                }
                enum "high-availability" {
                  value 2;
                  description
                    "Flow high-availability information";
                }
                enum "host-traffic" {
                  value 3;
                  description
                    "Flow host-traffic information";
                }
                enum "fragmentation" {
                  value 4;
                  description
                    "Ip fragmentation and reassembly events";
                }
                enum "multicast" {
                  value 5;
                  description
                    "Multicast flow information";
                }
                enum "route" {
                  value 6;
                  description
                    "Route lookup information";
                }
                enum "session" {
                  value 7;
                  description
                    "Session creation and deletion events";
                }
                enum "session-scan" {
                  value 8;
                  description
                    "Session scan information";
                }
                enum "tcp-basic" {
                  value 9;
                  description "TCP packet flow";
                }
                enum "tunnel" {
                  value 10;
                  description
                    "Tunnel information";
                }
                enum "jexec" {
                  value 11;
                  description
                    "Junos forwarding module";
                }
              }
            }
          }  // list flag
    
          leaf rate-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            default "0";
            description
              "Limit the incoming rate of trace messages";
          }
    
          list packet-filter {
            key "name";
            max-elements 64;
            ordered-by user;
            description
              "Flow packet debug filters";
            uses flow-filter-type;
          }  // list packet-filter
    
          container trace-level {
            description "FLow trace level";
            uses apply-advanced;
    
            choice level {
              leaf minimal {
                type empty;
                description
                  "Significant messages including warning, error, criticality, alert and emergency.";
              }
              leaf brief {
                type empty;
                description
                  "Brief messages including notice, in addition to minimal messages";
              }
              leaf detail {
                type empty;
                description
                  "Detail messages including info and debug, in addition to brief messages";
              }
            }  // choice level
          }  // container trace-level
    
          leaf root-override {
            junos:must "((".. file" && ".. flag"))";
            junos:must-message "root-override must have root trace file and flag configured";
            type empty;
            description
              "Allow collect flow trace in root from all logical-systems and tenants";
          }
        }  // grouping flow-traceoptions-object
    
        grouping gtp-object {
          uses apply-advanced;
    
          list profile {
            key "name";
            description "Configure GTP Profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description "GTP profile name";
            }
    
            uses apply-advanced;
    
            leaf min-message-length {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 65535";
                }
              }
              default "0";
              description
                "Minimum message length, from 0 to 65535 ";
            }
    
            leaf max-message-length {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              default "65535";
              description
                "Maximum message length, from 1 to 65535";
            }
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1000";
                }
              }
              units "hour";
              default "1000";
              description "Tunnel idle timeout";
            }
    
            container rate-limit {
              presence "enable rate-limit";
              description
                "Limit messages per second";
              uses rate-limit-object;
            }  // container rate-limit
    
            container log {
              presence "enable log";
              description
                "GPRS tunneling protocol logs";
              uses apply-advanced;
    
              leaf forwarded {
                type enumeration {
                  enum "basic" {
                    value 0;
                    description "Basic logs";
                  }
                  enum "detail" {
                    value 1;
                    description "Detailed logs";
                  }
                }
                description
                  "Log passed good packets";
              }
    
              leaf event {
                type enumeration {
                  enum "basic" {
                    value 0;
                    description "Basic logs";
                  }
                  enum "detail" {
                    value 1;
                    description "Detailed logs";
                  }
                }
                description
                  "Log alarms and tunnel management events";
              }
    
              leaf prohibited {
                type enumeration {
                  enum "basic" {
                    value 0;
                    description "Basic logs";
                  }
                  enum "detail" {
                    value 1;
                    description "Detailed logs";
                  }
                }
                description
                  "Log dropped packets";
              }
    
              list gtp-u {
                key "name";
                description "Logs for gtp-u";
                leaf name {
                  type enumeration {
                    enum "all" {
                      value 0;
                      description
                        "All gtp-u logs";
                    }
                    enum "dropped" {
                      value 1;
                      description
                        "Dropped gtp-u logs";
                    }
                  }
                  description "Logs for gtp-u";
                }
    
                uses apply-advanced;
              }  // list gtp-u
    
              container rate-limited {
                presence "enable rate-limited";
                description
                  "Dropped for rate-limit";
                uses apply-advanced;
    
                choice rate-limited-attr {
                  leaf basic {
                    type empty;
                    description "Basic logs";
                  }
                  leaf detail {
                    type empty;
                    description "Detailed logs";
                  }
                }  // choice rate-limited-attr
              }  // container rate-limited
            }  // container log
    
            container remove-ie {
              presence "enable remove-ie";
              description
                "Remove information elements";
              uses apply-advanced;
    
              list version {
                key "name";
                description "GTP version";
                leaf name {
                  type enumeration {
                    enum "v1" {
                      value 0;
                      description "GTP v1";
                    }
                  }
                  description "Version name";
                }
    
                uses apply-advanced;
    
                list release {
                  key "name";
                  description
                    "Remove information elements by release";
                  leaf name {
                    type enumeration {
                      enum "R6" {
                        value 0;
                        description "Release 6";
                      }
                      enum "R7" {
                        value 1;
                        description "Release 7";
                      }
                      enum "R8" {
                        value 2;
                        description "Release 8";
                      }
                      enum "R9" {
                        value 3;
                        description "Release 9";
                      }
                    }
                    description "Release name";
                  }
    
                  uses apply-advanced;
                }  // list release
    
                list number {
                  key "name";
                  description
                    "Remove information elements by number";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                  }
    
                  uses apply-advanced;
                }  // list number
              }  // list version
            }  // container remove-ie
    
            container path-rate-limit {
              description
                "Limit control messages based on IP pairs";
              uses apply-advanced;
    
              list message-type {
                key "name";
                description
                  "Specific group of control messages";
                leaf name {
                  type enumeration {
                    enum "create-req" {
                      value 0;
                      description
                        "Limit packet-per-second of GTP create request";
                    }
                    enum "delete-req" {
                      value 1;
                      description
                        "Limit packet-per-second of GTP delete request";
                    }
                    enum "echo-req" {
                      value 2;
                      description
                        "Limit packet-per-minute of GTP echo request";
                    }
                    enum "other" {
                      value 3;
                      description
                        "Limit packet-per-second of all other GTP control messages";
                    }
                  }
                  description
                    "Specific group of control messages";
                }
    
                uses apply-advanced;
    
                container drop-threshold {
                  description
                    "Set drop threshold for path rate limiting";
                  uses apply-advanced;
    
                  leaf forward {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10000";
                      }
                    }
                    description
                      "Limit messages of forward direction";
                  }
    
                  leaf reverse {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10000";
                      }
                    }
                    description
                      "Limit messages of reverse direction";
                  }
                }  // container drop-threshold
    
                container alarm-threshold {
                  description
                    "Set alarm threshold for path rate limiting";
                  uses apply-advanced;
    
                  leaf forward {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10000";
                      }
                    }
                    description
                      "Limit messages of forward direction";
                  }
    
                  leaf reverse {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 10000";
                      }
                    }
                    description
                      "Limit messages of reverse direction";
                  }
                }  // container alarm-threshold
              }  // list message-type
            }  // container path-rate-limit
    
            container drop {
              description
                "Drop certain type of messages";
              uses apply-advanced;
    
              list aa-create-pdp {
                key "name";
                ordered-by user;
                description
                  "Create AA pdp request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list aa-create-pdp
    
              list aa-delete-pdp {
                key "name";
                ordered-by user;
                description
                  "Delete AA pdp request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list aa-delete-pdp
    
              list bearer-resource {
                key "name";
                ordered-by user;
                description
                  "Bearer resource command/failure message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list bearer-resource
    
              list change-notification {
                key "name";
                ordered-by user;
                description
                  "Change notification request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list change-notification
    
              list config-transfer {
                key "name";
                ordered-by user;
                description
                  "Configuration transfer message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list config-transfer
    
              list context {
                key "name";
                ordered-by user;
                description
                  "Context request/response/ack message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list context
    
              list create-bearer {
                key "name";
                ordered-by user;
                description
                  "Create bearer request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list create-bearer
    
              list create-data-forwarding {
                key "name";
                ordered-by user;
                description
                  "Create indirect data forwarding tunnel request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list create-data-forwarding
    
              list create-pdp {
                key "name";
                ordered-by user;
                description
                  "Create pdp request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list create-pdp
    
              list create-session {
                key "name";
                ordered-by user;
                description
                  "Create session request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list create-session
    
              list create-tnl-forwarding {
                key "name";
                ordered-by user;
                description
                  "Create forwarding tunnel request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list create-tnl-forwarding
    
              list cs-paging {
                key "name";
                ordered-by user;
                description
                  "CS paging indication message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list cs-paging
    
              list data-record {
                key "name";
                ordered-by user;
                description
                  "Data record request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list data-record
    
              list delete-bearer {
                key "name";
                ordered-by user;
                description
                  "Delete bearer request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-bearer
    
              list delete-command {
                key "name";
                ordered-by user;
                description
                  "Delete bearer command/failure message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-command
    
              list delete-data-forwarding {
                key "name";
                ordered-by user;
                description
                  "Delete indirect data forwarding tunnel request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-data-forwarding
    
              list delete-pdn {
                key "name";
                ordered-by user;
                description
                  "Delete PDN connection set request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-pdn
    
              list delete-pdp {
                key "name";
                ordered-by user;
                description
                  "Delete pdp request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-pdp
    
              list delete-session {
                key "name";
                ordered-by user;
                description
                  "Delete session request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list delete-session
    
              list detach {
                key "name";
                ordered-by user;
                description
                  "Detach notification/ack message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list detach
    
              list downlink-notification {
                key "name";
                ordered-by user;
                description
                  "Downlink data notification/ack/failure message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list downlink-notification
    
              list echo {
                key "name";
                ordered-by user;
                description
                  "Echo request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "2" {
                      value 2;
                      description "Version 2";
                    }
                    enum "all" {
                      value 3;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list echo
    
              list error-indication {
                key "name";
                ordered-by user;
                description
                  "Error indication message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list error-indication
    
              list failure-report {
                key "name";
                ordered-by user;
                description
                  "Failure report request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list failure-report
    
              list fwd-access {
                key "name";
                ordered-by user;
                description
                  "Forward access context notification/ack message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list fwd-access
    
              list fwd-relocation {
                key "name";
                ordered-by user;
                description
                  "Forward relocation request/response/comp/comp-ack message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list fwd-relocation
    
              list fwd-srns-context {
                key "name";
                ordered-by user;
                description
                  "Forward SRNS context/context-ack message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list fwd-srns-context
    
              list g-pdu {
                key "name";
                ordered-by user;
                description
                  "G-PDU (user PDU) message/T-PDU";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list g-pdu
    
              list identification {
                key "name";
                ordered-by user;
                description
                  "Identification request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "2" {
                      value 2;
                      description "Version 2";
                    }
                    enum "all" {
                      value 3;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list identification
    
              list mbms-session-start {
                key "name";
                ordered-by user;
                description
                  "MBMS session start request/response message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list mbms-session-start
    
              list mbms-session-stop {
                key "name";
                ordered-by user;
                description
                  "MBMS session stop request/response message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list mbms-session-stop
    
              list mbms-session-update {
                key "name";
                ordered-by user;
                description
                  "MBMS session update request/response message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list mbms-session-update
    
              list modify-bearer {
                key "name";
                ordered-by user;
                description
                  "Modify bearer request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list modify-bearer
    
              list modify-command {
                key "name";
                ordered-by user;
                description
                  "Modify bearer command/failure message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list modify-command
    
              list node-alive {
                key "name";
                ordered-by user;
                description
                  "Node alive request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list node-alive
    
              list note-ms-present {
                key "name";
                ordered-by user;
                description
                  "Note MS GPRS present request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list note-ms-present
    
              list pdu-notification {
                key "name";
                ordered-by user;
                description
                  "PDU notification requst/response/reject/reject-response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list pdu-notification
    
              list ran-info {
                key "name";
                ordered-by user;
                description
                  "RAN info relay message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list ran-info
    
              list redirection {
                key "name";
                ordered-by user;
                description
                  "Redirection request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list redirection
    
              list release-access {
                key "name";
                ordered-by user;
                description
                  "Release access-bearer request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list release-access
    
              list relocation-cancel {
                key "name";
                ordered-by user;
                description
                  "Relocation cancel request/response message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                    enum "2" {
                      value 1;
                      description "Version 2";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list relocation-cancel
    
              list resume {
                key "name";
                ordered-by user;
                description
                  "Resume notification/ack message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list resume
    
              list send-route {
                key "name";
                ordered-by user;
                description
                  "Send route info request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list send-route
    
              list sgsn-context {
                key "name";
                ordered-by user;
                description
                  "SGSN context request/response/ack message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list sgsn-context
    
              list stop-paging {
                key "name";
                ordered-by user;
                description
                  "Stop paging indication message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list stop-paging
    
              list supported-extension {
                key "name";
                ordered-by user;
                description
                  "Supported extension headers notification message";
                leaf name {
                  type enumeration {
                    enum "1" {
                      value 0;
                      description "Version 1";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list supported-extension
    
              list suspend {
                key "name";
                ordered-by user;
                description
                  "Suspend notification/ack message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list suspend
    
              list trace-session {
                key "name";
                ordered-by user;
                description
                  "Trace session activation/deactivation message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list trace-session
    
              list update-bearer {
                key "name";
                ordered-by user;
                description
                  "Update bearer request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list update-bearer
    
              list update-pdn {
                key "name";
                ordered-by user;
                description
                  "Update PDN connection set request/response message";
                leaf name {
                  type enumeration {
                    enum "2" {
                      value 0;
                      description "Version 2";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list update-pdn
    
              list update-pdp {
                key "name";
                ordered-by user;
                description
                  "Update pdp request/response message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "all" {
                      value 2;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list update-pdp
    
              list ver-not-supported {
                key "name";
                ordered-by user;
                description
                  "Version not supported message";
                leaf name {
                  type enumeration {
                    enum "0" {
                      value 0;
                      description "Version 0";
                    }
                    enum "1" {
                      value 1;
                      description "Version 1";
                    }
                    enum "2" {
                      value 2;
                      description "Version 2";
                    }
                    enum "all" {
                      value 3;
                      description "All versions";
                    }
                  }
                  description
                    "GTP version for message";
                }
    
                uses apply-advanced;
              }  // list ver-not-supported
            }  // container drop
    
            list apn {
              key "name";
              description
                "GTP Access Point Name (APN) filter";
              leaf name {
                type string {
                  junos:posix-pattern "^[*]$|^[*][^*]{1,63}$|^[^*]{1,64}$";
                  junos:pattern-message "APN pattern string length should be 1-64, support wildcard for the first character";
                  length "1 .. 64";
                }
                description
                  "Specific APN pattern string";
              }
    
              uses apply-advanced;
    
              list imsi-prefix {
                key "name";
                description
                  "Specific filter prefix digits for International Mobile Subscriber Identification(IMSI)";
                leaf name {
                  type string {
                    junos:posix-pattern "^[*]$|^[0-9]{5,15}$";
                    junos:pattern-message "imsi-prefix should be * or 5-15 digits";
                    length "1 .. 15";
                  }
                  description
                    "IMSI prefix should be * or 5-15 digits";
                }
    
                uses apply-advanced;
    
                container action {
                  description
                    "Configure GTP profile APN action";
                  uses apply-advanced;
    
                  choice action-c {
                    leaf pass {
                      type empty;
                      description
                        "Pass all selection modes for this APN";
                    }
                    leaf drop {
                      type empty;
                      description
                        "Drop all selection modes for this APN";
                    }
                    container selection {
                      presence
                        "enable selection";
                      description
                        "Allowed selection modes for this APN";
                      uses apply-advanced;
    
                      leaf ms {
                        type empty;
                        description
                          "Mobile Station selection mode";
                      }
    
                      leaf net {
                        type empty;
                        description
                          "Network selection mode";
                      }
    
                      leaf vrf {
                        type empty;
                        description
                          "Subscriber verified mode";
                      }
                    }  // container selection
                  }  // choice action-c
                }  // container action
              }  // list imsi-prefix
            }  // list apn
    
            leaf restart-path {
              type enumeration {
                enum "echo" {
                  value 0;
                  description
                    "Restart GTP paths by detecting restart number stored in the Echo messages";
                }
                enum "create" {
                  value 1;
                  description
                    "Restart GTP paths by detecting restart number stored in the Create messages";
                }
                enum "all" {
                  value 2;
                  description
                    "Restart GTP paths by detecting restart number stored in the Echo or Create messages";
                }
              }
              description "Restart GTP paths";
            }
    
            leaf seq-number-validated {
              type empty;
              description
                "Validate G-PDU sequence number";
            }
    
            leaf gtp-in-gtp-denied {
              type empty;
              description "Deny nested GTP";
            }
    
            leaf u-tunnel-validated {
              type empty;
              description
                "Validate GTP-u tunnel";
            }
    
            leaf end-user-address-validated {
              type empty;
              description
                "Validate end user address";
            }
    
            leaf req-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 30";
                }
              }
              units "second";
              description
                "Request message timeout, default timeout value 5 seconds";
            }
    
            leaf handover-on-roaming-intf {
              type empty;
              description
                "Enable tunnel setup by Handover messages on roaming interface";
            }
    
            container handover-group {
              description
                "SGSN handover group configuration";
              uses apply-advanced;
    
              leaf group-name {
                junos:must "(("security gprs gtp handover-group $$" || ("security gprs gtp ip-group $$" || ("security gtp handover-group $$" || "security gtp ip-group $$"))))";
                junos:must-message "referenced ip-group/handover-group not found";
                type string {
                  length "1 .. 23";
                }
                description
                  "SGSN handover group name";
              }
            }  // container handover-group
    
            leaf listening-mode {
              type empty;
              description
                "Enable listening-mode for GTP inspection";
            }
    
            container ne-group {
              description
                "IP validation check for NE group configuration";
              uses apply-advanced;
    
              leaf group-name {
                junos:must "(("security gprs gtp ip-group $$" || "security gtp ip-group $$"))";
                junos:must-message "referenced ip-group not found";
                type string {
                  length "1 .. 23";
                }
                description "GTP ip group name";
              }
            }  // container ne-group
    
            container ue-group {
              description
                "End User IP validation check for UE group configuration";
              uses apply-advanced;
    
              leaf group-name {
                junos:must "(("security gprs gtp ip-group $$" || "security gtp ip-group $$"))";
                junos:must-message "referenced ip-group not found";
                type string {
                  length "1 .. 23";
                }
                description "GTP ip group name";
              }
            }  // container ue-group
    
            container must-ie-v1 {
              description
                "GTPv1 Must IE check configuration";
              uses apply-advanced;
    
              leaf msgie-prf-v1-name {
                junos:must "(("security gprs gtp message-ie-profile-v1 $$" || "security gtp message-ie-profile-v1 $$"))";
                junos:must-message "referenced message-ie-profile-v1 not found";
                type string {
                  length "1 .. 23";
                }
                description
                  "GTPv1 message-ie profile name";
              }
            }  // container must-ie-v1
    
            container must-ie-v2 {
              description
                "GTPv2 Must IE check configuration";
              uses apply-advanced;
    
              leaf msgie-prf-v2-name {
                junos:must "(("security gprs gtp message-ie-profile-v2 $$" || "security gtp message-ie-profile-v2 $$"))";
                junos:must-message "referenced message-ie-profile-v2 not found";
                type string {
                  length "1 .. 23";
                }
                description
                  "GTPv2 message-ie profile name";
              }
            }  // container must-ie-v2
    
            container remove-ie-v1 {
              description
                "GTPv1 IE Removal configuration";
              uses apply-advanced;
    
              leaf ieset-name {
                junos:must "(("security gprs gtp ie-set $$" || "security gtp ie-set $$"))";
                junos:must-message "referenced ie-set not found";
                type string {
                  length "1 .. 23";
                }
                description "GTP ie-set name";
              }
            }  // container remove-ie-v1
    
            container remove-ie-v2 {
              description
                "GTPv2 IE Removal configuration";
              uses apply-advanced;
    
              leaf ieset-name {
                junos:must "(("security gprs gtp ie-set $$" || "security gtp ie-set $$"))";
                junos:must-message "referenced ie-set not found";
                type string {
                  length "1 .. 23";
                }
                description "GTP ie-set name";
              }
            }  // container remove-ie-v2
    
            choice apn-control-c {
              container apn-control {
                description
                  "GTP per APN control";
                uses apply-advanced;
    
                leaf apn-ctrl-name {
                  junos:must "(("security gprs gtp apn-control $$" || "security gtp apn-control $$"))";
                  junos:must-message "referenced apn-control profile not found";
                  type string {
                    length "1 .. 23";
                  }
                  description
                    "APN control profile name";
                }
              }  // container apn-control
              container apn-control-group {
                description
                  "GTP per APN control group";
                uses apply-advanced;
    
                leaf apn-ctrl-grp-name {
                  junos:must "(("security gprs gtp apn-control-group $$" || "security gtp apn-control-group $$"))";
                  junos:must-message "referenced apn-control group not found";
                  type string {
                    length "1 .. 23";
                  }
                  description
                    "APN control group name";
                }
              }  // container apn-control-group
            }  // choice apn-control-c
          }  // list profile
    
          container traceoptions {
            description
              "Trace options for GPRS tunneling protocol";
            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 "flow" {
                    value 1;
                    description
                      "Trace flow events";
                  }
                  enum "parser" {
                    value 2;
                    description
                      "Trace parser events";
                  }
                  enum "chassis-cluster" {
                    value 3;
                    description
                      "Trace chassis cluster events";
                  }
                  enum "gsn" {
                    value 4;
                    description
                      "Trace gsn events";
                  }
                  enum "jmpi" {
                    value 5;
                    description
                      "Trace jmpi events";
                  }
                  enum "tnl" {
                    value 6;
                    description
                      "Trace tnl events";
                  }
                  enum "req" {
                    value 7;
                    description
                      "Trace req events";
                  }
                  enum "path" {
                    value 8;
                    description
                      "Trace path events";
                  }
                  enum "all" {
                    value 9;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
    
            container trace-level {
              description "GTP trace level";
              uses apply-advanced;
    
              choice level {
                leaf error {
                  type empty;
                  description
                    "Match error conditions";
                }
                leaf warning {
                  type empty;
                  description
                    "Match warning messages";
                }
                leaf notice {
                  type empty;
                  description
                    "Match conditions that should be handled specially";
                }
                leaf info {
                  type empty;
                  description
                    "Match informational messages";
                }
                leaf verbose {
                  type empty;
                  description
                    "Match verbose messages";
                }
              }  // choice level
            }  // container trace-level
          }  // container traceoptions
    
          container handover-default {
            description
              "Set handover default deny";
            uses apply-advanced;
    
            leaf deny {
              type empty;
              description
                "Handover default deny";
            }
          }  // container handover-default
    
          list ip-group {
            key "name";
            description "Set GTP IP group";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description "Set ip group name";
            }
    
            uses apply-advanced;
    
            list address-book {
              key "name";
              description "Set addreess book";
              leaf name {
                junos:must "("security address-book $$")";
                junos:must-message "referenced address-book not found";
                type string {
                  length "1 .. 63";
                }
                description
                  "Set address book name";
              }
    
              uses apply-advanced;
    
              container address-set {
                description "Set address set";
                uses apply-advanced;
    
                leaf set-name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Set address set name";
                }
              }  // container address-set
            }  // list address-book
          }  // list ip-group
    
          list ie-set {
            key "name";
            max-elements 20;
            description "Set GTP IE set profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "Set GTP IE set profile name";
            }
    
            uses apply-advanced;
    
            list ie {
              key "name";
              description "Set IE number";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 255";
                  }
                }
                description "Set IE number";
              }
    
              uses apply-advanced;
            }  // list ie
          }  // list ie-set
    
          list message-ie-profile-v1 {
            key "name";
            max-elements 10;
            description
              "Set GTPv1 message IE profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "Set GTPv1 message IE profile name";
            }
    
            uses apply-advanced;
    
            list message {
              key "name";
              description "Set message type";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 255";
                  }
                }
                description "Set message type";
              }
    
              uses apply-advanced;
    
              list ie {
                key "name";
                description "Set IE number";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 255";
                    }
                  }
                  description "Set IE number";
                }
    
                uses apply-advanced;
              }  // list ie
            }  // list message
          }  // list message-ie-profile-v1
    
          list grouped-ie-profile {
            key "name";
            max-elements 100;
            description
              "Set GTP grouped IE filter profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "Set GTP grouped IE filter profile name";
            }
    
            uses apply-advanced;
    
            list ie {
              key "name";
              description "Set IE number";
              uses ie-filter-object;
            }  // list ie
          }  // list grouped-ie-profile
    
          list message-ie-profile-v2 {
            key "name";
            max-elements 10;
            description
              "Set GTP message IE filter profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "Set message IE filter profile name";
            }
    
            uses apply-advanced;
    
            list message {
              key "name";
              description "Set message type";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 255";
                  }
                }
                description "Set message type";
              }
    
              uses apply-advanced;
    
              list ie {
                key "name";
                description "Set IE number";
                uses ie-filter-object;
              }  // list ie
            }  // list message
          }  // list message-ie-profile-v2
    
          list message-list {
            key "name";
            max-elements 10;
            description "Set message list";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "Set message list name";
            }
    
            uses apply-advanced;
    
            list message {
              key "name";
              description "Set message type";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "1 .. 255";
                  }
                }
                description "Set message type";
              }
    
              uses apply-advanced;
            }  // list message
          }  // list message-list
    
          list rate-limit {
            key "name";
            description "Limiting message rate";
            leaf name {
              type enumeration {
                enum "default" {
                  value 0;
                  description
                    "Default rate limit policy name";
                }
              }
              description
                "Rate limit policy name";
            }
    
            uses apply-advanced;
    
            container message {
              description
                "GTP limited message type";
              uses message-object;
            }  // container message
          }  // list rate-limit
    
          list apn-control {
            key "name";
            max-elements 1024;
            description
              "GTP APN control profile";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "APN control profile name";
            }
    
            uses apply-advanced;
    
            container apn {
              description
                "APN of the APN control profile";
              uses apply-advanced;
    
              leaf apn-string {
                type string {
                  length "1 .. 100";
                }
                description "APN string";
              }
            }  // container apn
    
            container rate-limit {
              presence "enable rate-limit";
              description
                "APN controlled rate-limit";
              uses rate-limit-object;
            }  // container rate-limit
          }  // list apn-control
    
          list apn-control-group {
            key "name";
            max-elements 1024;
            description
              "GTP APN control profile group";
            leaf name {
              type string {
                length "1 .. 23";
              }
              description
                "APN control profile group name";
            }
    
            uses apply-advanced;
    
            list apn-control {
              key "name";
              description "APN control profile";
              leaf name {
                junos:must "(("security gprs gtp apn-control $$" || "security gtp apn-control $$"))";
                junos:must-message "referenced apn-control profile not found";
                type string {
                  length "1 .. 23";
                }
                description
                  "APN control profile name";
              }
    
              uses apply-advanced;
            }  // list apn-control
          }  // list apn-control-group
        }  // grouping gtp-object
    
        grouping httpd_dvpn_traceoptions_type {
          description
            "Trace options for dynamic-vpn 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 HTTPD process to enable debugging output";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "Trace all areas";
                }
              }
            }
          }  // list flag
        }  // grouping httpd_dvpn_traceoptions_type
    
        grouping icap-profile-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description
              "ICAP service profile name";
          }
    
          uses apply-advanced;
    
          list server {
            key "name";
            max-elements 16;
            ordered-by user;
            description
              "Configure service redirection server";
            uses icap-redir-server;
          }  // list server
    
          container http {
            description "ICAP methods switch";
            uses http-redirect-object;
          }  // container http
    
          container fallback-option {
            description "Failure event actions";
            uses icap-redirect-fallback;
          }  // container fallback-option
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "100 .. 50000";
              }
            }
            default "500";
            description
              "Server response timeout in milliseconds";
          }
        }  // grouping icap-profile-object
    
        grouping http-redirect-object {
          uses apply-advanced;
    
          leaf redirect-request {
            type empty;
            description
              "Enable redirect service on HTTP request";
          }
    
          leaf redirect-response {
            type empty;
            description
              "Enable redirect service on HTTP response";
          }
        }  // grouping http-redirect-object
    
        grouping icap-redir-server {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Server name";
          }
    
          uses apply-advanced;
    
          container authorization {
            description "User authentication";
            uses apply-advanced;
    
            leaf authorization-type {
              type string {
                length "1 .. 127";
              }
              description
                "Authentication type. 'Basic' by default";
            }
    
            container credentials {
              description "Credentials text";
              choice credentials-choice {
                leaf ascii {
                  type string {
                    length "1 .. 511";
                  }
                  description "ASCII string";
                }
                leaf base64 {
                  type string {
                    length "1 .. 511";
                  }
                  description "Base64 string";
                }
              }  // choice credentials-choice
            }  // container credentials
          }  // container authorization
    
          leaf host {
            type string {
              length "1 .. 255";
            }
            description "Host name/IP address";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1025 .. 65535";
              }
            }
            default "1344";
            description "Server listening port";
          }
    
          leaf reqmod-uri {
            type string {
              length "0 .. 1023";
            }
            description
              "REQMOD option resource identifier";
          }
    
          leaf respmod-uri {
            type string {
              length "0 .. 1023";
            }
            description
              "RESPMOD option resource identifier";
          }
    
          container routing-instance {
            description "Routing instance";
            leaf ri-name {
              junos:must "("routing-instances $$ instance-type virtual-router")";
              junos:must-message "Virtual router must be defined under [routing-instances]";
              junos:must "("routing-instances $$")";
              junos:must-message "Routing-instance must be defined";
              type string {
                junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$";
                junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces.";
                length "1 .. 127";
              }
              description
                "Routing instance name";
            }
          }  // container routing-instance
    
          leaf sockets {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "1 .. 64";
              }
            }
            default "8";
            description
              "Number of connections to create";
          }
    
          leaf tls-profile {
            junos:must "("services ssl initiation profile $$")";
            junos:must-message "Referenced SSL initiation profile is not defined";
            type string {
              length "1 .. 63";
            }
            description "TLS profile";
          }
        }  // grouping icap-redir-server
    
        grouping icap-redirect-fallback {
          uses apply-advanced;
    
          leaf timeout {
            type enumeration {
              enum "permit" {
                value 0;
                description
                  "Direct permit action";
              }
              enum "log-permit" {
                value 1;
                description
                  "Log then permit action";
              }
              enum "block" {
                value 2;
                description "Block action";
              }
            }
            default "permit";
            description "Request timeout action";
          }
    
          leaf connectivity {
            type enumeration {
              enum "permit" {
                value 0;
                description
                  "Direct permit action";
              }
              enum "log-permit" {
                value 1;
                description
                  "Log then permit action";
              }
              enum "block" {
                value 2;
                description "Block action";
              }
            }
            default "permit";
            description
              "Connection-related failure action";
          }
    
          leaf default-action {
            type enumeration {
              enum "permit" {
                value 0;
                description
                  "Direct permit action";
              }
              enum "log-permit" {
                value 1;
                description
                  "Log then permit action";
              }
              enum "block" {
                value 2;
                description "Block action";
              }
            }
            default "permit";
            description "Default failure action";
          }
        }  // grouping icap-redirect-fallback
    
        grouping icap-redirect-traceoptions {
          description
            "ICAP redirect traceoptions";
          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 flags";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "Trace everything";
                }
                enum "icap-redirect-re" {
                  value 1;
                  description
                    "Trace events on RE side";
                }
                enum "icap-redirect-control" {
                  value 2;
                  description
                    "Trace events on PFE-ukernel side";
                }
                enum "icap-redirect-connection" {
                  value 3;
                  description
                    "Trace ICAP server connection events";
                }
                enum "icap-redirect-protocol" {
                  value 4;
                  description
                    "Trace redirect packet events";
                }
              }
            }
          }  // list flag
        }  // grouping icap-redirect-traceoptions
    
        grouping identity-management-connection-type {
          description
            "Identity management connection";
          uses apply-advanced;
    
          leaf connect-method {
            type enumeration {
              enum "https" {
                value 0;
                description "HTTPS connection";
              }
              enum "http" {
                value 1;
                description "HTTP connection";
              }
            }
            description "Method of connection";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            default "443";
            description "Server port";
          }
    
          container primary {
            description "Primary server";
            uses identity-server-connection-type;
          }  // container primary
    
          container secondary {
            description "Secondary server";
            uses identity-server-connection-type;
          }  // container secondary
    
          leaf token-api {
            type string {
              length "1 .. 128";
            }
            description
              "API of acquiring token for OAuth2 authentication";
          }
    
          leaf query-api {
            type string {
              length "4 .. 128";
            }
            description "Query API";
          }
        }  // grouping identity-management-connection-type
    
        grouping identity-server-connection-type {
          description
            "Connection parameters per server";
          uses apply-advanced;
    
          leaf address {
            type jt:ipaddr;
            description "Server address";
          }
    
          leaf ca-certificate {
            type string {
              length "1 .. 256";
            }
            description
              "Ca-certificate file name";
          }
    
          leaf client-id {
            type string {
              length "1 .. 64";
            }
            description
              "Client ID for OAuth2 grant";
          }
    
          leaf client-secret {
            type string {
              length "1 .. 128";
            }
            description
              "Client secret for OAuth2 grant";
          }
    
          leaf source {
            type jt:ipaddr;
            description "Client address";
          }
    
          leaf interface {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          leaf routing-instance {
            junos:must "("routing-instances $$")";
            junos:must-message "Routing-instance must be defined";
            type string;
            description "Routing instance name";
          }
        }  // grouping identity-server-connection-type
    
        grouping idp-policy-type {
          leaf name {
            type string;
            description "IDP policy name";
          }
    
          container rulebase-ips {
            description "IPS rulebase";
            uses apply-advanced;
    
            list rule {
              key "name";
              ordered-by user;
              description "Configure IPS rule";
              leaf name {
                type string;
                description "Rule name";
              }
    
              uses apply-advanced;
    
              leaf description {
                type string;
                description "Rule description";
              }
    
              container match {
                description
                  "Rule match criteria";
                uses apply-advanced;
    
                leaf from-zone {
                  junos:must "((".. from-zone any" || "security zones security-zone $$"))";
                  junos:must-message "from-zone should be 'any' or configured under [security zones security-zone]";
                  type string;
                  default "any";
                  description "Match from zone";
                }
    
                choice source {
                  leaf-list source-address {
                    type string;
                    ordered-by user;
                    description
                      "Match source address";
                  }
                  leaf-list source-except {
                    type string;
                    ordered-by user;
                    description
                      "Don't match source address";
                  }
    
                  case case_3 {
                  }  // case case_3
    
                  case case_4 {
                  }  // case case_4
                }  // choice source
    
                leaf to-zone {
                  junos:must "((".. to-zone any" || "security zones security-zone $$"))";
                  junos:must-message "to-zone should be 'any' or configured under [security zones security-zone]";
                  type string;
                  default "any";
                  description "Match to zone";
                }
    
                choice destination {
                  leaf-list destination-address {
                    type string;
                    ordered-by user;
                    description
                      "Match destination address";
                  }
                  leaf-list destination-except {
                    type string;
                    ordered-by user;
                    description
                      "Don't match destination address";
                  }
    
                  case case_3 {
                  }  // case case_3
    
                  case case_4 {
                  }  // case case_4
                }  // choice destination
    
                leaf application {
                  type string;
                  description
                    "Specify application or application-set name to match";
                }
    
                container attacks {
                  description
                    "Match attack objects";
                  uses apply-advanced;
    
                  leaf-list custom-attacks {
                    type string;
                    ordered-by user;
                    description "Custom attacks";
                  }
    
                  leaf-list custom-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Custom attack groups";
                  }
    
                  leaf-list dynamic-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Dynamic attack groups";
                  }
    
                  leaf-list predefined-attacks {
                    type string;
                    ordered-by user;
                    description
                      "Predefined attacks";
                  }
    
                  leaf-list predefined-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Predefined attack groups";
                  }
                }  // container attacks
              }  // container match
    
              container then {
                uses apply-advanced;
    
                container action {
                  choice action {
                    leaf no-action {
                      type empty;
                      description "No action";
                    }
                    leaf ignore-connection {
                      type empty;
                      description "Ignore";
                    }
                    container mark-diffserv {
                      description
                        "Mark differentiated services codepoint (DSCP)";
                      uses apply-advanced;
    
                      leaf codepoint {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 63";
                          }
                        }
                        description
                          "Codepoint value";
                      }
                    }  // container mark-diffserv
                    container class-of-service {
                      description
                        "Classification of traffic based on class-of-service";
                      uses apply-advanced;
    
                      leaf forwarding-class {
                        type string {
                          junos:posix-pattern "^.{1,64}$";
                          junos:pattern-message "Must be string of 64 characters or less";
                        }
                        description
                          "Forwarding class for outgoing packets";
                      }
    
                      leaf dscp-code-point {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 63";
                          }
                        }
                        description
                          "Differentiated services code point value";
                      }
                    }  // container class-of-service
                    leaf drop-packet {
                      type empty;
                      description "Drop packet";
                    }
                    leaf drop-connection {
                      type empty;
                      description
                        "Drop connection";
                    }
                    leaf close-client {
                      type empty;
                      description "Close client";
                    }
                    leaf close-server {
                      type empty;
                      description "Close server";
                    }
                    leaf close-client-and-server {
                      type empty;
                      description
                        "Close client and server";
                    }
                    leaf recommended {
                      junos:must "(".. .. .. match attacks")";
                      junos:must-message "attacks must also be configured.";
                      type empty;
                      description "Recommended";
                    }
                  }  // choice action
                }  // container action
    
                container ip-action {
                  uses apply-advanced;
    
                  choice ip-action {
                    leaf ip-notify {
                      type empty;
                      description
                        "Notify about future traffic";
                    }
                    leaf ip-close {
                      type empty;
                      description
                        "Close future connections";
                    }
                    leaf ip-block {
                      type empty;
                      description
                        "Block future connections";
                    }
                  }  // choice ip-action
    
                  leaf target {
                    type enumeration {
                      enum "service" {
                        value 0;
                        description
                          "Match source, destination, dst-port and protocol";
                      }
                      enum "source-zone-address" {
                        value 1;
                        description
                          "Match source-zone and source-address";
                      }
                      enum "source-address" {
                        value 2;
                        description
                          "Match source";
                      }
                      enum "destination-address" {
                        value 3;
                        description
                          "Match destination";
                      }
                      enum "zone-service" {
                        value 4;
                        description
                          "Match source-zone, destination, dst-port, protocol";
                      }
                      enum "source-zone" {
                        value 5;
                        description
                          "Match source-zone";
                      }
                    }
                  }
    
                  leaf log {
                    type empty;
                    description
                      "Log IP action taken";
                  }
    
                  leaf log-create {
                    type empty;
                    description
                      "Log IP action creation";
                  }
    
                  leaf timeout {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 64800";
                      }
                    }
                    description
                      "Number of seconds IP action should remain effective";
                  }
    
                  leaf refresh-timeout {
                    junos:must "(".. timeout")";
                    junos:must-message "timeout must be specified";
                    type empty;
                    description
                      "Refresh timeout when future connections match installed ip-action filter";
                  }
                }  // container ip-action
    
                container notification {
                  presence "enable notification";
                  description
                    "Configure notification/logging options";
                  uses apply-advanced;
    
                  container log-attacks {
                    presence
                      "enable log-attacks";
                    description
                      "Enable attack logging";
                    uses apply-advanced;
    
                    leaf alert {
                      type empty;
                      description
                        "Set alert flag in attack log";
                    }
                  }  // container log-attacks
    
                  container packet-log {
                    presence "enable packet-log";
                    uses apply-advanced;
    
                    leaf pre-attack {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      default "1";
                      description
                        "No of packets to capture before attack";
                    }
    
                    leaf post-attack {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "No of packets to capture after attack";
                    }
    
                    leaf post-attack-timeout {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 1800";
                        }
                      }
                      default "5";
                      description
                        "Timeout (seconds) after attack before stopping packet capture";
                    }
                  }  // container packet-log
                }  // container notification
    
                leaf severity {
                  type enumeration {
                    enum "info" {
                      value 0;
                    }
                    enum "warning" {
                      value 1;
                    }
                    enum "minor" {
                      value 2;
                    }
                    enum "major" {
                      value 3;
                    }
                    enum "critical" {
                      value 4;
                    }
                  }
                  description
                    "Set rule severity level";
                }
    
                container application-services {
                  description
                    "Enable application services for this rule";
                  container security-intelligence {
                    description
                      "Generate security intellegence feeds";
                    leaf add-attacker-ip-to-feed {
                      type string {
                        length "1 .. 64";
                      }
                      description
                        "Specify the desired feed-name";
                    }
    
                    leaf add-target-ip-to-feed {
                      type string {
                        length "1 .. 64";
                      }
                      description
                        "Specify the desired feed-name";
                    }
                  }  // container security-intelligence
                }  // container application-services
              }  // container then
    
              leaf terminal {
                type empty;
                description
                  "Set/Unset terminal flag";
              }
            }  // list rule
          }  // container rulebase-ips
    
          container rulebase-exempt {
            description "Exempt rulebase";
            uses apply-advanced;
    
            list rule {
              key "name";
              ordered-by user;
              description
                "Configure exempt rule";
              leaf name {
                type string;
                description "Rule name";
              }
    
              uses apply-advanced;
    
              leaf description {
                type string;
                description "Rule description";
              }
    
              container match {
                description
                  "Rule match criteria";
                uses apply-advanced;
    
                leaf from-zone {
                  junos:must "((".. from-zone any" || "security zones security-zone $$"))";
                  junos:must-message "from-zone should be 'any' or configured under [security zones security-zone]";
                  type string;
                  default "any";
                  description "Match from zone";
                }
    
                choice source {
                  leaf-list source-address {
                    type string;
                    ordered-by user;
                    description
                      "Match source address";
                  }
                  leaf-list source-except {
                    type string;
                    ordered-by user;
                    description
                      "Don't match source address";
                  }
    
                  case case_3 {
                  }  // case case_3
    
                  case case_4 {
                  }  // case case_4
                }  // choice source
    
                leaf to-zone {
                  junos:must "((".. to-zone any" || "security zones security-zone $$"))";
                  junos:must-message "to-zone should be 'any' or configured under [security zones security-zone]";
                  type string;
                  default "any";
                  description "Match to zone";
                }
    
                choice destination {
                  leaf-list destination-address {
                    type string;
                    ordered-by user;
                    description
                      "Match destination address";
                  }
                  leaf-list destination-except {
                    type string;
                    ordered-by user;
                    description
                      "Don't match destination address";
                  }
    
                  case case_3 {
                  }  // case case_3
    
                  case case_4 {
                  }  // case case_4
                }  // choice destination
    
                container attacks {
                  description
                    "Match attack objects";
                  uses apply-advanced;
    
                  leaf-list custom-attacks {
                    type string;
                    ordered-by user;
                    description "Custom attacks";
                  }
    
                  leaf-list custom-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Custom attack groups";
                  }
    
                  leaf-list dynamic-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Dynamic attack groups";
                  }
    
                  leaf-list predefined-attacks {
                    type string;
                    ordered-by user;
                    description
                      "Predefined attacks";
                  }
    
                  leaf-list predefined-attack-groups {
                    type string;
                    ordered-by user;
                    description
                      "Predefined attack groups";
                  }
                }  // container attacks
              }  // container match
            }  // list rule
          }  // container rulebase-exempt
        }  // grouping idp-policy-type
    
        grouping idpd-traceoptions-type {
          description "Trace options for idpd";
          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 other information to include in trace output";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "All events";
                }
              }
              description
                "Flag name to include in trace output";
            }
          }  // list flag
    
          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";
          }
        }  // grouping idpd-traceoptions-type
    
        grouping ids-option-type {
          description "Configure screen object";
          leaf name {
            type string {
              length "1 .. 64";
            }
            description "Screen object name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of screen";
          }
    
          leaf alarm-without-drop {
            type empty;
            description
              "Do not drop packet, only generate alarm";
          }
    
          leaf match-direction {
            type enumeration {
              enum "input" {
                value 0;
                description
                  "Match on input to interface";
              }
              enum "output" {
                value 1;
                description
                  "Match on output from interface";
              }
              enum "input-output" {
                value 2;
                description
                  "Match on input to or output from interface";
              }
            }
            description "Match direction";
          }
    
          container aggregation {
            presence "enable aggregation";
            description
              "Configure the source and Destination prefix for a ids-option";
            uses apply-advanced;
    
            leaf source-prefix-mask {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 32";
                }
              }
              description "Source IPV4 prefix";
            }
    
            leaf destination-prefix-mask {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 32";
                }
              }
              description
                "Destination IPV4 prefix";
            }
    
            leaf source-prefix-v6-mask {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 128";
                }
              }
              description "Source IPV6 prefix";
            }
    
            leaf destination-prefix-v6-mask {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 128";
                }
              }
              description
                "Destination IPV6 prefix";
            }
          }  // container aggregation
    
          container icmp {
            description
              "Configure ICMP ids options";
            uses apply-advanced;
    
            container ip-sweep {
              presence "enable ip-sweep";
              description
                "Configure ip sweep ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 1000000";
                  }
                }
                units
                  "microseconds in which 10 ICMP packets are detected";
                default "5000";
                description "Threshold";
              }
            }  // container ip-sweep
    
            leaf fragment {
              type empty;
              description
                "Enable ICMP fragment ids option";
            }
    
            leaf large {
              type empty;
              description
                "Enable large ICMP packet (size > 1024) ids option";
            }
    
            container flood {
              presence "enable flood";
              description
                "Configure icmp flood ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "ICMP packets per second";
                default "1000";
                description "Threshold";
              }
            }  // container flood
    
            leaf ping-death {
              type empty;
              description
                "Enable ping of death ids option";
            }
    
            leaf icmpv6-malformed {
              type empty;
              description
                "Enable icmpv6 malformed ids option";
            }
          }  // container icmp
    
          container ip {
            description
              "Configure IP layer ids options";
            uses apply-advanced;
    
            leaf bad-option {
              type empty;
              description
                "Enable ip with bad option ids option";
            }
    
            leaf record-route-option {
              type empty;
              description
                "Enable ip with record route option ids option";
            }
    
            leaf timestamp-option {
              type empty;
              description
                "Enable ip with timestamp option ids option";
            }
    
            leaf security-option {
              type empty;
              description
                "Enable ip with security option ids option";
            }
    
            leaf stream-option {
              type empty;
              description
                "Enable ip with stream option ids option";
            }
    
            leaf spoofing {
              type empty;
              description
                "Enable IP address spoofing ids option";
            }
    
            leaf source-route-option {
              type empty;
              description
                "Enable ip source route ids option";
            }
    
            leaf loose-source-route-option {
              type empty;
              description
                "Enable ip with loose source route ids option";
            }
    
            leaf strict-source-route-option {
              type empty;
              description
                "Enable ip with strict source route ids option";
            }
    
            leaf unknown-protocol {
              type empty;
              description
                "Enable ip unknown protocol ids option";
            }
    
            leaf block-frag {
              type empty;
              description
                "Enable ip fragment blocking ids option";
            }
    
            leaf tear-drop {
              type empty;
              description
                "Enable tear drop ids option";
            }
    
            container ipv6-extension-header {
              description
                "Configure ipv6 extension header ids option";
              uses apply-advanced;
    
              container hop-by-hop-header {
                presence
                  "enable hop-by-hop-header";
                description
                  "Enable ipv6 hop by hop option header ids option";
                uses apply-advanced;
    
                leaf jumbo-payload-option {
                  type empty;
                  description
                    "Enable jumbo payload option ids option";
                }
    
                leaf router-alert-option {
                  type empty;
                  description
                    "Enable router alert option ids option";
                }
    
                leaf quick-start-option {
                  type empty;
                  description
                    "Enable quick start option ids option";
                }
    
                leaf CALIPSO-option {
                  type empty;
                  description
                    "Enable Common Architecture Label ipv6 Security Option ids option";
                }
    
                leaf SMF-DPD-option {
                  type empty;
                  description
                    "Enable Simplified Multicast Forwarding ipv6 Duplicate Packet Detection option ids option";
                }
    
                leaf RPL-option {
                  type empty;
                  description
                    "Enable Routing Protocol for Low-power and Lossy networks option ids option";
                }
    
                list user-defined-option-type {
                  key "name";
                  max-elements 256;
                  ordered-by user;
                  description
                    "User-defined option type range";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "User-defined option type low value";
                  }
    
                  container to {
                    description
                      "Upper limit of option type range";
                    uses apply-advanced;
    
                    leaf type-high {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      description
                        "User-defined option type high value";
                    }
                  }  // container to
                }  // list user-defined-option-type
              }  // container hop-by-hop-header
    
              leaf routing-header {
                type empty;
                description
                  "Enable ipv6 routing header ids option";
              }
    
              leaf fragment-header {
                type empty;
                description
                  "Enable ipv6 fragment header ids option";
              }
    
              leaf ESP-header {
                type empty;
                description
                  "Enable ipv6 Encapsulating Security Payload header ids option";
              }
    
              leaf AH-header {
                type empty;
                description
                  "Enable ipv6 Authentication Header ids option";
              }
    
              leaf no-next-header {
                type empty;
                description
                  "Enable ipv6 no next header ids option";
              }
    
              container destination-header {
                presence
                  "enable destination-header";
                description
                  "Enable ipv6 destination option header ids option";
                uses apply-advanced;
    
                leaf tunnel-encapsulation-limit-option {
                  type empty;
                  description
                    "Enable tunnel encapsulation limit option ids option";
                }
    
                leaf home-address-option {
                  type empty;
                  description
                    "Enable home address option ids option";
                }
    
                leaf ILNP-nonce-option {
                  type empty;
                  description
                    "Enable Identifier-Locator Network Protocol Nonce option ids option";
                }
    
                leaf line-identification-option {
                  type empty;
                  description
                    "Enable line identification option ids option";
                }
    
                list user-defined-option-type {
                  key "name";
                  max-elements 256;
                  ordered-by user;
                  description
                    "User-defined option type range";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "User-defined option type low value";
                  }
    
                  container to {
                    description
                      "Upper limit of option type range";
                    uses apply-advanced;
    
                    leaf type-high {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      description
                        "User-defined option type high value";
                    }
                  }  // container to
                }  // list user-defined-option-type
              }  // container destination-header
    
              leaf shim6-header {
                type empty;
                description
                  "Enable ipv6 shim header ids option";
              }
    
              leaf mobility-header {
                type empty;
                description
                  "Enable ipv6 mobility header ids option";
              }
    
              leaf HIP-header {
                type empty;
                description
                  "Enable ipv6 Host Identify Protocol header ids option";
              }
    
              list user-defined-header-type {
                key "name";
                max-elements 256;
                ordered-by user;
                description
                  "User-defined header type range";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "User-defined header type low value";
                }
    
                container to {
                  description
                    "Upper limit of header type range";
                  uses apply-advanced;
    
                  leaf type-high {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 255";
                      }
                    }
                    description
                      "User-defined header type high value";
                  }
                }  // container to
              }  // list user-defined-header-type
            }  // container ipv6-extension-header
    
            leaf ipv6-extension-header-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 32";
                }
              }
              description
                "Enable ipv6 extension header limit ids option";
            }
    
            leaf ipv6-malformed-header {
              type empty;
              description
                "Enable ipv6 malformed header ids option";
            }
    
            container tunnel {
              description
                "Configure IP tunnel ids options";
              uses apply-advanced;
    
              leaf bad-inner-header {
                type empty;
                description
                  "Enable IP tunnel bad inner header ids option";
              }
    
              container gre {
                description
                  "Configure IP tunnel GRE ids option";
                uses apply-advanced;
    
                leaf gre-6in4 {
                  type empty;
                  description
                    "Enable IP tunnel GRE 6in4 ids option";
                }
    
                leaf gre-4in6 {
                  type empty;
                  description
                    "Enable IP tunnel GRE 4in6 ids option";
                }
    
                leaf gre-6in6 {
                  type empty;
                  description
                    "Enable IP tunnel GRE 6in6 ids option";
                }
    
                leaf gre-4in4 {
                  type empty;
                  description
                    "Enable IP tunnel GRE 4in4 ids option";
                }
              }  // container gre
    
              container ip-in-udp {
                description
                  "Configure IP tunnel IPinUDP ids option";
                uses apply-advanced;
    
                leaf teredo {
                  type empty;
                  description
                    "Enable IP tunnel IPinUDP Teredo ids option";
                }
              }  // container ip-in-udp
    
              container ipip {
                description
                  "Configure IP tunnel IPIP ids option";
                uses apply-advanced;
    
                leaf ipip-6to4relay {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 6to4 Relay ids option";
                }
    
                leaf ipip-6in4 {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 6in4 ids option";
                }
    
                leaf ipip-4in6 {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 4in6 ids option";
                }
    
                leaf ipip-4in4 {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 4in4 ids option";
                }
    
                leaf ipip-6in6 {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 6in6 ids option";
                }
    
                leaf ipip-6over4 {
                  type empty;
                  description
                    "Enable IP tunnel IPIP 6over4 ids option";
                }
    
                leaf isatap {
                  type empty;
                  description
                    "Enable IP tunnel IPIP ISATAP ids option";
                }
    
                leaf dslite {
                  type empty;
                  description
                    "Enable IP tunnel IPIP DS-Lite ids option";
                }
              }  // container ipip
            }  // container tunnel
          }  // container ip
    
          container tcp {
            description
              "Configure TCP Layer ids options";
            uses apply-advanced;
    
            leaf syn-fin {
              type empty;
              description
                "Enable SYN and FIN bits set attack ids option";
            }
    
            leaf fin-no-ack {
              type empty;
              description
                "Enable Fin bit with no ACK bit ids option";
            }
    
            leaf tcp-no-flag {
              type empty;
              description
                "Enable TCP packet without flag ids option";
            }
    
            leaf syn-frag {
              type empty;
              description
                "Enable SYN fragment ids option";
            }
    
            leaf syn-defense {
              type empty;
              description
                "Enable tcp syn-defense";
            }
    
            container port-scan {
              presence "enable port-scan";
              description
                "Configure TCP port scan ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 1000000";
                  }
                }
                units
                  "microseconds in which 10 attack packets are detected";
                default "5000";
                description "Threshold";
              }
            }  // container port-scan
    
            container syn-ack-ack-proxy {
              presence
                "enable syn-ack-ack-proxy";
              description
                "Configure syn-ack-ack proxy ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 250000";
                  }
                }
                units
                  "un-authenticated connections";
                default "512";
                description "Threshold";
              }
            }  // container syn-ack-ack-proxy
    
            container syn-flood {
              presence "enable syn-flood";
              description
                "Configure SYN flood ids option";
              uses apply-advanced;
    
              leaf alarm-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "requests per second";
                default "512";
                description "Alarm threshold";
              }
    
              leaf attack-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units
                  "proxied requests per second";
                default "200";
                description "Attack threshold";
              }
    
              leaf source-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "SYN pps";
                default "4000";
                description "Source threshold";
              }
    
              leaf destination-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "SYN pps";
                default "4000";
                description
                  "Destination threshold";
              }
    
              leaf queue-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "200 .. 20000";
                  }
                }
                units
                  "proxied requests in queue";
                default "1024";
                status deprecated;
                description "Queue size";
              }
    
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 50";
                  }
                }
                units "seconds";
                default "20";
                description
                  "SYN flood ager timeout";
              }
    
              list white-list {
                key "name";
                max-elements 2;
                description
                  "Set of IP addresses that will not trigger a screen";
                leaf name {
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                    length "1 .. 32";
                  }
                  description "White-list name";
                }
    
                uses apply-advanced;
    
                leaf-list source-address {
                  type jt:ipprefix;
                  max-elements 32;
                  ordered-by user;
                  description "Source address";
                }
    
                leaf-list destination-address {
                  type jt:ipprefix;
                  max-elements 32;
                  ordered-by user;
                  description
                    "Destination address";
                }
              }  // list white-list
            }  // container syn-flood
    
            leaf land {
              type empty;
              description
                "Enable land attack ids option";
            }
    
            leaf winnuke {
              type empty;
              description
                "Enable winnuke attack ids option";
            }
    
            container tcp-sweep {
              presence "enable tcp-sweep";
              description
                "Configure TCP sweep ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 1000000";
                  }
                }
                units
                  "microseconds in which 10 TCP packets are detected";
                default "5000";
                description "Threshold";
              }
            }  // container tcp-sweep
          }  // container tcp
    
          container udp {
            description
              "Configure UDP layer ids options";
            uses apply-advanced;
    
            container flood {
              presence "enable flood";
              description
                "Configure UDP flood ids option";
              uses apply-advanced;
    
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "UDP packets per second";
                default "1000";
                description "Threshold";
              }
    
              leaf-list white-list {
                type string;
                max-elements 2;
                ordered-by user;
                description
                  "Configure UDP flood white list group name";
              }
            }  // container flood
    
            container udp-sweep {
              presence "enable udp-sweep";
              description
                "Configure UDP sweep ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 1000000";
                  }
                }
                units
                  "microseconds in which 10 UDP packets are detected";
                default "5000";
                description "Threshold";
              }
            }  // container udp-sweep
    
            container port-scan {
              presence "enable port-scan";
              description
                "Configure UDP port scan ids option";
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1000 .. 1000000";
                  }
                }
                units
                  "microseconds in which 10 attack packets are detected";
                default "5000";
                description "Threshold";
              }
            }  // container port-scan
          }  // container udp
    
          container limit-session {
            description "Limit sessions";
            uses apply-advanced;
    
            leaf source-ip-based {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Limit sessions from the same source IP";
            }
    
            leaf destination-ip-based {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Limit sessions to the same destination IP";
            }
    
            container by-source {
              presence "enable by-source";
              description
                "Limit sessions from the same source IP or subnet";
              uses apply-advanced;
    
              leaf maximum-sessions {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Limit sessions on the basis of maximum concurrent sessions";
              }
    
              leaf packet-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Limit sessions on the basis of packet rate";
              }
    
              leaf session-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Limit sessions on the basis of session rate";
              }
    
              container by-protocol {
                presence "enable by-protocol";
                description
                  "Limit sessions on the basis of protocol";
                uses by-protocol-object-type;
              }  // container by-protocol
    
              leaf-list whitelist {
                type string;
                max-elements 10;
                ordered-by user;
                description
                  "Configure white list group name";
              }
            }  // container by-source
    
            container by-destination {
              presence "enable by-destination";
              description
                "Limit sessions to the same destination IP or subnet";
              uses apply-advanced;
    
              leaf maximum-sessions {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Limit sessions on the basis of maximum concurrent sessions";
              }
    
              leaf packet-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Limit sessions on the basis of packet rate";
              }
    
              leaf session-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Limit sessions on the basis of session rate";
              }
    
              container by-protocol {
                presence "enable by-protocol";
                description
                  "Limit sessions on the basis of protocol";
                uses by-protocol-object-type;
              }  // container by-protocol
    
              leaf-list whitelist {
                type string;
                max-elements 10;
                ordered-by user;
                description
                  "Configure white list group name";
              }
            }  // container by-destination
          }  // container limit-session
        }  // grouping ids-option-type
    
        grouping by-protocol-object-type {
          description
            "Configure limit-session on the basis of protocol";
          uses apply-advanced;
    
          container tcp {
            presence "enable tcp";
            description
              "Configure limit-session on the basis of TCP";
            uses by-protocol-object-limit-tcp-type;
          }  // container tcp
    
          container udp {
            presence "enable udp";
            description
              "Configure limit-session on the basis of UDP";
            uses by-protocol-object-limit-type;
          }  // container udp
    
          container icmp {
            presence "enable icmp";
            description
              "Configure limit-session on the basis of ICMP";
            uses by-protocol-object-limit-type;
          }  // container icmp
        }  // grouping by-protocol-object-type
    
        grouping by-protocol-object-limit-tcp-type {
          description
            "Configure the limit-session for tcp protocol";
          uses apply-advanced;
    
          leaf maximum-sessions {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Limit sessions on the basis of maximum concurrent sessions";
          }
    
          leaf packet-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Limit sessions on the basis of packet rate";
          }
    
          leaf session-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Limit sessions on the basis of session rate";
          }
    
          leaf-list whitelist {
            type string;
            max-elements 10;
            ordered-by user;
            description
              "Configure white list group name";
          }
    
          container syn-cookie {
            presence "enable syn-cookie";
            description
              "Configure syn-cookie parameters";
            uses apply-advanced;
    
            leaf mss {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "64 .. 65535";
                }
              }
              description
                "TCP maximum segment size";
            }
    
            leaf threshold-rate {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4294967295";
                }
              }
              description
                "TCP-SYN cps rate to trigger SYN-COOKIE";
            }
    
            leaf threshold-num {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Number of sessions to trigger SYN-COOKIE";
            }
          }  // container syn-cookie
        }  // grouping by-protocol-object-limit-tcp-type
    
        grouping by-protocol-object-limit-type {
          description
            "Configure the limit-session for each protocol";
          uses apply-advanced;
    
          leaf maximum-sessions {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Limit sessions on the basis of maximum concurrent sessions";
          }
    
          leaf packet-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Limit sessions on the basis of packet rate";
          }
    
          leaf session-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Limit sessions on the basis of session rate";
          }
    
          leaf-list whitelist {
            type string;
            max-elements 10;
            ordered-by user;
            description
              "Configure white list group name";
          }
        }  // grouping by-protocol-object-limit-type
    
        grouping ids-wlist-type {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            description "White-list name";
          }
    
          uses apply-advanced;
    
          leaf-list address {
            type jt:ipprefix;
            max-elements 32;
            ordered-by user;
            description "Address";
          }
        }  // grouping ids-wlist-type
    
        grouping ie-filter-object {
          leaf name {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "1 .. 255";
              }
            }
            description "Set IE number";
          }
    
          uses apply-advanced;
    
          list instance {
            key "name";
            description "Set instance";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "0 .. 11";
                }
              }
              description "Set instance number";
            }
    
            uses apply-advanced;
    
            container grouped-ie-profile {
              description
                "Set GTP IE filter for grouped IE";
              uses apply-advanced;
    
              leaf grpie-prf-name {
                junos:must "(("security gprs gtp grouped-ie-profile $$" || "security gtp grouped-ie-profile $$"))";
                junos:must-message "referenced grouped-ie-profile not found";
                type string {
                  length "1 .. 23";
                }
                description
                  "Set grouped IE profile";
              }
            }  // container grouped-ie-profile
          }  // list instance
        }  // grouping ie-filter-object
    
        grouping ims-connection-type {
          description
            "Identity management connection";
          uses apply-advanced;
    
          leaf connect-method {
            type enumeration {
              enum "https" {
                value 0;
                description "HTTPS connection";
              }
              enum "http" {
                value 1;
                description "HTTP connection";
              }
            }
            description "Method of connection";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            default "443";
            description "Server port";
          }
    
          container primary {
            description "Primary server";
            uses server-connection-type;
          }  // container primary
    
          container secondary {
            description "Secondary server";
            uses server-connection-type;
          }  // container secondary
    
          leaf token-api {
            type string {
              length "1 .. 128";
            }
            description
              "API of acquiring token for OAuth2 authentication";
          }
    
          leaf query-api {
            type string {
              length "4 .. 128";
            }
            description "Query API";
          }
        }  // grouping ims-connection-type
    
        grouping ims-traceoptions-type {
          description
            "Identity management tracing 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
    
          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";
              }
            }
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description
                    "Trace identity management all modules";
                }
                enum "authentication-management" {
                  value 1;
                  description
                    "Trace advanced-query auth table management module";
                }
                enum "configuration" {
                  value 2;
                  description
                    "Trace identity management configuration";
                }
                enum "dispatcher" {
                  value 3;
                  description
                    "Trace dispatcher module";
                }
                enum "query" {
                  value 4;
                  description
                    "Trace query process";
                }
                enum "jims-validator-query" {
                  value 5;
                  description
                    "Trace jims validator query process";
                }
                enum "memory" {
                  value 6;
                  description "Trace memory";
                }
              }
            }
          }  // list flag
        }  // grouping ims-traceoptions-type
    
        grouping jims-validator-type {
          description
            "Web server from JIMS for Validate or group query request";
          uses apply-advanced;
    
          leaf address {
            type string {
              length "1 .. 128";
            }
            description
              "IP address or hostname of web server";
          }
    
          leaf client-id {
            type string {
              length "1 .. 64";
            }
            description
              "Client ID for OAuth2 grant";
          }
    
          leaf client-secret {
            type string {
              length "1 .. 128";
            }
            description
              "Client secret for OAuth2 grant";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            default "591";
            description "Web server port";
          }
        }  // grouping jims-validator-type
    
        grouping jsf_application_traffic_control_rule_set_type {
          description
            "Define service application traffic rule-set reference";
          uses apply-advanced;
    
          leaf rule-set {
            junos:must "("class-of-service application-traffic-control rule-sets $$")";
            junos:must-message "rule-set must be defined";
            type string {
              length "1 .. 64";
            }
            description "Service rule-set name";
          }
        }  // grouping jsf_application_traffic_control_rule_set_type
    
        grouping juniper-enhanced-category-type {
          description
            "Juniper enhanced category type";
          leaf name {
            type string {
              length "1 .. 59";
            }
            description
              "Name of Juniper enhanced category";
          }
    
          uses apply-advanced;
    
          leaf action {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action to perform when web traffic matches category";
          }
    
          leaf custom-message {
            junos:must "("security utm custom-objects custom-message $$")";
            junos:must-message "custom-message must be defined";
            type string;
            description "Custom message";
          }
        }  // grouping juniper-enhanced-category-type
    
        grouping juniper-enhanced-server {
          description
            "Server handling categorization requests";
          uses apply-advanced;
    
          leaf host {
            type string;
            description
              "Server host IP address or string host name";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            description "Server port";
          }
    
          leaf proxy-profile {
            junos:must "("services proxy profile $$")";
            junos:must-message "Referenced Proxy profile must be defined";
            type string {
              length "1 .. 64";
            }
            description "Proxy profile";
          }
    
          leaf routing-instance {
            junos:must "("routing-instances $$")";
            junos:must-message "Routing-instance must be defined";
            type string;
            description "Routing instance name";
          }
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Source ip address used to connect server";
          }
        }  // grouping juniper-enhanced-server
    
        grouping juniper-enhanced-site-reputation-setting {
          description
            "Juniper enhanced site reputation settings";
          uses apply-advanced;
    
          leaf very-safe {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action when site reputation is very safe";
          }
    
          leaf moderately-safe {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action when site reputation is moderately safe";
          }
    
          leaf fairly-safe {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action when site reputation is fairly safe";
          }
    
          leaf suspicious {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action when site reputation is suspicious";
          }
    
          leaf harmful {
            type enumeration {
              enum "permit" {
                value 0;
              }
              enum "log-and-permit" {
                value 1;
              }
              enum "block" {
                value 2;
              }
              enum "quarantine" {
                value 3;
              }
            }
            description
              "Action when site reputation is harmful";
          }
        }  // grouping juniper-enhanced-site-reputation-setting
    
        grouping juniper-routing-instance {
          description "Routing instance";
          leaf 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 name";
          }
    
          uses apply-advanced;
    
          container vlans {
            junos:must "((".. instance-type virtual-switch" || ".. instance-type mac-vrf"))";
            junos:must-message "'vlans' configuration can only be used for 'instance-type virtual-switch' or 'instance-type mac-vrf'";
            junos:must "(!("bridge-domains"))";
            junos:must-message "VLANs cannot be configured when BDs are configured";
            description "VLAN configuration";
            uses apply-advanced;
    
            list vlan {
              key "name";
              description "Virtual LAN";
              uses vlan-types;
            }  // list vlan
          }  // container vlans
    
          container protocols {
            junos:must "((!(". pim") || (".. instance-type" && !(".. instance-type no-forwarding"))))";
            junos:must-message "pim configuration is not allowed for 'instance-type no-forwarding'";
            description
              "Routing protocol configuration";
            uses apply-advanced;
    
            container bfd {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "bfd configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "bfd configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "bfd configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "bfd configuration is not allowed for 'instance-type virtual-switch'";
              presence "enable bfd";
              uses juniper-ri-protocols-bfd;
            }  // container bfd
    
            container igmp-snooping {
              junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || ".. .. instance-type virtual-switch"))))";
              junos:must-message "igmp-snooping configuration is allowed only for 'instance-type vpls/virtual-switch/evpn/mac-vrf'";
              junos:must "(!(".. pim-snooping"))";
              junos:must-message "igmp-snooping configuration do not co-exist with pim-snooping";
              junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || (".. .. instance-type virtual-switch " && !(".. vpls"))))))";
              junos:must-message "igmp-snooping configuration is allowed only for 'instance-type vpls/evpn/mac-vrf or instance-type virtual-switch without vpls'";
              presence "enable igmp-snooping";
              description
                "IGMP snooping configuration";
              uses juniper-ri-protocols-igmp-snooping;
            }  // container igmp-snooping
    
            container mld-snooping {
              junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || ".. .. instance-type virtual-switch")))";
              junos:must-message "mld-snooping configuration is allowed only for 'instance-type vpls/virtual-switch/evpn'";
              junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || (".. .. instance-type virtual-switch " && !(".. vpls"))))))";
              junos:must-message "mld-snooping configuration is allowed only for 'instance-type vpls/evpn/mac-vrf or instance-type virtual-switch without vpls'";
              presence "enable mld-snooping";
              description
                "MLD snooping configuration";
              uses juniper-ri-protocols-mld-snooping;
            }  // container mld-snooping
    
            container amt {
              junos:must "(!(".. .. instance-type no-forwarding"))";
              junos:must-message "amt configuration is not allowed for 'instance-type no-forwarding'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "amt configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "amt configuration is not allowed for 'instance-type virtual-switch'";
              description
                "AMT relay configuration";
              uses juniper-protocols-amt;
            }  // container amt
    
            container bgp {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "bgp configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "bgp configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "bgp configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "bgp configuration is not allowed for 'instance-type virtual-switch'";
              description "BGP options";
              uses juniper-protocols-bgp;
            }  // container bgp
    
            container esis {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "esis configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "esis configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "esis configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "esis configuration is not allowed for 'instance-type virtual-switch'";
              description "ES-IS configuration";
              uses juniper-protocols-esis;
            }  // container esis
    
            container router-discovery {
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "This configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "This configuration is not allowed for 'instance-type virtual-switch'";
              description
                "ICMP router discovery options";
              uses juniper-protocols-router-discovery;
            }  // container router-discovery
    
            container isis {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "isis configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "isis configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "isis configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "isis configuration is not allowed for 'instance-type virtual-switch'";
              description "IS-IS configuration";
              uses juniper-protocols-isis;
            }  // container isis
    
            container l2vpn {
              junos:must "(!(".. evpn"))";
              junos:must-message "This configuration is not allowed with 'protocols evpn'";
              junos:must "(!(".. vpls"))";
              junos:must-message "This configuration is not allowed with 'protocols vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "This configuration is not allowed for 'instance-type layer2-control'";
              description
                "Layer 2 VPN configuration";
              uses juniper-protocols-l2vpn;
            }  // container l2vpn
    
            container vpls {
              junos:must "(!(".. .. instance-type mac-vrf"))";
              junos:must-message "This configuration is not allowed for instance-type mac-vrf";
              junos:must "(!((".. .. instance-type virtual-switch" && ".. evpn")))";
              junos:must-message "This configuration is not allowed for instance-type virtual-switch with 'protocols evpn' enabled";
              junos:must "(!(".. l2vpn"))";
              junos:must-message "This configuration is not allowed with 'protocols l2vpn'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "This configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(".. vpls no-tunnel-services")";
              junos:must-message "'no-tunnel-services' must be configured under 'protocols vpls' to enable vpls";
              presence "enable vpls";
              description "VPLS configuration";
              uses juniper-protocols-l2vpn;
            }  // container vpls
    
            container ldp {
              junos:must "((!(".. ldp p2mp") || (".. ldp p2mp" && !(".. .. instance-type virtual-router"))))";
              junos:must-message "p2mp under ldp is not allowed for 'instance-type virtual-router'";
              junos:must "((!(".. ldp p2mp") || (".. ldp p2mp" && !(".. .. instance-type vrf"))))";
              junos:must-message "p2mp under ldp is not allowed for 'instance-type vrf'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "ldp configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "ldp configuration is not allowed for 'instance-type virtual-switch'";
              description "LDP configuration";
              uses juniper-protocols-ldp;
            }  // container ldp
    
            container mpls {
              junos:must "(!(".. .. instance-type evpn"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type evpn'";
              junos:must "(!(".. .. instance-type mpls-internet-multicast"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type mpls-internet-multicast'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type atmvpn"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type atmvpn'";
              junos:must "(!(".. .. instance-type l2backhaul-vpn"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type l2backhaul-vpn'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type virtual-switch'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type no-forwarding"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type no-forwarding'";
              junos:must "(!(".. .. instance-type forwarding"))";
              junos:must-message "mpls configuration is not allowed for 'instance-type forwarding'";
              description "MPLS configuration";
              uses juniper-protocols-mpls;
            }  // container mpls
    
            container msdp {
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "msdp configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "msdp configuration is not allowed for 'instance-type virtual-switch'";
              description "MSDP configuration";
              uses juniper-protocols-msdp;
            }  // container msdp
    
            container mvpn {
              junos:must "((!("system processes routing bgp rib-sharding") || (!(".. .. protocols bgp group") || (!(".. .. routing-options auto-export") || "system processes routing bgp rib-sharding no-l3vpn"))))";
              junos:must-message "Auto-export of BGP learned routes will not work with sharding MVPN context";
              junos:must "((".. pim" || (".. .. instance-type mpls-internet-multicast" || (".. .. provider-tunnel inter-as" || ".. .. provider-tunnel inter-region"))))";
              junos:must-message "MVPN configuration requires PIM configuration in the VRF or MPLS internet multicast instance";
              junos:must "((!("routing-options nonstop-routing") || (".. .. route-distinguisher" || (".. pim mvpn" || ".. .. instance-type mpls-internet-multicast"))))";
              junos:must-message "Nonstop routing and auto-rd mvpn instance may not be configured together";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "mvpn configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "mvpn configuration is not allowed for 'instance-type virtual-switch'";
              presence "enable mvpn";
              description
                "BGP-MVPN configuration";
              uses juniper-protocols-mvpn;
            }  // container mvpn
    
            container ospf {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type virtual-switch'";
              description "OSPF configuration";
              uses juniper-protocols-ospf;
            }  // container ospf
    
            container ospf3 {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "ospf configuration is not allowed for 'instance-type virtual-switch'";
              description "OSPF3 configuration";
              uses juniper-protocols-ospf3;
            }  // container ospf3
    
            container pim {
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "pim configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "pim configuration is not allowed for 'instance-type virtual-switch'";
              description "PIM configuration";
              uses juniper-protocols-pim;
            }  // container pim
    
            container ripng {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "ripng configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "ripng configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "ripng configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "ripng configuration is not allowed for 'instance-type virtual-switch'";
              description "RIPng options";
              uses juniper-protocols-ripng;
            }  // container ripng
    
            container rip {
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "rip configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "rip configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "rip configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "rip configuration is not allowed for 'instance-type virtual-switch'";
              description "RIP options";
              uses juniper-protocols-rip;
            }  // container rip
    
            container rsvp {
              junos:must "(!(".. .. instance-type evpn"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type evpn'";
              junos:must "(!(".. .. instance-type mpls-internet-multicast"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type mpls-internet-multicast'";
              junos:must "(!(".. .. instance-type layer2-control"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type layer2-control'";
              junos:must "(!(".. .. instance-type atmvpn"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type atmvpn'";
              junos:must "(!(".. .. instance-type l2backhaul-vpn"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type l2backhaul-vpn'";
              junos:must "(!(".. .. instance-type virtual-switch"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type virtual-switch'";
              junos:must "(!(".. .. instance-type vpls"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type vpls'";
              junos:must "(!(".. .. instance-type l2vpn"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type l2vpn'";
              junos:must "(!(".. .. instance-type no-forwarding"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type no-forwarding'";
              junos:must "(!(".. .. instance-type forwarding"))";
              junos:must-message "rsvp configuration is not allowed for 'instance-type forwarding'";
              description "RSVP configuration";
              uses juniper-protocols-rsvp;
            }  // container rsvp
    
            container pim-snooping {
              junos:must "(!(".. .. routing-interface"))";
              junos:must-message "routing-interface can not be configured when pim-snooping is configured";
              junos:must "(!(".. igmp-snooping"))";
              junos:must-message "pim-snooping configuration can not coexist with igmp-snooping";
              junos:must "(".. .. instance-type vpls")";
              junos:must-message "pim-snooping configuration is allowed only for 'instance-type vpls'";
              presence "enable pim-snooping";
              description
                "PIM snooping configuration";
              uses juniper-protocols-pim-snooping;
            }  // container pim-snooping
    
            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 is not allowed";
              junos:must "(".. .. instance-type virtual-switch")";
              junos:must-message "mvrp is allowed only in virtual-switch instance";
              description "MVRP configuration";
              uses juniper-protocols-mvrp;
            }  // container mvrp
    
            container rstp {
              junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))";
              junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance";
              description "RSTP configuration";
              uses juniper-protocols-stp;
            }  // container rstp
    
            container mstp {
              junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))";
              junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance";
              description "MSTP configuration";
              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";
              junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))";
              junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance";
              description "VSTP configuration";
              uses juniper-protocols-vstp;
            }  // container vstp
          }  // container protocols
    
          list interface {
            key "name";
            description
              "Interface name for this routing instance";
            leaf name {
              junos:must "((!("interfaces $$-IFL etree-ac-role") || ".. .. protocols evpn evpn-etree"))";
              junos:must-message "etree must be enabled under routing-instance";
              junos:must "(!(("interfaces $$-IFL family bridge interface-mode" && ".. .. instance-type evpn")))";
              junos:must-message "access/trunk interfaces are not allowed in evpn instance";
              junos:must "((!(("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-tags inner-list")) || !((".. .. vlan-id" || ".. .. vlan-tags"))))";
              junos:must-message "interface with vlan-id-list/inner-list cannot be added to routing-instance with a vlan-id/vlan-tags configured";
              junos:must "((!(("interfaces $$-IFL family bridge interface-mode" || "interfaces $$-IFL family ethernet-switching")) || (".. .. instance-type virtual-switch" || ".. .. instance-type mac-vrf")))";
              junos:must-message "Interface with 'interface-mode' is allowed only in a virtual-switch or mac-vrf instance";
              junos:must "((!(".. .. instance-type virtual-switch") || ("interfaces $$-IFL family bridge interface-mode" || "interfaces $$-IFL family ethernet-switching")))";
              junos:must-message "Only interface with 'interface-mode' is allowed in a virtual-switch";
              junos:must "(!(".. .. .. routing-instances bridge-domains interfaces $$"))";
              junos:must-message "The interface cannot be defined both at routing-instance and bridge-domain level";
              junos:must "((!("interfaces $$-IFL vlan-id-range") || (".. .. instance-type vpls" || ".. .. instance-type evpn")))";
              junos:must-message "vlan-id-range is specified for this logical interface; the routing instance must be of type vpls or evpn";
              junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || (".. .. vlan-id inner-all" || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))))";
              junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured";
              junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))";
              junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled";
              type string;
            }
    
            uses apply-advanced;
    
            choice mode {
              leaf any {
                type empty;
                description
                  "Interface used for both unicast and multicast traffic";
              }
              leaf unicast {
                type empty;
                description
                  "Interface used for unicast traffic only";
              }
              leaf multicast {
                type empty;
                description
                  "Interface used for multicast traffic only";
              }
            }  // choice mode
    
            leaf primary {
              junos:must "(!(".. unicast"))";
              junos:must-message "'primary' option can not be configured for unicast interface";
              junos:must "((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))";
              junos:must-message "'primary' option can only be configured for instance-type 'vrf' or 'mpls-internet-multicast'";
              type empty;
              description
                "Preferred multicast vt interface for the routing-instance";
            }
    
            leaf protect-interface {
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be part of this routing instance";
              junos:must "(!("interfaces ${inter_name} esi"))";
              junos:must-message "ESI can not be configured for protect interface";
              junos:must "("routing-instances ${instance} protocols evpn")";
              junos:must-message "Protocol EVPN must be configured in the evpn instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Name of protect interface";
            }
          }  // list interface
    
          leaf description {
            type string {
              junos:posix-pattern "^.{1,255}$";
              junos:pattern-message "Must be a string of 255 characters or less";
            }
            description
              "Text description of routing instance";
          }
    
          leaf vlan-model {
            type enumeration {
              enum "one-to-one" {
                value 0;
                description
                  "Customer VLAN model (1:1)";
              }
            }
            description
              "Subscriber vlan-model in L2Wholesale framework";
          }
    
          container vtep-source-interface {
            description
              "Source layer-3 IFL for VXLAN";
            leaf interface-name {
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be defined";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
            }
    
            choice family {
              container inet {
                presence "enable inet";
                description "IPv4 source";
                uses apply-advanced;
              }  // container inet
              container inet6 {
                junos:must "((!("routing-instances ${instance} protocols evpn") || "routing-instances ${instance} protocols evpn encapsulation vxlan"))";
                junos:must-message "encapsulation vxlan must be enabled for IPv6 underlay";
                presence "enable inet6";
                description "IPv6 source";
                uses apply-advanced;
              }  // container inet6
            }  // choice family
          }  // container vtep-source-interface
    
          container vtep-remote-interface {
            description "Remote VTEP interface";
            uses apply-advanced;
    
            list remote-ip {
              key "name";
              ordered-by user;
              description
                "Remote VTEP IP address";
              leaf name {
                type jt:ipv4addr;
                description "IP address";
              }
    
              uses apply-advanced;
    
              leaf dynamic-profile {
                junos:must "("dynamic-profiles $$")";
                junos:must-message "Dynamic profile must be defined";
                type string;
                description
                  "Define associate dynamic profile";
              }
            }  // list remote-ip
    
            container default {
              description
                "To all remote vtep interface";
              uses apply-advanced;
    
              leaf dynamic-profile {
                junos:must "("dynamic-profiles $$")";
                junos:must-message "Dynamic profile must be defined";
                type string;
                description
                  "Define associate dynamic profile";
              }
            }  // container default
          }  // container vtep-remote-interface
    
          leaf-list remote-vtep-list {
            type jt:ipaddr;
            max-elements 1024;
            description
              "Configure static remote VXLAN tunnel endpoints";
          }
    
          leaf-list remote-vtep-v6-list {
            type jt:ipv6addr;
            max-elements 1024;
            description
              "Configurate static ipv6 remote VXLAN tunnel endpoints";
          }
    
          leaf instance-role {
            type enumeration {
              enum "access" {
                value 0;
                description
                  "Role of Access/Aggregation router";
              }
              enum "nni" {
                value 1;
                description
                  "Role of Provider network interfacing router";
              }
            }
            description
              "Primary role of L2Backhaul-vpn router";
          }
    
          leaf instance-type {
            type enumeration {
              enum "virtual-switch" {
                value 0;
                description
                  "Virtual switch routing instance";
              }
              enum "layer2-control" {
                value 1;
                description
                  "Layer 2 control protocols";
              }
              enum "mac-vrf" {
                junos:must "((".. bridge-domains" || ".. vlans"))";
                junos:must-message "bridge-domains must be configured for mac-vrf instance";
                junos:must "(".. service-type")";
                junos:must-message "service-type must be configured for mac-vrf instance";
                junos:must "("routing-instances ${instance} protocols evpn")";
                junos:must-message "Protocol EVPN must be configured in the mac-vrf instance";
                value 2;
                description
                  "MAC-VRF routing instance";
              }
              enum "forwarding" {
                value 3;
                description
                  "Forwarding instance";
              }
              enum "no-forwarding" {
                value 4;
                description
                  "Nonforwarding instance";
              }
              enum "l2vpn" {
                value 5;
                description
                  "Layer 2 VPN routing instance";
              }
              enum "vpls" {
                value 6;
                description
                  "VPLS routing instance";
              }
              enum "virtual-router" {
                value 7;
                description
                  "Virtual routing instance";
              }
              enum "l2backhaul-vpn" {
                junos:must "(".. instance-role")";
                junos:must-message "'instance-role' statement must be configured for l2backhaul-vpn instance";
                junos:must "(".. no-local-switching")";
                junos:must-message "'no-local-switching' statement must be configured for l2backhaul-vpn instance";
                junos:must "(".. vlan-model")";
                junos:must-message "'vlan-model' statement must be configured for l2backhaul-vpn instance";
                value 8;
                description
                  "L2Backhaul/L2Wholesale routing instance";
              }
              enum "mpls-internet-multicast" {
                junos:must "(("protocols pim" || ".. provider-tunnel inter-region"))";
                junos:must-message "Protocol PIM must be configured in the master instance";
                value 9;
                description
                  "Internet Multicast over MPLS routing instance";
              }
              enum "evpn" {
                junos:must "("routing-instances ${instance} protocols evpn")";
                junos:must-message "Protocol EVPN must be configured in the evpn instance";
                value 10;
                description
                  "EVPN routing instance";
              }
              enum "mpls-forwarding" {
                value 11;
                description
                  "Routing instance provides a MPLS forwarding-context";
              }
              enum "evpn-vpws" {
                junos:must "("routing-instances ${instance} protocols evpn")";
                junos:must-message "Protocol EVPN must be configured in the evpn-vpws instance";
                value 12;
                description
                  "EVPN VPWS routing instance";
              }
              enum "vrf" {
                value 13;
                description
                  "Virtual routing forwarding instance";
              }
            }
            description
              "Type of routing instance";
          }
    
          choice vlan_choice {
            leaf vlan-id {
              junos:must "(!(".. instance-type mac-vrf"))";
              junos:must-message "'vlan-id' must be configured within bridge-domains for 'instance-type mac-vrf'";
              junos:must "((".. instance-type vpls" || ".. instance-type evpn"))";
              junos:must-message "'vlan-id' statement can be included only for a VPLS or EVPN";
              type string;
              description
                "IEEE 802.1q VLAN identifier for bridging domain";
            }
            container vlan-tags {
              junos:must "(".. instance-type vpls")";
              junos:must-message "'vlan-tags' statement can be included only for VPLS instance";
              presence "enable vlan-tags";
              description
                "IEEE 802.1q VLAN tags for bridging domain";
              leaf outer {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
    
              leaf inner {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
            }  // container vlan-tags
          }  // choice vlan_choice
    
          container system {
            description "System parameters";
            uses apply-advanced;
    
            container services {
              description "System services";
              uses apply-advanced;
    
              container dhcp-local-server {
                description
                  "Dynamic Host Configuration Protocol server configuration";
                uses jdhcp-local-server-type;
              }  // container dhcp-local-server
    
              container static-subscribers {
                description
                  "Static Subscriber Client configuration";
                uses jsscd-static-subscribers-type;
              }  // container static-subscribers
            }  // container services
          }  // container system
    
          container access {
            description
              "Network access configuration";
            uses apply-advanced;
    
            container address-assignment {
              description
                "Address assignment configuration";
              uses address-assignment-type;
            }  // container address-assignment
    
            container address-protection {
              presence
                "enable address-protection";
              description
                "Initiate Duplicate Address Protection";
              uses apply-advanced;
    
              leaf reassign-on-match {
                type empty;
                description
                  "Disconnect owning session and reassign to this session";
              }
            }  // container address-protection
          }  // container access
    
          container access-profile {
            description
              "Access profile for this instance";
            leaf access-profile-name {
              junos:must "("access profile $$")";
              junos:must-message "Access-profile must be defined in the [edit access profile] hierarchy";
              type string;
              description "Profile name";
            }
          }  // container access-profile
    
          leaf routing-interface {
            junos:must "(!("interfaces $$-IFL family mpls"))";
            junos:must-message "routing-interface with family mpls cannot be added to VPLS instance";
            junos:must "(!(".. instance-type virtual-switch"))";
            junos:must-message "routing-interface must be configured within bridge-domains for 'instance-type virtual-switch'";
            junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))";
            junos:must-message "routing-interface not valid for vlan-bundle service type";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))";
            junos:must-message "routing-interface cannot be configured under routing-instance with 'vlan-id all' or 'vlan-id inner-all'";
            junos:must "((".. vlan-id" || ".. vlan-tags"))";
            junos:must-message "routing-interface can be configured only under routing-instance with 'vlan-id' or 'vlan-tags'";
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Routing interface name for this routing-instance";
          }
    
          container vxlan {
            junos:must "((". ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || (". ingress-node-replication" || ("routing-instances ${instance} switch-options ovsdb-managed" || "routing-instances ${instance} protocols evpn encapsulation vxlan"))))))";
            junos:must-message "multicast-group or multicast-v6-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan should be enabled. ingress-node-replication must be configured when remote-vtep-list is configured";
            junos:must "((". ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || "routing-instances ${instance} protocols evpn encapsulation vxlan")))))))";
            junos:must-message "One of multicast-group or multicast-v6-group or ovsdb-managed or protocols evpn encapsulation vxlan or remote-vtep-list or remote-vtep-v6-list should be enabled";
            junos:must "((".. vlan-id" || (".. instance-type vpls" || (".. instance-type evpn" && ".. vxlan decapsulate-accept-inner-vlan"))))";
            junos:must-message "decapsulate-accept-inner-vlan must be configured when vlan-id is not present for evpn vxlan";
            junos:must "((".. vlan-id" || (".. instance-type vpls" || (".. instance-type evpn" && ".. vxlan encapsulate-inner-vlan"))))";
            junos:must-message "encapsulate-inner-vlan must be configured when vlan-id is not present for evpn vxlan";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))";
            junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or  'vlan-id inner-all'";
            junos:must "(!(".. instance-type mac-vrf"))";
            junos:must-message "vxlan must be configured within bridge-domains for 'instance-type mac-vrf'";
            junos:must "(!(".. instance-type virtual-switch"))";
            junos:must-message "vxlan must be configured within bridge-domains for 'instance-type virtual-switch'";
            junos:must "((".. instance-type vpls" || ".. instance-type evpn"))";
            junos:must-message "vxlan in routing-instance is valid only for instance-type vpls or evpn";
            junos:must "("routing-instances ${instance} vtep-source-interface")";
            junos:must-message "vtep-source-interface is required for VXLAN configuration";
            description "VXLAN options";
            uses apply-advanced;
    
            leaf ovsdb-managed {
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || ".. multicast-group")))";
              junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group";
              type empty;
              description
                "Managed remotely via VXLAN OVSDB Controller";
            }
    
            leaf vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16777214";
                }
              }
              description "VXLAN identifier";
            }
    
            leaf translation-vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777214";
                }
              }
              description
                "Translated VXLAN identifier";
            }
    
            leaf multicast-group {
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. ovsdb-managed" || (".. multicast-v6-group" || "routing-instances ${instance} switch-options ovsdb-managed")))))";
              junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed or multicast-v6-group";
              type jt:ipv4addr;
              description
                "Multicast group registered for VXLAN segment";
            }
    
            leaf multicast-v6-group {
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. ovsdb-managed" || (".. multicast-group" || "routing-instances ${instance} switch-options ovsdb-managed")))))";
              junos:must-message "multicast-v6-group not valid with remote-vtep-list or ovsdb-managed or multicast-group";
              type jt:ipv6addr;
              description
                "Multicast IPv6 group registered for VXLAN segment";
            }
    
            leaf encapsulate-inner-vlan {
              junos:must "(!(".. .. vlan-id none"))";
              junos:must-message "encapsulate inner vlan not valid with vlan-id none ";
              type empty;
              description
                "Retain inner VLAN in the packet";
            }
    
            leaf decapsulate-accept-inner-vlan {
              junos:must "(!(".. .. vlan-id none"))";
              junos:must-message "accept inner vlan not valid with vlan-id none";
              type empty;
              description
                "Accept VXLAN packets with inner VLAN";
            }
    
            leaf unreachable-vtep-aging-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "300 .. 1800";
                }
              }
              units "seconds";
              description
                "Unreachable VXLAN tunnel endpoint removal timer";
            }
    
            leaf ingress-node-replication {
              junos:must "(!(".. .. .. .. protocols evpn assisted-replication"))";
              junos:must-message "ingress-node-replication cannot be configured with assisted-replication";
              junos:must "((".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || "routing-instances ${instance} protocols evpn encapsulation vxlan")))))";
              junos:must-message "Valid for ovsdb-managed instance or with remote-vtep-list or remote-vtep-v6-list or evpn vxlan";
              type empty;
              description
                "Enable ingress node replication";
            }
          }  // container vxlan
    
          leaf no-local-switching {
            junos:must "((".. instance-type vpls" || ((".. instance-type evpn" && ".. protocols vpls") || ".. instance-type l2backhaul-vpn")))";
            junos:must-message "'no-local-switching' statement can be configured only for VPLS instances";
            type empty;
            description
              "Disable local switching within CE-facing interfaces";
          }
    
          leaf no-normalization {
            type empty;
            description
              "Disable vlan id normalization for interfaces";
          }
    
          leaf qualified-bum-pruning-mode {
            junos:must "((".. instance-type vpls" || (".. instance-type evpn" && ".. protocols vpls")))";
            junos:must-message "'bum-pruning-mode' statement can be configured only for VPLS instances!";
            type empty;
            description
              "Enable BUM pruning for VPLS instance";
          }
    
          leaf no-irb-layer-2-copy {
            junos:must "((".. routing-interface" || ".. l3-interface"))";
            junos:must-message "routing-interface/l3-interface must be configured for this feature";
            type empty;
            description
              "Disable transmission of layer-2 copy of packets of irb routing-interface";
          }
    
          leaf connector-id-advertise {
            type empty;
            description
              "Advertise connector-id attribute";
          }
    
          container forwarding-options {
            description
              "Forwarding options configuration";
            uses juniper-forwarding-options;
          }  // container forwarding-options
    
          container bridge-domains {
            junos:must "((".. instance-type virtual-switch" || ".. instance-type mac-vrf"))";
            junos:must-message "'bridge-domains' configuration can only be used for 'instance-type virtual-switch' or 'instance-type mac-vrf'";
            description
              "Bridge domain configuration";
            uses apply-advanced;
    
            list domain {
              key "name";
              uses juniper-bridge-domains;
            }  // list domain
          }  // container bridge-domains
    
          container switch-options {
            junos:must "(".. instance-type virtual-switch")";
            junos:must-message "This configuration is allowed for only 'instance-type virtual-switch'";
            description
              "L2 options for routing-instance of type virtual-switch";
            uses juniper-routing-instance-switch-options;
          }  // container switch-options
    
          container pbb-options {
            junos:must "(!(".. protocols evpn"))";
            junos:must-message "pbb-options are not supported with protocol evpn";
            junos:must "(!(".. protocols vpls"))";
            junos:must-message "PBB is not supported with protocol vpls";
            junos:must "(".. instance-type virtual-switch")";
            junos:must-message "This configuration is allowed for only 'instance-type virtual-switch'";
            description
              "Provider backbone bridging options for routing-instance";
            uses juniper-routing-instance-pbb-options;
          }  // container pbb-options
    
          list service-groups {
            junos:must "(!(".. protocols vpls"))";
            junos:must-message "PBB is not supported with protocol vpls";
            junos:must "(".. instance-type virtual-switch")";
            junos:must-message "This configuration is allowed for only 'instance-type virtual-switch'";
            key "name";
            description
              "Service group configuration for routing-instance";
            uses juniper-routing-instance-service-groups;
          }  // list service-groups
    
          leaf service-type {
            junos:must "(".. instance-type mac-vrf")";
            junos:must-message "service-type config is allowed for instance type mac-vrf only";
            type enumeration {
              enum "vlan-based" {
                value 0;
                description
                  "Instance service type vlan-based";
              }
              enum "vlan-bundle" {
                value 1;
                description
                  "Instance service type vlan-bundle";
              }
              enum "vlan-aware" {
                value 2;
                description
                  "Instance service type vlan-aware";
              }
            }
            description "Sevice type";
          }
    
          container l2vpn-id {
            description
              "Layer-2 vpn-id for this instance";
            uses apply-advanced;
    
            leaf community {
              junos:must "(!(".. .. protocols vpls neighbor"))";
              junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the default mesh-group";
              junos:must "(!(".. .. protocols vpls vpls-id"))";
              junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the default mesh-group";
              junos:must "(!(".. .. protocols vpls site"))";
              junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the same instance";
              junos:must "(!(".. .. protocols vpls site-range"))";
              junos:must-message "site-range is not supported for FEC129 LDP VPLS";
              junos:must "(!(".. .. protocols vpls mac-flush"))";
              junos:must-message "mac-flush is not supported for FEC129 LDP VPLS";
              junos:must "(!(".. .. protocols vpls label-block-size"))";
              junos:must-message "label-block-size is not supported for FEC129 LDP VPLS";
              junos:must "(!(".. .. protocols vpls connectivity-type"))";
              junos:must-message "connectivity-type is not supported for FEC129 LDP VPLS";
              junos:must "(!(".. .. protocols vpls community"))";
              junos:must-message "community is not supported for FEC129 LDP VPLS";
              junos:must "(!(".. .. provider-tunnel"))";
              junos:must-message "provider-tunnel is not supported for FEC129 LDP VPLS/VPWS";
              type string {
                junos:posix-pattern "^(l2vpn-id)+:[0-9.]+:[0-9]+$";
                junos:pattern-message "Use format 'l2vpn-id:x:y' where 'x' is 2 byte AS number, or an IP address and 'y' is a number. e.g. l2vpn-id:1:100, l2vpn-id:1.2.3.4:100";
              }
              description
                "L2VPN ID community for FEC129 VPLS/VPWS with BGP auto-discovery";
            }
          }  // container l2vpn-id
    
          container routing-options {
            description
              "Protocol-independent routing option configuration";
            uses juniper-routing-options;
          }  // container routing-options
    
          container egress-protection {
            description
              "Egress instance protection";
            uses apply-advanced;
    
            leaf protector {
              junos:must "(any "protocols mpls egress-protection context-identifier <*> protector")";
              junos:must-message "context-identifier must be type protector";
              type empty;
              description
                "Enable Edge Protector functionality for this VPN";
            }
    
            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
          }  // container egress-protection
    
          container route-distinguisher {
            description
              "Route distinguisher for this instance";
            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
    
          leaf-list vrf-import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy for VRF instance RIBs";
          }
    
          leaf-list vrf-export {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Export policy for VRF instance RIBs";
          }
    
          container vrf-target {
            description
              "VRF 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";
            }
    
            leaf auto {
              junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || ".. .. instance-type mac-vrf")))";
              junos:must-message "vrf-target auto is meant only for evpn or virtual-switch instance or mac-vrf";
              type empty;
              description
                "Auto derive import and export target community from BGP AS & L2";
            }
          }  // container vrf-target
    
          leaf no-vrf-advertise {
            type empty;
            description
              "Don't advertise this instance to remote PEs";
          }
    
          leaf non-forwarding-vrf {
            junos:must "(".. provider-tunnel inter-as")";
            junos:must-message "Inter-AS segmented p-tunnel configuration is required";
            type empty;
            description
              "Don't create VRF forwarding table for local or transit routes belonging to this VPN";
          }
    
          container vrf-advertise-selective {
            junos:must "(!(".. no-vrf-advertise"))";
            junos:must-message "Selective vrf advertise cannot be used with no-vrf-advertise knob";
            presence
              "enable vrf-advertise-selective";
            description
              "Override no-vrf-advertise knob for the specified address family";
            uses apply-advanced;
    
            container family {
              description
                "Protocol family to be selectively advertised";
              uses apply-advanced;
    
              leaf inet-mvpn {
                type empty;
                description
                  "IPv4 MVPN Address Family";
              }
    
              leaf inet6-mvpn {
                type empty;
                description
                  "IPv6 MVPN Address Family";
              }
            }  // container family
          }  // container vrf-advertise-selective
    
          container vrf-table-label {
            presence "enable vrf-table-label";
            description
              "Advertise a single VPN label for all routes in the VRF";
            leaf static {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "16 .. 1048575";
                }
              }
              description
                "Specify label value to be used";
            }
    
            leaf source-class-usage {
              type empty;
              description
                "Enable source class usage";
            }
          }  // container vrf-table-label
    
          choice vrf-propagate-ttl-or-no-vrf-propagate-ttl {
            leaf no-vrf-propagate-ttl {
              type empty;
              description
                "Disable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)";
            }
            leaf vrf-propagate-ttl {
              type empty;
              description
                "Enable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)";
            }
          }  // choice vrf-propagate-ttl-or-no-vrf-propagate-ttl
    
          container provider-tunnel {
            junos:must "(!((". inter-as" && ". selective")))";
            junos:must-message "Selective p-tunnel configuration not allowed on ASBR";
            junos:must "(!((" .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))";
            junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf";
            junos:must "((!(".. non-forwarding-vrf") || ". inter-as"))";
            junos:must-message "Non-forwarding VRF can only be configured with Inter-AS segmented p-tunnels";
            description
              "Provider tunnel configuration";
            uses apply-advanced;
    
            container external-controller {
              junos:must "((".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast")))";
              junos:must-message "External point-to-multipoint LSP provider can be configured only for MVPN instances";
              description
                "External point-to-multipoint LSP provider for flooding";
              uses apply-advanced;
    
              choice external-provider {
                leaf pccd {
                  type empty;
                  description
                    "Use PCCD for external point-to-multipoint LSP computation entity";
                }
              }  // choice external-provider
            }  // container external-controller
    
            choice tunnel-type {
              container rsvp-te {
                junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn encapsulation vxlan")))";
                junos:must-message "P2MP Provider Tunnels are not allowed for VxLAN encapsulation";
                junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn pbb-evpn-core")))";
                junos:must-message "P2MP Provider Tunnels are not allowed for PBB-EVPN";
                junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || (".. .. instance-type vpls" || (".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))))))";
                junos:must-message "Point-to-multipoint LSPs can be configured only for EVPN, VPLS or MVPN instances";
                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 {
                    junos:must "(!((".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))";
                    junos:must-message "Static LSPs are not allowed for EVPN instances";
                    junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))";
                    junos:must-message "Referenced point-to-multipoint static LSP 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";
                  }
                  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";
                junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || (".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast")))))";
                junos:must-message "LDP P2MP LSPs can be configured only for EVPN or MVPN instances";
                junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn encapsulation vxlan")))";
                junos:must-message "P2MP Provider Tunnels are not allowed for VxLAN encapsulation";
                junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn pbb-evpn-core")))";
                junos:must-message "P2MP Provider Tunnels are not allowed for PBB-EVPN";
                presence "enable ldp-p2mp";
                description
                  "LDP point-to-multipoint LSP for flooding";
              }  // container ldp-p2mp
              container ingress-replication {
                junos:must "(((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast") && ".. .. protocols mvpn"))";
                junos:must-message "Ingress Replication can be configured only for MVPN instances";
                junos:must "(!(".. .. protocols mvpn sender-based-rpf"))";
                junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels";
                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
              container pim-asm {
                junos:must "(!(".. .. protocols mvpn sender-based-rpf"))";
                junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels";
                junos:must "(!("protocols pim mpls-internet-multicast"))";
                junos:must-message "mpls-internet-multicast must not be configured";
                junos:must "("protocols pim")";
                junos:must-message "PIM-SM must be configured in the master instance";
                junos:must "(".. .. instance-type vrf")";
                junos:must-message "PIM-SM must be configured only for vrf instances";
                description
                  "PIM-SM provider tunnel";
                uses apply-advanced;
    
                leaf group-address {
                  type jt:ipv4addr;
                  description
                    "PIM-SM provider tunnel group address";
                }
    
                container family {
                  presence "enable family";
                  status deprecated;
                  description
                    "PIM-SM provider tunnel address family";
                  uses apply-advanced;
    
                  container inet {
                    presence "enable inet";
                    description
                      "IPv4 PIM-SM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SM provider tunnel group address for IPV4";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container inet
    
                  container inet6 {
                    presence "enable inet6";
                    description
                      "IPv6 PIM-SM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SM provider tunnel group address for IPV6";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container inet6
                }  // container family
              }  // container pim-asm
              container pim-ssm {
                junos:must "(!(".. .. protocols mvpn sender-based-rpf"))";
                junos:must-message "This release does not support sender based RPF for PIM-SSM provider tunnels";
                junos:must "(!("protocols pim mpls-internet-multicast"))";
                junos:must-message "mpls-internet-multicast must not be configured";
                junos:must "("protocols pim")";
                junos:must-message "PIM-SSM must be configured in the master instance";
                junos:must "(".. .. protocols mvpn")";
                junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances";
                junos:must "(".. .. instance-type vrf")";
                junos:must-message "PIM-SM must be configured only for vrf instances";
                description
                  "PIM-SSM provider tunnel";
                uses apply-advanced;
    
                leaf group-address {
                  type jt:ipv4addr;
                  description
                    "PIM-SSM provider tunnel group address";
                }
    
                container family {
                  presence "enable family";
                  status deprecated;
                  description
                    "PIM-SSM provider tunnel address family";
                  uses apply-advanced;
    
                  container inet {
                    presence "enable inet";
                    description
                      "IPv4 PIM-SSM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SSM provider tunnel group address for IPV4";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container inet
    
                  container inet6 {
                    presence "enable inet6";
                    description
                      "IPv6 PIM-SSM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SSM provider tunnel group address for IPV6";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container inet6
                }  // container family
              }  // container pim-ssm
            }  // choice tunnel-type
    
            container inter-as {
              junos:must "(".. .. non-forwarding-vrf")";
              junos:must-message "Inter-as segmented tunnels can only be configured for non-forwarding-vrfs";
              junos:must "(!(".. .. protocols mvpn sender-based-rpf"))";
              junos:must-message "This release does not support sender based RPF for inter-as provider tunnels";
              junos:must "(".. .. instance-type vrf")";
              junos:must-message "Inter-as segmented tunnels can only be configured for VRF instances";
              junos:must "(".. .. protocols mvpn")";
              junos:must-message "Inter-as segmented tunnels can only be configured for MVPN instances";
              description
                "Inter-AS segmented tunnels";
              uses apply-advanced;
    
              choice tunnel-type {
                container ingress-replication {
                  junos:must "(". label-switched-path label-switched-path-template")";
                  junos:must-message "label-switched-path template must be configured for Inter-AS segmented tunnel";
                  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
                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 {
                    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
              }  // choice tunnel-type
    
              container inter-region-segmented {
                junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
                junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
                description
                  "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out";
                uses apply-advanced;
    
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 1000000";
                    }
                  }
                  units "kilobits";
                  description
                    "Data threshold rate to trigger segmentation";
                }
    
                leaf fan-out {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 10000";
                    }
                  }
                  description
                    "Number of remote Leaf-AD routes";
                }
              }  // container inter-region-segmented
            }  // container inter-as
    
            container inter-region {
              junos:must "((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))";
              junos:must-message "Inter-region segmented tunnels can only be configured for VRF or Internet-multicast instances";
              junos:must "(!((".. selective" || (".. pim-ssm" || (".. pim-asm" || (".. rsvp-te" || (".. ldp-p2mp" || (".. ingress-replication" || ".. inter-as"))))))))";
              junos:must-message "Inter-region on RBR can not be allowed with other tunnel options";
              description
                "Inter-region segmented tunnels";
              uses apply-advanced;
    
              choice segmented-or-not {
                leaf template {
                  junos:must "("protocols mvpn inter-region-template template $$")";
                  junos:must-message "Referenced template doesn't exist";
                  type string;
                  description
                    "Use inter-region segmentation template";
                }
                leaf no-inter-region-segmentation {
                  type empty;
                  description
                    "Do not participate in inter-region segmentation";
                }
              }  // choice segmented-or-not
            }  // container inter-region
    
            container inter-region-segmented {
              junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
              junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
              description
                "Inter-Region Segmented LSP triggered by fan-out factor only";
              uses apply-advanced;
    
              leaf fan-out {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 10000";
                  }
                }
                description
                  "Number of remote Leaf-AD routes";
              }
            }  // container inter-region-segmented
    
            container selective {
              junos:must "(".. .. protocols mvpn")";
              junos:must-message "Selective tunnels can only be configured for MVPN instances";
              description "Selective tunnels";
              uses apply-advanced;
    
              leaf tunnel-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 30000";
                  }
                }
                description
                  "Maximum number of selective tunnels";
              }
    
              leaf leaf-tunnel-limit-inet {
                junos:must "(".. .. .. protocols mvpn mvpn-mode rpt-spt")";
                junos:must-message "Selective leaf tunnel limit can only be configured for MVPN rpt-spt mode";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 15000";
                  }
                }
                description
                  "Maximum number of selective leaf tunnels for v4";
              }
    
              leaf leaf-tunnel-limit-inet6 {
                junos:must "(".. .. .. protocols mvpn mvpn-mode rpt-spt")";
                junos:must-message "Selective leaf tunnel limit can only be configured for MVPN rpt-spt mode";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 15000";
                  }
                }
                description
                  "Maximum number of selective leaf tunnels for v6";
              }
    
              container wildcard-group-inet {
                description
                  "IPv4 wilcard group matching any group address";
                uses apply-advanced;
    
                container wildcard-source {
                  junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")";
                  junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels";
                  presence
                    "enable wildcard-source";
                  description
                    "Use Selective-Tunnel for wildcard-source (*,G) joins";
                  uses apply-advanced;
    
                  leaf threshold-rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1000000";
                      }
                    }
                    units "kilobits";
                    description
                      "Data threshold to create new tunnel";
                  }
    
                  choice tunnel-type {
                    container ingress-replication {
                      junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))";
                      junos:must-message "Ingress Replication can be configured only for MVPN instances. Sender based RPF is not supported for ingress-replication provider-tunnels";
                      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
                    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 {
                          junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))";
                          junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel";
                          junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")";
                          junos:must-message "Referenced point-to-multipoint static LSP 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";
                        }
                        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";
                      junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))";
                      junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances";
                      presence "enable ldp-p2mp";
                      description
                        "LDP point-to-multipoint LSP for flooding";
                    }  // container ldp-p2mp
                    container pim-ssm {
                      junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))";
                      junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel";
                      junos:must "(".. .. .. .. .. protocols mvpn")";
                      junos:must-message "";
                      junos:must "(".. .. .. .. .. instance-type vrf")";
                      junos:must-message "PIM-SSM can be configured only for vrf instances";
                      junos:must "("protocols pim")";
                      junos:must-message "PIM-SSM must be configured in the master instance";
                      description
                        "PIM-SSM provider tunnel";
                      uses apply-advanced;
    
                      leaf group-range {
                        type jt:ipv4prefix;
                        description
                          "PIM-SSM provider tunnel group range";
                      }
                    }  // container pim-ssm
                  }  // choice tunnel-type
    
                  container inter-region-segmented {
                    junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
                    junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
                    description
                      "Inter-Region Segmented LSP triggered by fan-out factor only";
                    uses apply-advanced;
    
                    leaf fan-out {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10000";
                        }
                      }
                      description
                        "Number of remote Leaf-AD routes";
                    }
                  }  // container inter-region-segmented
                }  // container wildcard-source
              }  // container wildcard-group-inet
    
              container wildcard-group-inet6 {
                description
                  "IPv6 wilcard group matching any group address";
                uses apply-advanced;
    
                container wildcard-source {
                  junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")";
                  junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels";
                  presence
                    "enable wildcard-source";
                  description
                    "Use Selective-Tunnel for wildcard-source (*,G) joins";
                  uses apply-advanced;
    
                  leaf threshold-rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1000000";
                      }
                    }
                    units "kilobits";
                    description
                      "Data threshold to create new tunnel";
                  }
    
                  choice tunnel-type {
                    container ingress-replication {
                      junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))";
                      junos:must-message "Ingress Replication can be configured only for MVPN instances";
                      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
                    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 {
                          junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))";
                          junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel";
                          junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")";
                          junos:must-message "Referenced point-to-multipoint static LSP 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";
                        }
                        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";
                      junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))";
                      junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances";
                      presence "enable ldp-p2mp";
                      description
                        "LDP point-to-multipoint LSP for flooding";
                    }  // container ldp-p2mp
                    container pim-ssm {
                      junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))";
                      junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel";
                      junos:must "(".. .. .. .. .. protocols mvpn")";
                      junos:must-message "";
                      junos:must "(".. .. .. .. .. instance-type vrf")";
                      junos:must-message "PIM-SSM can be configured only for vrf instances";
                      junos:must "("protocols pim")";
                      junos:must-message "PIM-SSM must be configured in the master instance";
                      description
                        "PIM-SSM provider tunnel";
                      uses apply-advanced;
    
                      leaf group-range {
                        type jt:ipv4prefix;
                        description
                          "PIM-SSM provider tunnel group range";
                      }
                    }  // container pim-ssm
                  }  // choice tunnel-type
    
                  container inter-region-segmented {
                    junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
                    junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
                    description
                      "Inter-Region Segmented LSP triggered by fan-out factor only";
                    uses apply-advanced;
    
                    leaf fan-out {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10000";
                        }
                      }
                      description
                        "Number of remote Leaf-AD routes";
                    }
                  }  // container inter-region-segmented
                }  // container wildcard-source
              }  // container wildcard-group-inet6
    
              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 {
                  junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")";
                  junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels";
                  presence
                    "enable wildcard-source";
                  description
                    "Use Selective-Tunnel for wildcard-source (*,G) joins";
                  uses apply-advanced;
    
                  leaf threshold-rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1000000";
                      }
                    }
                    units "kilobits";
                    description
                      "Data threshold to create new tunnel";
                  }
    
                  choice tunnel-type {
                    container ingress-replication {
                      junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))";
                      junos:must-message "Ingress Replication can be configured only for MVPN instances.";
                      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
                    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 {
                          junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))";
                          junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel";
                          junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")";
                          junos:must-message "Referenced point-to-multipoint static LSP 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";
                        }
                        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";
                      junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))";
                      junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances";
                      presence "enable ldp-p2mp";
                      description
                        "LDP point-to-multipoint LSP for flooding";
                    }  // container ldp-p2mp
                    container pim-ssm {
                      junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))";
                      junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel";
                      junos:must "(".. .. .. .. .. protocols mvpn")";
                      junos:must-message "";
                      junos:must "(".. .. .. .. .. instance-type vrf")";
                      junos:must-message "PIM-SSM can be configured only for vrf instances";
                      junos:must "("protocols pim")";
                      junos:must-message "PIM-SSM must be configured in the master instance";
                      description
                        "PIM-SSM provider tunnel";
                      uses apply-advanced;
    
                      leaf group-range {
                        type jt:ipv4prefix;
                        description
                          "PIM-SSM provider tunnel group range";
                      }
                    }  // container pim-ssm
                  }  // choice tunnel-type
    
                  container inter-region-segmented {
                    junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
                    junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
                    description
                      "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 1000000";
                        }
                      }
                      units "kilobits";
                      description
                        "Data threshold rate to trigger segmentation";
                    }
    
                    leaf fan-out {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10000";
                        }
                      }
                      description
                        "Number of remote Leaf-AD routes";
                    }
                  }  // container inter-region-segmented
                }  // 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;
    
                  choice tunnel-type {
                    container ingress-replication {
                      junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))";
                      junos:must-message "Ingress Replication can be configured only for MVPN instances";
                      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
                    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 {
                          junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))";
                          junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel";
                          junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")";
                          junos:must-message "Referenced point-to-multipoint static LSP 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";
                        }
                        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 pim-ssm {
                      junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))";
                      junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel";
                      junos:must "(".. .. .. .. .. protocols mvpn")";
                      junos:must-message "";
                      junos:must "(".. .. .. .. .. instance-type vrf")";
                      junos:must-message "PIM-SSM can be configured only for vrf instances";
                      junos:must "("protocols pim")";
                      junos:must-message "PIM-SSM must be configured in the master instance";
                      description
                        "PIM-SSM provider tunnel";
                      uses apply-advanced;
    
                      leaf group-range {
                        type jt:ipv4prefix;
                        description
                          "PIM-SSM provider tunnel group range";
                      }
                    }  // container pim-ssm
                    container ldp-p2mp {
                      junos:must "("protocols ldp p2mp")";
                      junos:must-message "LDP P2MP must be configured in the master instance";
                      junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))";
                      junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances";
                      presence "enable ldp-p2mp";
                      description
                        "LDP point-to-multipoint LSP for flooding";
                    }  // container ldp-p2mp
                  }  // choice tunnel-type
    
                  leaf threshold-rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 1000000";
                      }
                    }
                    units "kilobits";
                    description
                      "Data threshold to create new tunnel";
                  }
    
                  container inter-region-segmented {
                    junos:must "(!((".. pim-ssm" || ".. pim-asm")))";
                    junos:must-message "Inter-region-segmented cannot be set for PIM tunnel";
                    description
                      "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out";
                    uses apply-advanced;
    
                    leaf threshold {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 1000000";
                        }
                      }
                      units "kilobits";
                      description
                        "Data threshold rate to trigger segmentation";
                    }
    
                    leaf fan-out {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 10000";
                        }
                      }
                      description
                        "Number of remote Leaf-AD routes";
                    }
                  }  // container inter-region-segmented
                }  // list source
              }  // list group
            }  // container selective
    
            container mdt {
              junos:must "(".. .. protocols pim mvpn")";
              junos:must-message "Data MDT tunnels can only be configured for PIM MVPN instances";
              status deprecated;
              description
                "Data MDT tunnels for PIM MVPN";
              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 family {
              presence "enable family";
              uses apply-advanced;
    
              container inet {
                junos:must "(!((" .. .. .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))";
                junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf";
                presence "enable inet";
                uses apply-advanced;
    
                choice tunnel-type {
                  container rsvp-te {
                    junos:must "((".. .. .. .. instance-type vpls" || (".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast"))))";
                    junos:must-message "Point-to-multipoint LSPs can be configured only for VPLS or MVPN instances";
                    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 {
                        junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))";
                        junos:must-message "Referenced point-to-multipoint static LSP 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";
                      }
                      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";
                    junos:must "((".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast")))";
                    junos:must-message "LDP P2MP LSPs can be configured only for valid MVPN instances";
                    presence "enable ldp-p2mp";
                    description
                      "LDP point-to-multipoint LSP for flooding";
                  }  // container ldp-p2mp
                  container ingress-replication {
                    junos:must "(((".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. protocols mvpn"))";
                    junos:must-message "Ingress Replication can be configured only for MVPN instances";
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels";
                    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
                  container pim-asm {
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels";
                    junos:must "(!("protocols pim mpls-internet-multicast"))";
                    junos:must-message "mpls-internet-multicast must not be configured";
                    junos:must "("protocols pim")";
                    junos:must-message "PIM-SM must be configured in the master instance";
                    junos:must "(".. .. .. .. instance-type vrf")";
                    junos:must-message "PIM-SM must be configured only for vrf instances";
                    description
                      "PIM-SM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SM provider tunnel group address";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container pim-asm
                  container pim-ssm {
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "this release does not support sender based RPF for PIM-SSM provider tunnels";
                    junos:must "(!("protocols pim mpls-internet-multicast"))";
                    junos:must-message "mpls-internet-multicast must not be configured";
                    junos:must "("protocols pim")";
                    junos:must-message "PIM-SSM must be configured in the master instance";
                    junos:must "(".. .. .. .. protocols mvpn")";
                    junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances";
                    junos:must "(".. .. .. .. instance-type vrf")";
                    junos:must-message "PIM-SM must be configured only for vrf instances";
                    description
                      "PIM-SSM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SSM provider tunnel group address";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container pim-ssm
                }  // choice tunnel-type
    
                container mdt {
                  junos:must "(".. .. .. .. protocols pim mvpn")";
                  junos:must-message "Data MDT tunnels can only be configured for PIM
    MVPN instances";
                  description
                    "IPv4 Data MDT tunnels for PIM MVPN";
                  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 inet
    
              container inet6 {
                junos:must "(!((" .. .. .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))";
                junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf";
                presence "enable inet6";
                uses apply-advanced;
    
                choice tunnel-type {
                  container rsvp-te {
                    junos:must "((".. .. .. .. instance-type vpls" || (".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast"))))";
                    junos:must-message "Point-to-multipoint LSPs can be configured only for VPLS or MVPN instances";
                    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 {
                        junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))";
                        junos:must-message "Referenced point-to-multipoint static LSP 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";
                      }
                      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";
                    junos:must "((".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast")))";
                    junos:must-message "LDP P2MP LSPs can be configured only for valid MVPN instances";
                    presence "enable ldp-p2mp";
                    description
                      "LDP point-to-multipoint LSP for flooding";
                  }  // container ldp-p2mp
                  container ingress-replication {
                    junos:must "(((".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. protocols mvpn"))";
                    junos:must-message "Ingress Replication can be configured only for MVPN instances";
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels";
                    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
                  container pim-asm {
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels";
                    junos:must "(!("protocols pim mpls-internet-multicast"))";
                    junos:must-message "mpls-internet-multicast must not be configured";
                    junos:must "("protocols pim")";
                    junos:must-message "PIM-SM must be configured in the master instance";
                    junos:must "(".. .. .. .. instance-type vrf")";
                    junos:must-message "PIM-SM must be configured only for vrf instances";
                    description
                      "PIM-SM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SM provider tunnel group address";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container pim-asm
                  container pim-ssm {
                    junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))";
                    junos:must-message "this release does not support sender based RPF for PIM-SSM provider tunnels";
                    junos:must "(!("protocols pim mpls-internet-multicast"))";
                    junos:must-message "mpls-internet-multicast must not be configured";
                    junos:must "("protocols pim")";
                    junos:must-message "PIM-SSM must be configured in the master instance";
                    junos:must "(".. .. .. .. protocols mvpn")";
                    junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances";
                    junos:must "(".. .. .. .. instance-type vrf")";
                    junos:must-message "PIM-SM must be configured only for vrf instances";
                    description
                      "PIM-SSM provider tunnel";
                    uses apply-advanced;
    
                    leaf group-address {
                      type jt:ipv4addr;
                      description
                        "PIM-SSM provider tunnel group address";
                    }
    
                    leaf tunnel-source {
                      type jt:ipv4addr;
                      description
                        "Source address for the provider space mGRE tunnel";
                    }
                  }  // container pim-ssm
                }  // choice tunnel-type
    
                container mdt {
                  junos:must "(".. .. .. .. protocols pim mvpn")";
                  junos:must-message "Data MDT tunnels can only be configured for PIM
    MVPN instances";
                  description
                    "IPv6 Data MDT tunnels for PIM MVPN";
                  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 inet6
            }  // container family
          }  // container provider-tunnel
    
          container multicast-snooping-options {
            junos:must "((".. instance-type vpls" || (".. instance-type evpn" || (".. instance-type virtual-switch " || ".. instance-type mac-vrf "))))";
            junos:must-message "multicast-snooping-options configuration is allowed only for 'instance-type vpls/evpn or instance-type virtual-switch/mac-vrf'";
            description
              "Multicast snooping option configuration";
            uses juniper-multicast-snooping-options;
          }  // container multicast-snooping-options
    
          container igmp-snooping-options {
            junos:must "((".. instance-type vpls" || (".. instance-type virtual-switch" || (".. instance-type evpn" && ".. protocols vpls"))))";
            junos:must-message "igmp-snooping-options configuration is allowed only for 'instance-type vpls/virtual-switch'";
            description
              "IGMP snooping option configuration";
            uses juniper-igmp-snooping-options;
          }  // container igmp-snooping-options
    
          container mld-snooping-options {
            junos:must "((".. instance-type vpls" || (".. instance-type virtual-switch" || (".. instance-type evpn" && ".. protocols vpls"))))";
            junos:must-message "mld-snooping-options configuration is allowed only for 'instance-type vpls or instance-type virtual-switch'";
            description
              "MLD snooping option configuration";
            uses juniper-mld-snooping-options;
          }  // container mld-snooping-options
        }  // grouping juniper-routing-instance
    
        grouping address-assignment-type {
          description
            "Address assignment configuration";
          uses apply-advanced;
    
          container neighbor-discovery-router-advertisement {
            description
              "Designated NDRA pool for this instance";
            leaf ndra-name {
              junos:must "(".. .. pool $$  family inet6")";
              junos:must-message "designated NDRA pool must be configured and family inet6 must be set";
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description
                "Designated NDRA pool name";
            }
          }  // container neighbor-discovery-router-advertisement
    
          leaf high-utilization {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "2 .. 99";
              }
            }
            description
              "Generate an SNMP trap when address pool use surpasses this percentage";
          }
    
          leaf abated-utilization {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 98";
              }
            }
            description
              "Generate an SNMP clear trap when address pool use falls below this percentage";
          }
    
          leaf high-utilization-v6 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "2 .. 99";
              }
            }
            description
              "Generate an SNMP trap when address pool use surpasses this percentage";
          }
    
          leaf abated-utilization-v6 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 98";
              }
            }
            description
              "Generate an SNMP clear trap when address pool use falls below this percentage";
          }
    
          list dynamic-pool {
            key "name";
            ordered-by user;
            description "Dynamic address pool";
            leaf name {
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description
                "Dynamic address pool name";
            }
    
            uses apply-advanced;
    
            container family {
              presence "enable family";
              description "Address family";
              uses apply-advanced;
    
              container inet6 {
                description "IPv6";
                uses apply-advanced;
    
                leaf delegated-prefix-length {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 64";
                    }
                  }
                  description
                    "Delegated IPv6 network prefix length";
                }
    
                leaf from-interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Get prefix from interface name";
                }
    
                list range {
                  key "name";
                  ordered-by user;
                  description
                    "IPv6 address range";
                  leaf name {
                    type string {
                      junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                      junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                      length "1 .. 63";
                    }
                    description "Range name";
                  }
    
                  uses apply-advanced;
    
                  leaf masked-low {
                    junos:must "(".. masked-high")";
                    junos:must-message "range upper bound must be defined";
                    type jt:ipv6prefix-mandatory;
                    description
                      "Lower limit of ipv6 address range";
                  }
    
                  leaf masked-high {
                    junos:must "(".. masked-low")";
                    junos:must-message "range lower bound must be defined";
                    type jt:ipv6prefix-mandatory;
                    description
                      "Upper limit of ipv6 address range";
                  }
    
                  leaf prefix-length {
                    junos:must "(!(any ".. .. range <*> masked-low"))";
                    junos:must-message "'prefix-length' cannot be configured with 'masked-low' in one dynamic pool";
                    junos:must "(unique ".. .. range <*> prefix-length")";
                    junos:must-message "'prefix-length' cannot be configured for multiple ranges in one dynamic pool";
                    junos:must "(!(".. masked-low"))";
                    junos:must-message "prefix-length cannot be configured with 'masked-low'";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 64";
                      }
                    }
                    description
                      "IPv6 delegated prefix length";
                  }
                }  // list range
    
                container dhcp-attributes {
                  description
                    "DHCP options and match criteria";
                  uses dynamic-dhcp-attribute-type;
                }  // container dhcp-attributes
              }  // container inet6
            }  // container family
          }  // list dynamic-pool
    
          list pool {
            key "name";
            ordered-by user;
            description "Address pool";
            leaf name {
              junos:must "(!(".. link $$"))";
              junos:must-message "Link cannot be self referential";
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description "Address pool name";
            }
    
            uses apply-advanced;
    
            leaf active-drain {
              type empty;
              description
                "Notify client of pool active drain mode";
            }
    
            leaf hold-down {
              type empty;
              description
                "Place pool in passive drain mode";
            }
    
            leaf link {
              junos:must "(".. .. pool $$")";
              junos:must-message "Link must be to a valid pool name";
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description
                "Address pool link name";
            }
    
            container family {
              presence "enable family";
              description "Address family";
              choice family_type {
                container inet {
                  presence "enable inet";
                  description "IPv4";
                  uses apply-advanced;
    
                  leaf network {
                    type jt:ipv4prefix;
                    description
                      "Network address";
                  }
    
                  list range {
                    key "name";
                    ordered-by user;
                    description "Address range";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                        junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                        length "1 .. 63";
                      }
                      description "Range name";
                    }
    
                    uses apply-advanced;
    
                    leaf low {
                      type jt:ipv4addr;
                      description
                        "Lower limit of address range";
                    }
    
                    leaf high {
                      type jt:ipv4addr;
                      description
                        "Upper limit of address range";
                    }
                  }  // list range
    
                  container dhcp-attributes {
                    description
                      "DHCP options and match criteria";
                    uses dhcp-attribute-type;
                  }  // container dhcp-attributes
    
                  container xauth-attributes {
                    description
                      "Configure xauth attributes";
                    uses apply-advanced;
    
                    leaf primary-dns {
                      type jt:ipv4prefix;
                      description
                        "Specify the primary-dns IP address";
                    }
    
                    leaf secondary-dns {
                      type jt:ipv4prefix;
                      description
                        "Specify the secondary-dns IP address";
                    }
    
                    leaf primary-wins {
                      type jt:ipv4prefix;
                      description
                        "Specify the primary-wins IP address";
                    }
    
                    leaf secondary-wins {
                      type jt:ipv4prefix;
                      description
                        "Specify the secondary-wins IP address";
                    }
                  }  // container xauth-attributes
    
                  list host {
                    key "name";
                    ordered-by user;
                    description
                      "Hostname for static reservations";
                    leaf name {
                      junos:must "((".. hardware-address" || ".. user-name"))";
                      junos:must-message "either host's hardware address or identifier must be set";
                      type string {
                        length "1 .. 256";
                      }
                      description "Hostname";
                    }
    
                    uses apply-advanced;
    
                    leaf hardware-address {
                      type jt:mac-addr;
                      description
                        "Hardware address";
                    }
    
                    leaf ip-address {
                      type jt:ipv4addr;
                      description
                        "Reserved address";
                    }
    
                    choice host-identifier-type {
                      leaf user-name {
                        type empty;
                        description
                          "Set subscriber user name as host identifier";
                      }
                    }  // choice host-identifier-type
                  }  // list host
    
                  list excluded-address {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Excluded Addresses";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "Excluded address";
                    }
    
                    uses apply-advanced;
                  }  // list excluded-address
    
                  list excluded-range {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Excluded address range";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                        junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                        length "1 .. 63";
                      }
                      description "Range name";
                    }
    
                    uses apply-advanced;
    
                    leaf low {
                      type jt:ipv4addr;
                      description
                        "Lower limit of excluded address range";
                    }
    
                    leaf high {
                      type jt:ipv4addr;
                      description
                        "Upper limit of excluded address range";
                    }
                  }  // list excluded-range
                }  // container inet
                container inet6 {
                  presence "enable inet6";
                  description "IPv6";
                  uses apply-advanced;
    
                  leaf prefix {
                    type jt:ipv6prefix-mandatory;
                    description
                      "IPv6 network prefix";
                  }
    
                  list range {
                    key "name";
                    ordered-by user;
                    description
                      "IPv6 address range";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                        junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                        length "1 .. 63";
                      }
                      description "Range name";
                    }
    
                    uses apply-advanced;
    
                    leaf low {
                      junos:must "(".. high")";
                      junos:must-message "range upper bound must be defined";
                      type jt:ipv6prefix-mandatory;
                      description
                        "Lower limit of ipv6 address range";
                    }
    
                    leaf high {
                      junos:must "(".. low")";
                      junos:must-message "range lower bound must be defined";
                      type jt:ipv6prefix-mandatory;
                      description
                        "Upper limit of ipv6 address range";
                    }
    
                    leaf prefix-length {
                      junos:must "(!(".. low"))";
                      junos:must-message "range lower bound may not be defined";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 128";
                        }
                      }
                      description
                        "IPv6 delegated prefix length";
                    }
                  }  // list range
    
                  container dhcp-attributes {
                    description
                      "DHCP options and match criteria";
                    uses dhcp-attribute-type;
                  }  // container dhcp-attributes
    
                  container xauth-attributes {
                    description
                      "Configure xauth ipv6 attributes";
                    uses apply-advanced;
    
                    leaf primary-dns-ipv6 {
                      type jt:ipv6addr;
                      description
                        "Specify the primary-dns IPv6 address";
                    }
    
                    leaf secondary-dns-ipv6 {
                      type jt:ipv6addr;
                      description
                        "Specify the secondary-dns IPv6 address";
                    }
                  }  // container xauth-attributes
    
                  list host {
                    key "name";
                    ordered-by user;
                    description
                      "Hostname for static reservations";
                    leaf name {
                      junos:must "((".. hardware-address" || ".. user-name"))";
                      junos:must-message "either host's hardware address or identifier must be set";
                      type string {
                        length "1 .. 256";
                      }
                      description "Hostname";
                    }
    
                    uses apply-advanced;
    
                    leaf hardware-address {
                      type jt:mac-addr;
                      description
                        "Hardware address";
                    }
    
                    leaf ip-address {
                      type jt:ipv6addr;
                      description
                        "Reserved address";
                    }
    
                    choice host-identifier-type {
                      leaf user-name {
                        type empty;
                        description
                          "Set subscriber user name as host identifier";
                      }
                    }  // choice host-identifier-type
                  }  // list host
    
                  list excluded-address {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Excluded Addresses";
                    leaf name {
                      type jt:ipv6addr;
                      description
                        "Excluded address";
                    }
    
                    uses apply-advanced;
                  }  // list excluded-address
    
                  list excluded-range {
                    key "name";
                    max-elements 20;
                    ordered-by user;
                    description
                      "Excluded address range";
                    leaf name {
                      type string {
                        junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$";
                        junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores.";
                        length "1 .. 63";
                      }
                      description "Range name";
                    }
    
                    uses apply-advanced;
    
                    leaf low {
                      type jt:ipv6addr;
                      description
                        "Lower limit of excluded address range";
                    }
    
                    leaf high {
                      type jt:ipv6addr;
                      description
                        "Upper limit of excluded address range";
                    }
                  }  // list excluded-range
                }  // container inet6
              }  // choice family_type
            }  // container family
          }  // list pool
    
          list location-pool {
            key "name";
            max-elements 10;
            ordered-by user;
            description
              "Location-based IP address pool";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description "Pool name";
            }
    
            uses apply-advanced;
    
            container family {
              presence "enable family";
              description "Address family";
              container inet {
                description "IPv4 location pool";
                uses apply-advanced;
    
                list location {
                  key "name";
                  max-elements 32;
                  description
                    "Relative location of router";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 32";
                      }
                    }
                    description
                      "Location number";
                  }
    
                  uses apply-advanced;
    
                  leaf address {
                    type jt:ipv4prefix;
                    description
                      "IP address/destination prefix";
                  }
                }  // list location
              }  // container inet
            }  // container family
          }  // list location-pool
    
          list domain-profile {
            key "name";
            ordered-by user;
            description "Address domain profile";
            leaf name {
              type string {
                length "1 .. 63";
              }
              description
                "Pool domain profile name";
            }
    
            uses apply-advanced;
    
            container family {
              description
                "Network family to which this configuration belongs";
              uses apply-advanced;
    
              container inet {
                description
                  "The IPv4 internet family";
                uses apply-advanced;
    
                leaf preferred-prefix-length {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "8 .. 30";
                    }
                  }
                  description
                    "Preferred prefix length";
                }
    
                leaf source-partition-qualifier {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Prefix source qualifier appended to location for partition name";
                }
    
                container excluded-address {
                  description
                    "Excluded addresses from allocation";
                  leaf-list last-octet {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "0 .. 255";
                      }
                    }
                    ordered-by user;
                    description
                      "Last octet of the excluded address";
                  }
                }  // container excluded-address
    
                leaf install-discard-routes {
                  type empty;
                  description
                    "Install discard route domain pool prefix";
                }
    
                leaf dhcp-router-host-part {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 8";
                    }
                  }
                  description
                    "DHCP host address component to be excluded and passed to DHCP";
                }
    
                leaf protocol-attributes {
                  junos:must "("access protocol-attributes $$")";
                  junos:must-message "referenced protocol-attributes must be defined";
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Access protocol-attributes name";
                }
              }  // container inet
            }  // container family
          }  // list domain-profile
        }  // grouping address-assignment-type
    
        grouping dhcp-attribute-type {
          uses apply-advanced;
    
          container option-match {
            description "Match";
            uses apply-advanced;
    
            container option-82 {
              uses apply-advanced;
    
              list circuit-id {
                key "name";
                ordered-by user;
                description
                  "Circuit ID portion of the option 82";
                leaf name {
                  type string;
                }
    
                leaf range {
                  type string;
                  description "Range name";
                }
              }  // list circuit-id
    
              list remote-id {
                key "name";
                ordered-by user;
                description
                  "Remote ID portion of the option 82";
                leaf name {
                  type string;
                }
    
                leaf range {
                  type string;
                  description "Range name";
                }
              }  // list remote-id
            }  // container option-82
          }  // container option-match
    
          leaf maximum-lease-time {
            type string;
            units "seconds";
            description
              "Maximum lease time advertised to clients";
          }
    
          leaf next-server {
            type jt:ipv4addr;
            description
              "Next server that clients need to contact";
          }
    
          leaf server-identifier {
            type jt:ipv4addr;
            description
              "Server Identifier - IP address value";
          }
    
          leaf grace-period {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            units "seconds";
            description
              "Grace period for leases";
          }
    
          leaf domain-name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
            }
            description
              "Domain name advertised to clients";
          }
    
          list name-server {
            key "name";
            ordered-by user;
            description
              "Domain name servers available to the client";
            leaf name {
              type jt:ipv4addr;
              description
                "DNS server's IPv4 address";
            }
    
            uses apply-advanced;
          }  // list name-server
    
          list wins-server {
            key "name";
            ordered-by user;
            description "WINS name servers";
            leaf name {
              type jt:ipv4addr;
              description
                "WINS server's IPv4 address";
            }
    
            uses apply-advanced;
          }  // list wins-server
    
          list router {
            key "name";
            ordered-by user;
            description
              "Routers advertised to clients";
            leaf name {
              type jt:ipv4addr;
              description
                "Router's IPv4 address";
            }
    
            uses apply-advanced;
          }  // list router
    
          leaf boot-file {
            type string;
            description
              "Boot filename advertised to clients";
          }
    
          leaf boot-server {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
            }
            description
              "Boot server advertised to clients";
          }
    
          leaf tftp-server {
            type jt:ipv4addr;
            description
              "TFTP server IP address advertised to clients";
          }
    
          container sip-server {
            description "SIP servers to clients";
            uses apply-advanced;
    
            list name {
              key "name";
              ordered-by user;
              description
                "SIP server domain name available to clients";
              leaf name {
                junos:must "(!(any ".. .. address <*>"))";
                junos:must-message "Cannot configure sip-server by both name and address";
                type string;
                description "SIP server name";
              }
    
              uses apply-advanced;
            }  // list name
    
            list ip-address {
              key "name";
              ordered-by user;
              description
                "SIP servers list of IPv4 addresses available to the client";
              leaf name {
                type jt:ipv4addr;
                description
                  "SIP server's IPv4 address";
              }
    
              uses apply-advanced;
            }  // list ip-address
          }  // container sip-server
    
          leaf netbios-node-type {
            type enumeration {
              enum "b-node" {
                value 0;
                description "Broadcast node";
              }
              enum "p-node" {
                value 1;
                description "Peer-to-peer node";
              }
              enum "m-node" {
                value 2;
                description "Mixed Node";
              }
              enum "h-node" {
                value 3;
                description "Hybrid node";
              }
            }
            description
              "Type of NETBIOS node advertised to clients";
          }
    
          leaf sip-server-domain-name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
            }
            description
              "SIP server domain name available to clients";
          }
    
          list sip-server-address {
            key "name";
            ordered-by user;
            description
              "SIP Servers list of IPv6 addresses available to the client";
            leaf name {
              type jt:ipv6addr;
              description
                "SIP Server's IPv6 address";
            }
    
            uses apply-advanced;
          }  // list sip-server-address
    
          list dns-server {
            key "name";
            ordered-by user;
            description
              "Domain name servers available to the client";
            leaf name {
              type jt:ipv6addr;
              description
                "DNS server's IPv6 address";
            }
    
            uses apply-advanced;
          }  // list dns-server
    
          leaf propagate-settings {
            type string;
            description
              "Interface name for propagating TCP/IP Settings to pool";
          }
    
          leaf-list propagate-ppp-settings {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            max-elements 8;
            ordered-by user;
            description
              "PPP interface name for propagating DNS/WINS settings";
          }
    
          list option {
            key "name";
            ordered-by user;
            description "DHCP option";
            leaf name {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "DHCP option identifier code";
            }
    
            choice option-type-choice {
              leaf flag {
                type enumeration {
                  enum "true" {
                    value 0;
                    description "True value";
                  }
                  enum "false" {
                    value 1;
                    description "False value";
                  }
                  enum "on" {
                    value 2;
                    description "On value";
                  }
                  enum "off" {
                    value 3;
                    description "Off value";
                  }
                }
                description "Boolean flag value";
              }
              leaf byte {
                type union {
                  type uint8;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Unsigned 8-bit value";
              }
              leaf short {
                type union {
                  type int16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Signed 16-bit numeric value";
              }
              leaf unsigned-short {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Unsigned 16-bit numeric value";
              }
              leaf integer {
                type union {
                  type int32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Signed 32-bit numeric value";
              }
              leaf unsigned-integer {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Unsigned 32-bit numeric value";
              }
              leaf hex-string {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  length "1 .. 510";
                }
                description "Hexadecimal string";
              }
              leaf string {
                type string {
                  length "1 .. 254";
                }
                description
                  "Character string value";
              }
              leaf ip-address {
                type jt:ipv4addr;
                description "IP address value";
              }
              leaf ipv6-address {
                type jt:ipv6addr;
                description "IPV6 address value";
              }
              container array {
                presence "enable array";
                description "Array of values";
                uses apply-advanced;
    
                choice option-type-array-choice {
                  leaf-list flag {
                    type enumeration {
                      enum "true" {
                        value 0;
                        description "True value";
                      }
                      enum "false" {
                        value 1;
                        description
                          "False value";
                      }
                      enum "on" {
                        value 2;
                        description "On value";
                      }
                      enum "off" {
                        value 3;
                        description "Off value";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of boolean flag values";
                  }
                  leaf-list byte {
                    type union {
                      type uint8;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of unsigned 8-bit values";
                  }
                  leaf-list short {
                    type union {
                      type int16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of signed 16-bit numeric values";
                  }
                  leaf-list unsigned-short {
                    type union {
                      type uint16;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of 16-bit numeric values";
                  }
                  leaf-list integer {
                    type union {
                      type int32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of signed 32-bit numeric values";
                  }
                  leaf-list unsigned-integer {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Array of unsigned 32-bit numeric values";
                  }
                  leaf-list hex-string {
                    type string {
                      length "1 .. 510";
                    }
                    ordered-by user;
                    description
                      "Hexadecimal string";
                  }
                  leaf-list string {
                    type string {
                      length "1 .. 254";
                    }
                    ordered-by user;
                    description
                      "Array of character string values";
                  }
                  leaf-list ip-address {
                    type jt:ipv4addr;
                    ordered-by user;
                    description
                      "Array of IP address values";
                  }
                  leaf-list ipv6-address {
                    type jt:ipv6addr;
                    ordered-by user;
                    description
                      "Array of IPv6 address values";
                  }
                }  // choice option-type-array-choice
              }  // container array
            }  // choice option-type-choice
          }  // list option
    
          leaf valid-lifetime {
            junos:must "(!(".. maximum-lease-time"))";
            junos:must-message "'valid-lifetime' statement cannot be included along with 'maximum-lease-time'";
            type string;
            units "seconds";
            description
              "Valid lifetime advertised to clients";
          }
    
          leaf preferred-lifetime {
            junos:must "(!(".. maximum-lease-time"))";
            junos:must-message "'preferred-lifetime' statement cannot be included along with 'maximum-lease-time'";
            type string;
            units "seconds";
            description
              "Preferred lifetime advertised to clients";
          }
    
          leaf t1-percentage {
            junos:must "(!(".. t2-rebinding-time"))";
            junos:must-message "T1 must be configured in seconds to match T2";
            junos:must "(!(".. t1-renewal-time"))";
            junos:must-message "T1 time in seconds already configured";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            description
              "T1 time as percentage of preferred lifetime or max lease";
          }
    
          leaf t2-percentage {
            junos:must "(!(".. t1-renewal-time"))";
            junos:must-message "T2 must be configured in seconds to match T1";
            junos:must "(!(".. t2-rebinding-time"))";
            junos:must-message "T2 time in seconds already configured";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            description
              "T2 time as percentage of preferred lifetime or max lease";
          }
    
          leaf exclude-prefix-len {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 128";
              }
            }
            description
              "Length of IPv6 prefix to be excluded from delegated prefix";
          }
    
          leaf t1-renewal-time {
            junos:must "(!(".. t2-percentage"))";
            junos:must-message "T1 must be configured as percentage to match T2";
            junos:must "(!(".. t1-percentage"))";
            junos:must-message "T1 time as percentage already configured";
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            units "seconds";
            description "T1 renewal time";
          }
    
          leaf t2-rebinding-time {
            junos:must "(!(".. t1-percentage"))";
            junos:must-message "T2 must be configured as percentage to match T1";
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            units "seconds";
            description "T2 rebinding time";
          }
        }  // grouping dhcp-attribute-type
    
        grouping dynamic-dhcp-attribute-type {
          uses apply-advanced;
    
          leaf maximum-lease-time {
            type string;
            units "seconds";
            description
              "Maximum lease time advertised to clients";
          }
    
          leaf valid-lifetime {
            type string;
            units "seconds";
            description "Preferred lifetime";
          }
    
          leaf preferred-lifetime {
            type string;
            units "seconds";
            description "Preferred lifetime";
          }
    
          list dns-server {
            key "name";
            ordered-by user;
            description
              "Domain name servers available to the client";
            leaf name {
              type jt:ipv6addr;
              description
                "DNS server's IPv6 address";
            }
    
            uses apply-advanced;
          }  // list dns-server
    
          leaf t1-percentage {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            description
              "T1 time as percentage of preferred lifetime advertised to clients";
          }
    
          leaf t2-percentage {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            description
              "T2 time as percentage of preferred lifetime advertised to clients";
          }
        }  // grouping dynamic-dhcp-attribute-type
    
        grouping jdhcp-local-server-type {
          uses apply-advanced;
    
          container dhcpv6 {
            description "DHCPv6 configuration";
            uses dhcpv6-local-server-type;
          }  // container dhcpv6
    
          list pool-match-order {
            key "name";
            ordered-by user;
            description
              "Define order of attribute matching for pool selection";
            leaf name {
              type enumeration {
                enum "external-authority" {
                  value 0;
                  description
                    "External authority handles address selection";
                }
                enum "ip-address-first" {
                  value 1;
                  description
                    "IP address used first to select a pool";
                }
                enum "option-82" {
                  value 2;
                  description
                    "Option 82 used in matching of pool";
                }
                enum "option-82-strict" {
                  value 3;
                  description
                    "Option 82 used in strict matching of pool";
                }
              }
              description "Match type";
            }
    
            uses apply-advanced;
          }  // list pool-match-order
    
          container duplicate-clients-in-subnet {
            junos:must "(!(".. duplicate-clients-on-interface"))";
            junos:must-message "Cannot specify duplicate-clients-in-subnet with duplicate-clients-on-interface";
            description
              "Allow duplicate clients in a subnet";
            uses jdhcp-duplicate-clients-in-subnet-type;
          }  // container duplicate-clients-in-subnet
    
          container forward-snooped-clients {
            junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))";
            junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured";
            description
              "Forward snooped (unicast) packets";
            choice interface-type {
              leaf configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured interfaces";
              }
              leaf non-configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on non-configured interfaces";
              }
              leaf all-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured and non-configured interfaces";
              }
            }  // choice interface-type
          }  // container forward-snooped-clients
    
          container overrides {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'overrides' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            presence "enable overrides";
            description
              "DHCP override processing";
            uses override-local-server-type;
          }  // container overrides
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'access-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container route-suppression {
            junos:must "(!(".. liveness-detection method layer2-liveness-detection"))";
            junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection";
            junos:must "(!(".. overrides no-arp"))";
            junos:must-message "Cannot specify route-suppression with overrides no-arp";
            description
              "Suppress access-internal and/or destination route addition";
            uses dhcp-route-suppression-type;
          }  // container route-suppression
    
          list group {
            junos:must "(!("system services dhcp"))";
            junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'";
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'group' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            key "name";
            ordered-by user;
            description
              "Define a DHCP local server group";
            uses dhcp-local-server-group;
          }  // list group
    
          list dual-stack-group {
            key "name";
            description
              "Define a DHCP dual stack group";
            uses dhcp-local-server-dual-stack-group;
          }  // list dual-stack-group
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              choice violation-action-choice {
                leaf strict {
                  type empty;
                  description
                    "Reject discover and renew";
                }
                leaf override-lease {
                  type empty;
                  description
                    "Override assigned lease time with threshold";
                }
              }  // choice violation-action-choice
            }  // container violation-action
          }  // container lease-time-validation
    
          choice requested-ip-check {
            leaf requested-ip-network-match {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 31";
                }
              }
              default "8";
              description
                "Subnet to match server's address for active and giaddr for passive clients";
            }
            leaf requested-ip-interface-match {
              type empty;
              description
                "Use incoming-interface's subnet to check";
            }
          }  // choice requested-ip-check
    
          leaf no-snoop {
            junos:must "(!("legacy-snooping"))";
            junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement";
            type empty;
            description
              "Do not snoop DHCP packets";
          }
    
          container allow-leasequery {
            presence "enable allow-leasequery";
            description "Allow DHCP leasequery";
            uses server-leasequery-type;
          }  // container allow-leasequery
    
          container remote-id-mismatch {
            junos:must "(!(".. reauthenticate"))";
            junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'";
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container reauthenticate {
            junos:must "(!(".. remote-id-mismatch"))";
            junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'";
            junos:must "((".. authentication" || ".. .. authentication"))";
            junos:must-message "'authentication' statement must be included with 'reauthenticate'";
            description
              "DHCP client reauthenticate processing";
            leaf lease-renewal {
              type empty;
              description
                "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT";
            }
    
            leaf remote-id-mismatch {
              type empty;
              description
                "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation";
            }
          }  // container reauthenticate
    
          container allow-bulk-leasequery {
            presence
              "enable allow-bulk-leasequery";
            description
              "Allow DHCP bulk leasequery";
            uses server-bulk-leasequery-type;
          }  // container allow-bulk-leasequery
    
          container allow-active-leasequery {
            presence
              "enable allow-active-leasequery";
            description
              "Allow DHCP active leasequery";
            uses server-active-leasequery-type;
          }  // container allow-active-leasequery
        }  // grouping jdhcp-local-server-type
    
        grouping dhcp-local-server-dual-stack-group {
          description "DHCP dual stack groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Dual stack group name";
          }
    
          uses apply-advanced;
    
          container authentication {
            description "DHCP authentication";
            uses dual-stack-authentication-type;
          }  // container authentication
    
          leaf access-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to be used for jdhcpd";
          }
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf on-demand-address-allocation {
            type empty;
            description
              "Allocate addresses on demand";
          }
    
          container classification-key {
            junos:must "(".. dynamic-profile")";
            junos:must-message "dynamic profile configuration in dual-stack-group is must for configuring classification-type";
            description
              "Classification key for identifying dual stack household";
            uses classification-types;
          }  // container classification-key
    
          container protocol-master {
            description
              "Select family as protocol master";
            uses jdhcp-dual-stack-protocol-mstr-type;
          }  // container protocol-master
    
          container liveness-detection {
            description
              "DHCP client liveness detection processing";
            uses dhcp-liveness-detection-dualstack-type;
          }  // container liveness-detection
    
          container reauthenticate {
            junos:must "(".. on-demand-address-allocation")";
            junos:must-message "'on-demand-address-allocation' statement must be included with 'reauthenticate'";
            junos:must "(".. authentication")";
            junos:must-message "'authentication' statement must be included with 'reauthenticate'";
            description
              "DHCP client reauthenticate processing";
            leaf lease-renewal {
              type empty;
              description
                "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT";
            }
    
            leaf remote-id-mismatch {
              type empty;
              description
                "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation";
            }
          }  // container reauthenticate
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
        }  // grouping dhcp-local-server-dual-stack-group
    
        grouping classification-types {
          description
            "Different mechanisms to identify a single household";
          uses apply-advanced;
    
          leaf mac-address {
            type empty;
            description "MAC address of client";
          }
    
          leaf circuit-id {
            type empty;
            description "Circuit-id as key";
          }
    
          leaf remote-id {
            type empty;
            description "Remote-id as key";
          }
        }  // grouping classification-types
    
        grouping dhcp-liveness-detection-dualstack-type {
          description
            "DHCP client liveness detection processing";
          uses apply-advanced;
    
          container failure-action {
            description
              "Liveness detection failure action options";
            uses dhcp-liveness-detection-failure-action-type;
          }  // container failure-action
    
          container method {
            description
              "Liveness detection method options";
            uses apply-advanced;
    
            choice method-choice {
              container layer2-liveness-detection {
                junos:must "((!(".. .. route-suppression") && (!(".. .. .. route-suppression") && !(".. .. .. .. route-suppression"))))";
                junos:must-message "Method not allowed with route-suppression enabled";
                description
                  "Address resolution options";
                uses dhcp-arp-nud-liveness-detection-type;
              }  // container layer2-liveness-detection
            }  // choice method-choice
          }  // container method
        }  // grouping dhcp-liveness-detection-dualstack-type
    
        grouping dhcp-arp-nud-liveness-detection-type {
          description
            "Address Resolution detection options";
          uses apply-advanced;
    
          leaf transmit-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "300 .. 1800";
              }
            }
            units "seconds";
            default "300";
            description
              "Transmit interval for address resolution";
          }
    
          leaf max-consecutive-retries {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "3 .. 6";
              }
            }
            default "3";
            description "Retry attempts";
          }
        }  // grouping dhcp-arp-nud-liveness-detection-type
    
        grouping dhcp-liveness-detection-failure-action-type {
          description
            "Liveness detection failure action options";
          uses apply-advanced;
    
          choice failure-action-type {
            leaf clear-binding {
              type empty;
              description
                "Clear the client binding";
            }
            leaf clear-binding-if-interface-up {
              type empty;
              description
                "Clear the client binding only if the incoming interface is up";
            }
            leaf log-only {
              type empty;
              description
                "Maintain the client binding and log the failure event";
            }
          }  // choice failure-action-type
        }  // grouping dhcp-liveness-detection-failure-action-type
    
        grouping dhcp-local-server-group {
          description "DHCP groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container authentication {
            description "DHCP authentication";
            uses authentication-type;
          }  // container authentication
    
          container overrides {
            presence "enable overrides";
            description
              "DHCP override processing";
            uses override-local-server-type;
          }  // container overrides
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container route-suppression {
            junos:must "(!(".. liveness-detection method layer2-liveness-detection"))";
            junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection";
            junos:must "((!(".. overrides no-arp") && !(".. .. overrides no-arp")))";
            junos:must-message "Cannot specify route-suppression with overrides no-arp";
            description
              "Suppress access-internal and/or destination route addition";
            uses dhcp-route-suppression-type;
          }  // container route-suppression
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf upto {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface up to";
            }
    
            leaf exclude {
              type empty;
              description
                "Exclude this interface range";
            }
    
            container overrides {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "DHCP override processing";
              uses override-local-server-type;
            }  // container overrides
    
            container dynamic-profile {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "Dynamic profile to use";
              uses dynamic-profile-type;
            }  // container dynamic-profile
    
            leaf access-profile {
              junos:must "("access profile $$")";
              junos:must-message "Matching access profile must be defined";
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              type string {
                length "1 .. 128";
              }
              description
                "Access profile to use for AAA services";
            }
    
            container short-cycle-protection {
              description
                "Short cycle lockout configuration";
              leaf lockout-min-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
    
              leaf lockout-max-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
            }  // container short-cycle-protection
          }  // list interface
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              choice violation-action-choice {
                leaf strict {
                  type empty;
                  description
                    "Reject discover and renew";
                }
                leaf override-lease {
                  type empty;
                  description
                    "Override assigned lease time with threshold";
                }
              }  // choice violation-action-choice
            }  // container violation-action
          }  // container lease-time-validation
    
          container remote-id-mismatch {
            junos:must "(!(".. reauthenticate"))";
            junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'";
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container reauthenticate {
            junos:must "(!(".. remote-id-mismatch"))";
            junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'";
            junos:must "((".. authentication" || ".. .. authentication"))";
            junos:must-message "'authentication' statement must be included with 'reauthenticate'";
            description
              "DHCP client reauthenticate processing";
            leaf lease-renewal {
              type empty;
              description
                "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT";
            }
    
            leaf remote-id-mismatch {
              type empty;
              description
                "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation";
            }
          }  // container reauthenticate
        }  // grouping dhcp-local-server-group
    
        grouping authentication-type {
          description "DHCP authentication";
          uses apply-advanced;
    
          leaf password {
            type string {
              length "1 .. 64";
            }
            description
              "Username password to use";
          }
    
          container username-include {
            description "Add username options";
            uses apply-advanced;
    
            leaf delimiter {
              type string {
                length "1";
              }
              description
                "Change delimiter/separator character";
            }
    
            leaf domain-name {
              type string {
                length "1 .. 64";
              }
              description "Add domain name";
            }
    
            leaf user-prefix {
              type string {
                length "1 .. 64";
              }
              description
                "Add user defined prefix";
            }
    
            leaf mac-address {
              type empty;
              description "Include MAC address";
            }
    
            container option-82 {
              presence "enable option-82";
              description "Include option 82";
              leaf circuit-id {
                type empty;
                description
                  "Include option 82 circuit-id (sub option 1)";
              }
    
              leaf remote-id {
                type empty;
                description
                  "Include option 82 remote-id (sub option 2)";
              }
            }  // container option-82
    
            leaf logical-system-name {
              type empty;
              description
                "Include logical system name";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Include routing instance name";
            }
    
            container client-id {
              presence "enable client-id";
              description "Include client ID";
              leaf exclude-headers {
                type empty;
                description
                  "Exclude all the headers";
              }
    
              leaf use-automatic-ascii-hex-encoding {
                type empty;
                description
                  "Use automatic ascii hex username encoding";
              }
            }  // container client-id
    
            leaf option-60 {
              type empty;
              description "Include option 60";
            }
    
            leaf circuit-type {
              type empty;
              description "Include circuit type";
            }
    
            leaf interface-name {
              type empty;
              description
                "Include interface name";
            }
    
            leaf interface-description {
              type enumeration {
                enum "device" {
                  value 0;
                  description
                    "Add the device interface description";
                }
                enum "logical" {
                  value 1;
                  description
                    "Add the logical interface description";
                }
              }
              description
                "Include interface description";
            }
    
            leaf vlan-tags {
              type empty;
              description
                "Include the vlan tag(s)";
            }
          }  // container username-include
        }  // grouping authentication-type
    
        grouping dhcp-remote-id-mismatch-type {
          description
            "DHCP client remote-id-mismatch processing";
          uses apply-advanced;
    
          leaf disconnect {
            type empty;
            description
              "Disconnect session on remote-id mismatch";
          }
        }  // grouping dhcp-remote-id-mismatch-type
    
        grouping dhcp-route-suppression-type {
          uses apply-advanced;
    
          choice dhcp-route-suppression-choice {
            leaf access-internal {
              type empty;
              description
                "Suppress access-internal and destination route addition";
            }
            leaf destination {
              type empty;
              description
                "Suppress destination route addition";
            }
          }  // choice dhcp-route-suppression-choice
        }  // grouping dhcp-route-suppression-type
    
        grouping dhcpv6-local-server-type {
          uses apply-advanced;
    
          container authentication {
            description "DHCPv6 authentication";
            uses dhcpv6-authentication-type;
          }  // container authentication
    
          container liveness-detection {
            description
              "DHCPv6 client liveness detection processing";
            uses dhcpv6-liveness-detection-type;
          }  // container liveness-detection
    
          container reconfigure {
            presence "enable reconfigure";
            description
              "DHCPv6 reconfigure processing";
            uses dhcpv6-reconfigure-type;
          }  // container reconfigure
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          container forward-snooped-clients {
            junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))";
            junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured";
            description
              "Forward snooped (unicast) packets";
            choice interface-type {
              leaf configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured interfaces";
              }
              leaf non-configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on non-configured interfaces";
              }
              leaf all-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured and non-configured interfaces";
              }
            }  // choice interface-type
          }  // container forward-snooped-clients
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container overrides {
            presence "enable overrides";
            description
              "DHCPv6 override processing";
            uses dhcpv6-override-local-server-type;
          }  // container overrides
    
          container route-suppression {
            description
              "Suppress access-internal and/or access route addition";
            uses dhcpv6-route-suppression-type;
          }  // container route-suppression
    
          list group {
            key "name";
            ordered-by user;
            description
              "Define a DHCPv6 local server group";
            uses dhcpv6-local-server-group;
          }  // list group
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              choice violation-action-choice {
                leaf strict {
                  type empty;
                  description
                    "Reject solicit and renew";
                }
                leaf override-lease {
                  type empty;
                  description
                    "Override assigned lease time with threshold";
                }
              }  // choice violation-action-choice
            }  // container violation-action
          }  // container lease-time-validation
    
          choice requested-ip-check {
            leaf requested-ip-network-match {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 127";
                }
              }
              default "16";
              description
                "Subnet to match server's address for active and link-address for passive clients";
            }
            leaf requested-ip-interface-match {
              type empty;
              description
                "Use incoming-interface's subnet to check";
            }
          }  // choice requested-ip-check
    
          leaf no-snoop {
            junos:must "(!("legacy-snooping"))";
            junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement";
            type empty;
            description
              "Do not snoop DHCPV6 packets";
          }
    
          container server-duid-type {
            description
              "Define the DUID type to be used as the Server ID. Type supported is DUID-LL";
            uses duid-type;
          }  // container server-duid-type
    
          container remote-id-mismatch {
            junos:must "(!(".. reauthenticate"))";
            junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'";
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container reauthenticate {
            junos:must "(!(".. remote-id-mismatch"))";
            junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'";
            junos:must "((".. authentication" || ".. .. authentication"))";
            junos:must-message "'authentication' statement must be included with 'reauthenticate'";
            description
              "DHCP client reauthenticate processing";
            leaf lease-renewal {
              type empty;
              description
                "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT";
            }
    
            leaf remote-id-mismatch {
              type empty;
              description
                "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation";
            }
          }  // container reauthenticate
    
          container allow-leasequery {
            presence "enable allow-leasequery";
            description
              "Allow DHCPv6 leasequery";
            uses server-leasequery-type;
          }  // container allow-leasequery
    
          container allow-bulk-leasequery {
            presence
              "enable allow-bulk-leasequery";
            description
              "Allow DHCPv6 bulk leasequery";
            uses server-bulk-leasequery-type;
          }  // container allow-bulk-leasequery
    
          container allow-active-leasequery {
            presence
              "enable allow-active-leasequery";
            description
              "Allow DHCPv6 active leasequery";
            uses server-active-leasequery-type;
          }  // container allow-active-leasequery
    
          container duplicate-clients {
            description
              "Allow duplicate clients";
            uses dhcpv6-duplicate-clients-type;
          }  // container duplicate-clients
    
          container dynamic-server {
            description
              "DHCPv6 dynamic server configuration";
            uses dhcpv6-dynamic-server-type;
          }  // container dynamic-server
        }  // grouping dhcpv6-local-server-type
    
        grouping dhcpv6-authentication-type {
          description "DHCPv6 authentication";
          uses apply-advanced;
    
          leaf password {
            type string {
              length "1 .. 64";
            }
            description
              "Username password to use";
          }
    
          container username-include {
            description "Add username options";
            uses apply-advanced;
    
            leaf delimiter {
              type string {
                length "1";
              }
              description
                "Change delimiter/separator character";
            }
    
            leaf domain-name {
              type string {
                length "1 .. 64";
              }
              description "Add domain name";
            }
    
            leaf user-prefix {
              type string {
                length "1 .. 64";
              }
              description
                "Add user defined prefix";
            }
    
            leaf mac-address {
              type empty;
              description "Include MAC address";
            }
    
            container client-id {
              presence "enable client-id";
              description "Include client ID";
              leaf exclude-headers {
                type empty;
                description
                  "Exclude all the headers";
              }
    
              leaf use-automatic-ascii-hex-encoding {
                type empty;
                description
                  "Use automatic ascii hex username encoding";
              }
            }  // container client-id
    
            container relay-agent-remote-id {
              presence
                "enable relay-agent-remote-id";
              description
                "Include the relay agent remote ID";
              uses apply-advanced;
    
              choice relay-agent-remote-id-choice {
                leaf enterprise-id {
                  type empty;
                  status deprecated;
                  description
                    "Only use enterprise-id portion of option-37";
                }
                leaf remote-id {
                  type empty;
                  status deprecated;
                  description
                    "Only use remote-id portion of option-37";
                }
              }  // choice relay-agent-remote-id-choice
            }  // container relay-agent-remote-id
    
            leaf logical-system-name {
              type empty;
              description
                "Include logical system name";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Include routing instance name";
            }
    
            leaf relay-agent-subscriber-id {
              type empty;
              description
                "Include the relay agent subscriber ID";
            }
    
            leaf relay-agent-interface-id {
              type empty;
              description
                "Include the relay agent interface ID";
            }
    
            leaf circuit-type {
              type empty;
              description "Include circuit type";
            }
    
            leaf interface-name {
              type empty;
              description
                "Include interface name";
            }
    
            leaf interface-description {
              type enumeration {
                enum "device" {
                  value 0;
                  description
                    "Add the device interface description";
                }
                enum "logical" {
                  value 1;
                  description
                    "Add the logical interface description";
                }
              }
              description
                "Include interface description";
            }
    
            leaf vlan-tags {
              type empty;
              description
                "Include the vlan tag(s)";
            }
          }  // container username-include
        }  // grouping dhcpv6-authentication-type
    
        grouping dhcpv6-duplicate-clients-type {
          description "Allow duplicate clients";
          choice distinguish-with {
            leaf incoming-interface {
              type empty;
              description
                "Allow duplicate clients on different underlying interfaces";
            }
          }  // choice distinguish-with
        }  // grouping dhcpv6-duplicate-clients-type
    
        grouping dhcpv6-dynamic-server-type {
          uses apply-advanced;
    
          container overrides {
            presence "enable overrides";
            description
              "DHCPv6 override processing";
            uses dhcpv6-override-dynamic-server-type;
          }  // container overrides
    
          list group {
            key "name";
            ordered-by user;
            description
              "Define a DHCPv6 dynamic server group";
            uses dhcpv6-dynamic-server-group;
          }  // list group
        }  // grouping dhcpv6-dynamic-server-type
    
        grouping dhcpv6-dynamic-server-group {
          description
            "DHCP dynamic server groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          leaf neighbor-discovery-router-advertisement {
            type string {
              length "1 .. 64";
            }
            description
              "Designated NDRA pool for this group";
          }
    
          container overrides {
            presence "enable overrides";
            description
              "DHCP override processing";
            uses dhcpv6-override-dynamic-server-type;
          }  // container overrides
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              junos:must "(!(any "system services dhcp-local-server dhcpv6 group <*> interface $$"))";
              junos:must-message "DHCP dynamic server and dhcp local server cannot be started on the same interface";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container overrides {
              description
                "DHCP override processing";
              uses dhcpv6-override-dynamic-server-type;
            }  // container overrides
          }  // list interface
        }  // grouping dhcpv6-dynamic-server-group
    
        grouping dhcpv6-liveness-detection-type {
          description
            "DHCPv6 client liveness detection processing";
          uses apply-advanced;
    
          container failure-action {
            description
              "Liveness detection failure action options";
            uses dhcp-liveness-detection-failure-action-type;
          }  // container failure-action
    
          container method {
            description
              "Liveness detection method options";
            uses apply-advanced;
    
            choice method-choice {
              container bfd {
                description
                  "Bidirectional Forwarding Detection (BFD) options";
                uses dhcp-bfd-liveness-detection-type;
              }  // container bfd
              container layer2-liveness-detection {
                description
                  "Neighbor discovery options";
                uses dhcp-arp-nud-liveness-detection-type;
              }  // container layer2-liveness-detection
            }  // choice method-choice
          }  // container method
        }  // grouping dhcpv6-liveness-detection-type
    
        grouping dhcp-bfd-liveness-detection-type {
          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 "30000 .. 255000";
              }
            }
            units "milliseconds";
            description
              "Minimum transmit and receive interval";
          }
    
          leaf minimum-transmit-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "30000 .. 255000";
              }
            }
            units "milliseconds";
            status deprecated;
            description
              "Minimum transmit interval";
          }
    
          leaf minimum-receive-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "30000 .. 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 "30000 .. 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 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";
            default "0";
            description
              "Time to hold the session-UP notification to the client";
          }
        }  // grouping dhcp-bfd-liveness-detection-type
    
        grouping dhcpv6-local-server-group {
          description "DHCP groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container authentication {
            description "DHCP authentication";
            uses dhcpv6-authentication-type;
          }  // container authentication
    
          container liveness-detection {
            description
              "DHCPv6 client liveness detection processing";
            uses dhcpv6-liveness-detection-type;
          }  // container liveness-detection
    
          container reconfigure {
            presence "enable reconfigure";
            description
              "DHCPv6 reconfigure processing";
            uses dhcpv6-reconfigure-type;
          }  // container reconfigure
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container overrides {
            presence "enable overrides";
            description
              "DHCP override processing";
            uses dhcpv6-override-local-server-type;
          }  // container overrides
    
          container route-suppression {
            description
              "Suppress access-internal and/or access route addition";
            uses dhcpv6-route-suppression-type;
          }  // container route-suppression
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf upto {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface up to";
            }
    
            leaf exclude {
              type empty;
              description
                "Exclude this interface range";
            }
    
            leaf trace {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify tracing with exclude";
              type empty;
              description
                "Enable tracing for this interface";
            }
    
            container overrides {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "DHCP override processing";
              uses dhcpv6-override-local-server-type;
            }  // container overrides
    
            container dynamic-profile {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "Dynamic profile to use";
              uses dynamic-profile-type;
            }  // container dynamic-profile
    
            leaf service-profile {
              type string {
                length "1 .. 128";
              }
              description
                "Dynamic profile to use for default service activation";
            }
    
            leaf access-profile {
              junos:must "("access profile $$")";
              junos:must-message "Matching access profile must be defined";
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              type string {
                length "1 .. 128";
              }
              description
                "Access profile to use for AAA services";
            }
    
            container short-cycle-protection {
              description
                "Short cycle lockout configuration";
              leaf lockout-min-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
    
              leaf lockout-max-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
            }  // container short-cycle-protection
          }  // list interface
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              choice violation-action-choice {
                leaf strict {
                  type empty;
                  description
                    "Reject solicit and renew";
                }
                leaf override-lease {
                  type empty;
                  description
                    "Override assigned lease time with threshold";
                }
              }  // choice violation-action-choice
            }  // container violation-action
          }  // container lease-time-validation
    
          container remote-id-mismatch {
            junos:must "(!(".. reauthenticate"))";
            junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'";
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container reauthenticate {
            junos:must "(!(".. remote-id-mismatch"))";
            junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'";
            junos:must "((".. authentication" || ".. .. authentication"))";
            junos:must-message "'authentication' statement must be included with 'reauthenticate'";
            description
              "DHCP client reauthenticate processing";
            leaf lease-renewal {
              type empty;
              description
                "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT";
            }
    
            leaf remote-id-mismatch {
              type empty;
              description
                "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation";
            }
          }  // container reauthenticate
        }  // grouping dhcpv6-local-server-group
    
        grouping dhcpv6-override-dynamic-server-type {
          description "DHCP override processing";
          uses apply-advanced;
    
          leaf interface-client-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 500000";
              }
            }
            description
              "Limit the number of clients allowed on an interface";
          }
    
          leaf rapid-commit {
            type empty;
            description
              "Enable rapid commit processing";
          }
    
          container process-inform {
            presence "enable process-inform";
            description
              "Process INFORMATION request PDUs";
            uses apply-advanced;
    
            leaf pool {
              type string {
                length "1 .. 64";
              }
              description
                "Pool name for family inet6";
            }
          }  // container process-inform
    
          leaf delegated-pool {
            type string {
              length "1 .. 64";
            }
            description
              "Delegated pool name for inet6";
          }
    
          leaf ia-na-pool {
            type string {
              length "1 .. 64";
            }
            description
              "IA_NA pool name for inet6";
          }
        }  // grouping dhcpv6-override-dynamic-server-type
    
        grouping dhcpv6-override-local-server-type {
          description "DHCP override processing";
          uses apply-advanced;
    
          leaf interface-client-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 500000";
              }
            }
            description
              "Limit the number of clients allowed on an interface";
          }
    
          leaf rapid-commit {
            type empty;
            description
              "Enable rapid commit processing";
          }
    
          container client-negotiation-match {
            description
              "Use secondary match criteria for SOLICIT PDU";
            choice match-with {
              leaf incoming-interface {
                type empty;
                description
                  "Use incoming interface";
              }
            }  // choice match-with
          }  // container client-negotiation-match
    
          container process-inform {
            presence "enable process-inform";
            description
              "Process INFORMATION request PDUs";
            uses apply-advanced;
    
            leaf pool {
              type string {
                length "1 .. 64";
              }
              description
                "Pool name for family inet6";
            }
          }  // container process-inform
    
          container delay-advertise {
            presence "enable delay-advertise";
            description
              "Filter options for dhcp-server";
            uses dhcpv6-filter-option;
          }  // container delay-advertise
    
          leaf delegated-pool {
            type string {
              length "1 .. 64";
            }
            description
              "Delegated pool name for inet6";
          }
    
          leaf multi-address-embedded-option-response {
            type empty;
            description
              "If the client requests multiple addresses place the options in each address";
          }
    
          leaf always-process-option-request-option {
            type empty;
            description
              "Always process option even after address allocation failure";
          }
    
          leaf delete-binding-on-renegotiation {
            type empty;
            description
              "Delete binding on renegotiation";
          }
    
          leaf top-level-status-code {
            type empty;
            description
              "A top level status code option rather than encapsulated in IA for NoAddrsAvail in Advertise PDUs";
          }
    
          leaf always-add-option-dns-server {
            type empty;
            description
              "Add option-23, DNS recursive name server in Advertise and Reply";
          }
    
          leaf asymmetric-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced lease time for the client. In seconds";
          }
    
          leaf asymmetric-prefix-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced prefix lease time for the client. In seconds";
          }
    
          leaf protocol-attributes {
            type string {
              length "1 .. 64";
            }
            description
              "DHCPv6 attributes to use as defined under access protocol-attributes";
          }
    
          leaf dual-stack {
            type string {
              length "1 .. 64";
            }
            description
              "Dual stack group to use";
          }
        }  // grouping dhcpv6-override-local-server-type
    
        grouping dhcpv6-filter-option {
          description
            "Generic DHCPv6 filter processing";
          uses apply-advanced;
    
          leaf delay-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 30";
              }
            }
            units "seconds";
            default "3";
            description
              "Time delay between solicit and advertise";
          }
    
          container based-on {
            description "Option number";
            uses apply-advanced;
    
            container option-18 {
              presence "enable option-18";
              description "Option 18";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-18
    
            container option-37 {
              presence "enable option-37";
              description "Option 37";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-37
    
            container option-15 {
              presence "enable option-15";
              description "Option 15";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-15
    
            container option-16 {
              presence "enable option-16";
              description "Option 16";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-16
          }  // container based-on
        }  // grouping dhcpv6-filter-option
    
        grouping dhcpv6-reconfigure-type {
          description
            "DHCPv6 reconfigure processing";
          uses apply-advanced;
    
          leaf strict {
            type empty;
            description
              "Only allow packets containing Reconfigure Accept Option";
          }
    
          leaf clear-on-abort {
            type empty;
            description
              "Delete client on reconfiguration abort";
          }
    
          leaf attempts {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            description
              "Number of reconfigure attempts before aborting";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            description
              "Initial timeout value for retry";
          }
    
          leaf token {
            type string {
              length "1 .. 244";
            }
            description "Reconfigure token";
          }
    
          container trigger {
            description
              "DHCP reconfigure trigger";
            uses reconfigure-trigger-type;
          }  // container trigger
    
          leaf support-option-pd-exclude {
            type empty;
            description
              "Request prefix exclude option in reconfigure message";
          }
        }  // grouping dhcpv6-reconfigure-type
    
        grouping dhcpv6-route-suppression-type {
          description
            "Suppress access-internal and/or access route addition";
          leaf access {
            type empty;
            description
              "Suppress access route addition";
          }
    
          leaf access-internal {
            type empty;
            description
              "Suppress access-internal route addition";
          }
        }  // grouping dhcpv6-route-suppression-type
    
        grouping dual-stack-authentication-type {
          description
            "DHCP dual stack authentication";
          uses apply-advanced;
    
          leaf password {
            type string {
              length "1 .. 64";
            }
            description
              "Username password to use";
          }
    
          container username-include {
            description "Add username options";
            uses apply-advanced;
    
            leaf delimiter {
              type string {
                length "1";
              }
              description
                "Change delimiter/separator character";
            }
    
            leaf domain-name {
              type string {
                length "1 .. 64";
              }
              description "Add domain name";
            }
    
            leaf user-prefix {
              type string {
                length "1 .. 64";
              }
              description
                "Add user defined prefix";
            }
    
            leaf mac-address {
              type empty;
              description "Include MAC address";
            }
    
            container client-id {
              presence "enable client-id";
              description "Include client ID";
              leaf exclude-headers {
                type empty;
                description
                  "Exclude all the headers";
              }
    
              leaf use-automatic-ascii-hex-encoding {
                type empty;
                description
                  "Use automatic ascii hex username encoding";
              }
            }  // container client-id
    
            leaf relay-agent-remote-id {
              type empty;
              description
                "Include the relay agent remote ID";
            }
    
            leaf logical-system-name {
              type empty;
              description
                "Include logical system name";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Include routing instance name";
            }
    
            leaf relay-agent-interface-id {
              type empty;
              description
                "Include the relay agent interface ID";
            }
    
            leaf interface-name {
              type empty;
              description
                "Include interface name";
            }
    
            leaf interface-description {
              type enumeration {
                enum "device" {
                  value 0;
                  description
                    "Add the device interface description";
                }
                enum "logical" {
                  value 1;
                  description
                    "Add the logical interface description";
                }
              }
              description
                "Include interface description";
            }
    
            leaf circuit-type {
              type empty;
              description "Include circuit type";
            }
    
            leaf vlan-tags {
              type empty;
              description
                "Include the vlan tag(s)";
            }
          }  // container username-include
        }  // grouping dual-stack-authentication-type
    
        grouping duid-type {
          uses apply-advanced;
    
          leaf duid_ll {
            type empty;
            description
              "Link Layer Address based DUID ";
          }
        }  // grouping duid-type
    
        grouping dynamic-profile-type {
          description "Dynamic profile to use";
          uses apply-advanced;
    
          leaf dynamic-profile {
            junos:must "("dynamic-profiles $$")";
            junos:must-message "Dynamic profile must be defined";
            type string {
              length "1 .. 80";
            }
            description "Dynamic profile to use";
          }
    
          choice dynamic-profile-type-choice {
            leaf use-primary {
              junos:must "("dynamic-profiles $$")";
              junos:must-message "Dynamic profile must be defined";
              type string {
                length "1 .. 80";
              }
              description
                "Dynamic profile to use on the primary interface";
            }
            container aggregate-clients {
              presence
                "enable aggregate-clients";
              description
                "Aggregate client profiles";
              uses apply-advanced;
    
              choice aggregate-type {
                leaf merge {
                  type empty;
                  description
                    "Merge the client dynamic profiles";
                }
                leaf replace {
                  type empty;
                  description
                    "Replace client dynamic profiles";
                }
              }  // choice aggregate-type
            }  // container aggregate-clients
          }  // choice dynamic-profile-type-choice
        }  // grouping dynamic-profile-type
    
        grouping jdhcp-dual-stack-protocol-mstr-type {
          description
            "Select family as protocol master";
          choice addr-fam {
            leaf inet {
              type empty;
              description
                "INET family has protocol master behavior";
            }
            leaf inet6 {
              type empty;
              description
                "INET6 family has protocol master behavior";
            }
          }  // choice addr-fam
        }  // grouping jdhcp-dual-stack-protocol-mstr-type
    
        grouping jdhcp-duplicate-clients-in-subnet-type {
          description
            "Allow duplicate clients in a subnet";
          choice distinguish-with {
            leaf incoming-interface {
              type empty;
              description
                "Allow duplicate clients on different interfaces in a subnet";
            }
            leaf option-82 {
              type empty;
              description
                "Allow duplicate clients using different option-82 options in a subnet";
            }
          }  // choice distinguish-with
        }  // grouping jdhcp-duplicate-clients-in-subnet-type
    
        grouping jsscd-static-subscribers-type {
          uses apply-advanced;
    
          container access-profile {
            description
              "Access profile reference";
            uses jsscd-access-profile-type;
          }  // container access-profile
    
          container dynamic-profile {
            description
              "Dynamic profile reference";
            uses jsscd-dynamic-profile-type;
          }  // container dynamic-profile
    
          container service-profile {
            description
              "Dynamic profile to use for default service activation";
            uses jsscd-service-profile-type;
          }  // container service-profile
    
          container authentication {
            description
              "Static Subscriber Client authentication";
            uses jsscd-authentication-type;
          }  // container authentication
    
          list group {
            key "name";
            ordered-by user;
            description
              "Static Subscriber Client group configuration";
            uses jsscd-group-type;
          }  // list group
    
          leaf auto-login {
            type empty;
            description
              "Auto login the operator logged-out static subscribers";
          }
    
          leaf baseline-stats {
            type empty;
            description
              "Baseline the statistics for static subscribers";
          }
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              junos:must "((".. subscriber-ip-address" || ".. subscriber-ipv6-address"))";
              junos:must-message "subscriber ip or ipv6 address must be configured";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container subscriber-ip-address {
              description
                "Assigned IP address to report externally";
              uses apply-advanced;
    
              leaf address {
                type jt:ipv4addr;
                description "IPv4 address";
              }
            }  // container subscriber-ip-address
    
            container subscriber-ipv6-address {
              description
                "Assigned IPv6 address to report externally";
              uses apply-advanced;
    
              leaf address {
                type jt:ipv6prefix;
                description
                  "IPv6 Address or Prefix";
              }
            }  // container subscriber-ipv6-address
          }  // list interface
        }  // grouping jsscd-static-subscribers-type
    
        grouping jsscd-access-profile-type {
          description
            "Access profile for static subscribers";
          uses apply-advanced;
    
          leaf access-profile-name {
            junos:must "("access profile $$")";
            junos:must-message "referenced access profile must be defined";
            type string;
            description "Profile name";
          }
        }  // grouping jsscd-access-profile-type
    
        grouping jsscd-authentication-type {
          description
            "Static Subscriber Client authentication";
          uses apply-advanced;
    
          leaf password {
            type jt:unreadable;
            description
              "Username password to use";
          }
    
          container username-include {
            description "Add username options";
            uses apply-advanced;
    
            leaf delimiter {
              type string {
                length "1";
              }
              description
                "Change delimiter/separator character";
            }
    
            leaf domain-name {
              type string {
                length "1 .. 64";
              }
              description "Add domain name";
            }
    
            leaf user-prefix {
              type string {
                length "1 .. 64";
              }
              description
                "Add user defined prefix";
            }
    
            leaf interface {
              type empty;
              description
                "Include interface name";
            }
    
            leaf logical-system-name {
              type empty;
              description
                "Include logical system name";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Include routing instance name";
            }
    
            leaf vlan-tags {
              type empty;
              description "Include vlan tag(s)";
            }
          }  // container username-include
        }  // grouping jsscd-authentication-type
    
        grouping jsscd-dynamic-profile-type {
          description "Dynamic profile to use";
          uses apply-advanced;
    
          leaf dynamic-profile-name {
            junos:must "("dynamic-profiles $$")";
            junos:must-message "Dynamic profile must be defined";
            type string {
              length "1 .. 80";
            }
            description "Dynamic profile to use";
          }
    
          container aggregate-clients {
            presence "enable aggregate-clients";
            description
              "Aggregate client profiles";
            uses apply-advanced;
    
            choice aggregate-type {
              leaf merge {
                type empty;
                description
                  "Merge the client dynamic profiles";
              }
              leaf replace {
                type empty;
                description
                  "Replace client dynamic profiles";
              }
            }  // choice aggregate-type
          }  // container aggregate-clients
        }  // grouping jsscd-dynamic-profile-type
    
        grouping jsscd-group-type {
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container service-profile {
            description
              "Dynamic profile to use for default service activation";
            uses jsscd-service-profile-type;
          }  // container service-profile
    
          container access-profile {
            description
              "Access profile reference";
            uses jsscd-access-profile-type;
          }  // container access-profile
    
          container dynamic-profile {
            description
              "Dynamic profile reference";
            uses jsscd-dynamic-profile-type;
          }  // container dynamic-profile
    
          container authentication {
            description
              "Static Subscriber Client authentication";
            uses jsscd-authentication-type;
          }  // container authentication
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            leaf upto {
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface up to";
            }
    
            leaf exclude {
              type empty;
              description
                "Exclude this interface range";
            }
          }  // list interface
    
          leaf auto-login {
            type empty;
            description
              "Auto login the operator logged-out static subscribers";
          }
        }  // grouping jsscd-group-type
    
        grouping jsscd-service-profile-type {
          description
            "Service profile for static subscribers";
          uses apply-advanced;
    
          leaf service-profile-name {
            junos:must "("dynamic-profiles $$")";
            junos:must-message "referenced service profile must be defined";
            type string {
              length "1 .. 80";
            }
            description "Service profile name";
          }
        }  // grouping jsscd-service-profile-type
    
        grouping juniper-bridge-domains {
          description "Bridge domains";
          leaf name {
            type string {
              junos:posix-pattern "!^((__.*__)|(.{129,})|(.*[+].*))$";
              junos:pattern-message "Must be a non-reserved string of 128 characters or less";
            }
            description "Bridge domain name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^.{1,255}$";
              junos:pattern-message "Must be a string of 255 characters or less";
            }
            description
              "Text description of bridge domain";
          }
    
          leaf domain-type {
            type enumeration {
              enum "bridge" {
                value 0;
                description
                  "Forwarding instance";
              }
            }
            description "Type of bridge domain";
          }
    
          choice vlan_choice {
            leaf vlan-id {
              type string;
              description
                "IEEE 802.1q VLAN identifier for bridging domain";
            }
            container vlan-tags {
              presence "enable vlan-tags";
              description
                "IEEE 802.1q VLAN tags for bridging domain";
              leaf outer {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
    
              leaf inner {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
            }  // container vlan-tags
            leaf-list vlan-id-list {
              junos:must "(!(" .. .. .. pbb-options"))";
              junos:must-message "vlan-id-list is not supported for i-comp routing-instance";
              junos:must "((!(".. isolated-vlan") && !(".. community-vlans")))";
              junos:must-message "PVLAN related configuration cannot be specified with vlan-id-list";
              junos:must "(!(" .. vxlan"))";
              junos:must-message "vxlan can not be specified under vlan-id-list";
              junos:must "(!(" .. multicast-snooping-options"))";
              junos:must-message "multicast-snooping-options can not be specified under vlan-id-list";
              junos:must "(!(" .. protocols"))";
              junos:must-message "protocols can not be specified under vlan-id-list";
              junos:must "(!(" .. no-local-switching"))";
              junos:must-message "no-local-switching can not be specified under vlan-id-list";
              junos:must "(!(" .. domain-type"))";
              junos:must-message "domain-type can not be specified  under vlan-id-list";
              junos:must "(!(".. interface"))";
              junos:must-message "interface can not be specified under vlan-id-list";
              junos:must "(!(any ".. bridge-options interface <*> static-mac"))";
              junos:must-message "static mac can not be specified under vlan-id-list";
              type jt:vlan-range;
              description
                "Create bridge-domain for each of the vlan-id specified in the vlan-id-list";
            }
          }  // choice vlan_choice
    
          leaf-list isid-list {
            junos:must "(".. vlan-id")";
            junos:must-message "isid-list can be configured only under container with 'vlan-id'";
            junos:must "(!(" .. .. .. pbb-options"))";
            junos:must-message "isid-list and pbb-options can not co-exist for same routing-instance";
            junos:must "(!(" .. vxlan"))";
            junos:must-message "vxlan can not be specified under isid-list";
            junos:must "(!(".. vlan-id inner-all"))";
            junos:must-message "vlan-id inner-all can not be specified with isid-list";
            junos:must "(!(" .. vlan-id none"))";
            junos:must-message "vlan-id none  can not be specified with isid-list";
            junos:must "(!(" .. vlan-id all"))";
            junos:must-message "vlan-id all  can not be specified with isid-list";
            type string;
            ordered-by user;
            description
              "Create bridge-domain for isid (Valid isid:256..16777214)";
          }
    
          leaf vlan-id-scope-local {
            junos:must "(".. .. .. protocols evpn")";
            junos:must-message "scope-local can be configured only when routing-instance protocol type is evpn";
            junos:must "(".. isid-list")";
            junos:must-message "scope-local can be configured only when bridge-domain has isid-list configured";
            junos:must "(".. vlan-id")";
            junos:must-message "scope-local can be configured only under container with 'vlan-id'";
            type empty;
            description
              "Enable the scope of vlan-id local to avoid transmitting vlan tagged packets";
          }
    
          leaf service-id {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Service id required if bridge-domain is of type MC-AE and vlan-id all or vlan-id none or vlan-tags";
          }
    
          leaf domain-id {
            junos:must "("routing-instances ${instance} protocols evpn")";
            junos:must-message "domain-id is allowed for EVPN instances only";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 15";
              }
            }
            description
              "Domain-id for auto derived Route Target";
          }
    
          leaf no-local-switching {
            type empty;
            description
              "Disable local switching within CE-facing interfaces";
          }
    
          leaf mcae-mac-synchronize {
            type empty;
            description
              "Enable IRB MAC synchronization in this bridge domain";
          }
    
          leaf mcae-mac-flush {
            type empty;
            description
              "Enable MCAE MAC flush in a/s mode for a bridge domain on MCAE link up";
          }
    
          leaf no-irb-layer-2-copy {
            junos:must "(".. routing-interface")";
            junos:must-message "routing-interface must be configured to configure this feature";
            type empty;
            description
              "Disable transmission of layer-2 copy of packets of irb routing-interface";
          }
    
          leaf enable-mac-move-action {
            type empty;
            description
              "Enable blocking action due to mac-move in this Bridge Domain";
          }
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface name for this bridge domain";
            leaf name {
              junos:must "(!("interfaces $$-IFL encapsulation ethernet"))";
              junos:must-message "encapsulation ethernet is not allowed on l2 interface";
              junos:must "((!("interfaces $$-IFL etree-ac-role") || "routing-instances ${instance} protocols evpn evpn-etree"))";
              junos:must-message "etree must be enabled under routing-instance";
              junos:must "((!("interfaces $$-IFL family") || "interfaces $$-IFL family bridge"))";
              junos:must-message "only family bridge can be configured on this interface";
              junos:must "((!(("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-tags inner-list")) || !((".. .. vlan-id" || ".. .. vlan-tags"))))";
              junos:must-message "interface with vlan-id-list/inner-list cannot be added to bridge-domain with a vlan-id/vlan-tags configured";
              junos:must "(!("irb"))";
              junos:must-message "IRB interface is not supported as interface in bridge-domain";
              junos:must "(!("interfaces $$-IFL family bridge interface-mode"))";
              junos:must-message "Interface with 'interface-mode' is not allowed in a bridge-domain";
              junos:must "(!(".. .. .. interfaces $$"))";
              junos:must-message "This interface is already defined at the routing-instance level";
              junos:must "(((!("interfaces $$-IFL vlan-id-range") || ".. .. vlan-id all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization")))";
              junos:must-message "vlan-id-range is specified for this logical interface; 'vlan-id all' should also be enabled";
              junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || (".. .. vlan-id inner-all" || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))))";
              junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured";
              junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))";
              junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled";
              type string;
            }
    
            uses apply-advanced;
    
            leaf protect-interface {
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be part of this routing instance";
              junos:must "(!("interfaces ${inter_name} esi"))";
              junos:must-message "ESI can not be configured for protect interface";
              junos:must "("routing-instances ${instance} protocols evpn")";
              junos:must-message "Protocol EVPN must be configured in the evpn instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Name of protect interface";
            }
          }  // list interface
    
          leaf routing-interface {
            junos:must "(!((".. .. .. protocols evpn mclag" && !(".. no-arp-suppression"))))";
            junos:must-message "no-arp-suppression needs to be configured, when evpn is configured with mclag.";
            junos:must "(!((".. mcae-mac-synchronize" && "interfaces $$-IFL mac")))";
            junos:must-message "irb-ifl mac and bridge mcae-mac-synchronize cannot coexist";
            junos:must "((!("interfaces $$-IFL virtual-gateway-esi") || "routing-instances ${instance} protocols evpn encapsulation vxlan"))";
            junos:must-message "irb-ifl with virtual-gateway-esi only for instance with encapsulation type vxlan";
            junos:must "(!(any ".. interface <ps*>"))";
            junos:must-message "IRB cannot be added to bridge-domain with PS interface";
            junos:must "((!("interfaces $$-IFL family mpls") || !(("routing-instances ${instance} instance-type virtual-switch" && ("routing-instances ${instance} protocols vpls" && "routing-instances ${instance} route-distinguisher")))))";
            junos:must-message "routing-interface with family mpls cannot be added to virtual-switch with protocol VPLS";
            junos:must "((!(".. vlan-tags") || !("interfaces $$-IFL family mpls")))";
            junos:must-message "routing-interface with family mpls cannot be added to bridge-domain with 'vlan-tags'";
            junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))";
            junos:must-message "routing-interface not valid for vlan-bundle service type";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))";
            junos:must-message "routing-interface cannot be configured under bridge-domain with 'vlan-id all' or 'vlan-id inner-all'";
            junos:must "((".. vlan-id" || ".. vlan-tags"))";
            junos:must-message "routing-interface can be configured only under bridge-domain with 'vlan-id' or 'vlan-tags'";
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Routing interface name for this bridge-domain";
          }
    
          container forwarding-options {
            description
              "Forwarding options configuration";
            uses juniper-bridge-forwarding-options;
          }  // container forwarding-options
    
          container bridge-options {
            description
              "Bridge domain configuration";
            uses juniper-protocols-bd;
          }  // container bridge-options
    
          container protocols {
            presence "enable protocols";
            uses apply-advanced;
    
            container igmp-snooping {
              presence "enable igmp-snooping";
              description
                "IGMP snooping configuration";
              uses juniper-bd-protocols-igmp-snooping;
            }  // container igmp-snooping
    
            container mld-snooping {
              presence "enable mld-snooping";
              description
                "MLD snooping configuration";
              uses juniper-bd-protocols-mld-snooping;
            }  // container mld-snooping
          }  // container protocols
    
          container vxlan {
            junos:must "((". ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || (". ingress-node-replication" || ".. .. .. switch-options ovsdb-managed"))))))";
            junos:must-message "multicast-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan should be enabled";
            junos:must "((". ovsdb-managed" || (".. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || (".. .. .. switch-options remote-vtep-v6-list" || ".. .. .. switch-options remote-vtep-list")))))))))";
            junos:must-message "One of multicast-group or ovsdb-managed or protocols evpn encapsulation vxlan or remote-vtep-list should be enabled. ingress-node-replication must be configured when remote-vtep-list is configured";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))";
            junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or 'vlan-id inner-all'";
            junos:must "(("routing-instances ${instance} vtep-source-interface" || ".. .. .. switch-options vtep-source-interface"))";
            junos:must-message "vtep-source-interface is required for VXLAN configuration";
            description "VXLAN options";
            uses apply-advanced;
    
            leaf ovsdb-managed {
              junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))";
              junos:must-message "Not valid with protocols evpn encapsulation vxlan";
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || ".. multicast-group"))))";
              junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group";
              type empty;
              description
                "Bridge-domain is managed remotely via VXLAN OVSDB Controller";
            }
    
            leaf vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16777214";
                }
              }
              description "VXLAN identifier";
            }
    
            leaf translation-vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777214";
                }
              }
              description
                "Translated VXLAN identifier";
            }
    
            leaf multicast-group {
              junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))";
              junos:must-message "Not valid with protocols evpn encapsulation vxlan";
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || (".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || ".. multicast-v6-group")))))))";
              junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed";
              type jt:ipv4addr;
              description
                "Multicast group registered for VXLAN segment";
            }
    
            leaf encapsulate-inner-vlan {
              junos:must "(!(".. .. vlan-id none"))";
              junos:must-message "encapsulate inner vlan not valid with vlan-id none";
              type empty;
              description
                "Retain inner VLAN in the packet";
            }
    
            leaf decapsulate-accept-inner-vlan {
              junos:must "(!(".. .. vlan-id none"))";
              junos:must-message "accept inner vlan not valid with vlan-id none";
              type empty;
              description
                "Accept VXLAN packets with inner VLAN";
            }
    
            leaf unreachable-vtep-aging-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "300 .. 1800";
                }
              }
              units "seconds";
              description
                "Unreachable VXLAN tunnel endpoint removal timer";
            }
    
            leaf ingress-node-replication {
              junos:must "(!(".. .. .. .. protocols evpn assisted-replication"))";
              junos:must-message "ingress-node-replication cannot be configured with assisted-replication";
              junos:must "((".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || (".. .. .. .. switch-options remote-vtep-v6-list" || ".. .. .. .. switch-options remote-vtep-list")))))))";
              junos:must-message "Valid for ovsdb-managed instance or with remote-vtep-list or remote-vtep-v6-list or evpn vxlan";
              type empty;
              description
                "Enable ingress node replication";
            }
    
            leaf-list static-remote-vtep-list {
              type jt:ipaddr;
              max-elements 1024;
              description
                "Configure bridge domain specific static remote VXLAN tunnel endpoints";
            }
          }  // container vxlan
    
          leaf isolated-vlan {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4094";
              }
            }
            description
              "Isolated VLAN ID for private vlan bridge domain";
          }
    
          leaf-list community-vlans {
            type jt:vlan-range;
            description
              "List of Community VLANs for private vlan bridge domain";
          }
    
          container proxy-mac {
            junos:must "((".. .. .. instance-type virtual-switch" || ".. .. .. instance-type mac-vrf"))";
            junos:must-message "Applicable to instance-type evpn or mac-vrf only";
            description "Proxy MAC settings";
            uses apply-advanced;
    
            leaf irb {
              junos:must "(!(".. .. no-arp-suppression"))";
              junos:must-message "Proxy MAC is not supported with no-arp-suppression";
              junos:must "((".. .. routing-interface" && !(".. proxy-mac-address")))";
              junos:must-message "Proxy MAC in IRB mode should have routing-interface configured";
              type empty;
              description
                "Reply with virtual-gateway MAC or IRB MAC";
            }
    
            leaf proxy-mac-address {
              junos:must "(!(".. .. no-arp-suppression"))";
              junos:must-message "Proxy MAC is not supported with no-arp-suppression";
              junos:must "((!(".. .. routing-interface") && !(".. irb")))";
              junos:must-message "Proxy MAC with specified MAC should not have routing-interface configured";
              type jt:mac-unicast;
              description
                "Reply with configured MAC for all requests";
            }
          }  // container proxy-mac
    
          container multicast-snooping-options {
            description
              "Multicast snooping option configuration";
            uses juniper-multicast-snooping-options;
          }  // container multicast-snooping-options
        }  // grouping juniper-bridge-domains
    
        grouping juniper-bd-protocols-igmp-snooping {
          description "IGMP snooping options";
          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 "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: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 learn-pim-router {
            type empty;
            description
              "Learn PIM router interfaces from PIM hellos";
          }
    
          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 {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "With qualified-learning source-address should be configured under Vlan options";
              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 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 "(((".. .. .. .. interface $$" || ".. .. .. .. .. .. interface $$") || (!(".. .. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))";
              junos:must-message "interface options can be specified for the interfaces in the routing-instance";
              junos:must "(!(".. .. .. .. 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 {
              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
    
          list pseudowire-remote-address {
            junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
            junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
            key "name";
            ordered-by user;
            description
              "Pseudowire interface options for IGMP";
            leaf name {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan";
              type jt:ipv4addr;
              description
                "Pseudowire endpoint address";
            }
    
            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";
            }
          }  // list pseudowire-remote-address
    
          list vlan {
            key "name";
            ordered-by user;
            description "Vlan options";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description "VLAN name";
            }
    
            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";
            }
    
            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 {
                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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for IGMP";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
    
            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";
              }
    
              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 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
    
              list pseudowire-remote-address {
                junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
                junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
                key "name";
                ordered-by user;
                description
                  "Pseudowire interface options for IGMP";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Pseudowire endpoint address";
                }
    
                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";
                }
              }  // list pseudowire-remote-address
            }  // list qualified-vlan
          }  // list vlan
        }  // grouping juniper-bd-protocols-igmp-snooping
    
        grouping juniper-bd-protocols-mld-snooping {
          description "MLD snooping options";
          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 (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";
          }
    
          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";
          }
    
          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 {
              junos:must "(!(".. .. .. .. 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";
            }
    
            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 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 "(((".. .. .. .. interface $$" || ".. .. .. .. .. .. interface $$") || (!(".. .. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))";
              junos:must-message "interface options can be specified for the interfaces in the routing-instance";
              junos:must "(!(".. .. .. .. 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 {
              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
    
          list pseudowire-remote-address {
            junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
            junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
            key "name";
            ordered-by user;
            description
              "Pseudowire interface options for MLD";
            leaf name {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan";
              type jt:ipv4addr;
              description
                "Pseudowire endpoint address";
            }
    
            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";
            }
          }  // list pseudowire-remote-address
    
          list vlan {
            key "name";
            ordered-by user;
            description "Vlan options";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description
                "Vlan of the bridge-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";
            }
    
            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 {
                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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for MLD";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
    
            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";
              }
    
              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 {
                  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
    
              list pseudowire-remote-address {
                junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
                junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
                key "name";
                ordered-by user;
                description
                  "Pseudowire interface options for MLD";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Pseudowire endpoint address";
                }
    
                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";
                }
              }  // list pseudowire-remote-address
            }  // list qualified-vlan
          }  // list vlan
        }  // grouping juniper-bd-protocols-mld-snooping
    
        grouping juniper-bridge-forwarding-options {
          uses apply-advanced;
    
          container filter {
            description
              "Filtering for bridge forwarding table";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of input filter to apply for forwarded packets";
            }
          }  // container filter
    
          container flood {
            description
              "Filtering for bridge flood table";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of input filter to apply for bridge flood packets";
            }
          }  // container flood
    
          container dhcp-relay {
            status deprecated;
            description
              "Dynamic Host Configuration Protocol relay configuration";
            uses jdhcp-relay-type;
          }  // container dhcp-relay
    
          container dhcp-security {
            presence "enable dhcp-security";
            description
              "Dynamic ARP Inspection configuration";
            uses jdhcp-security-type;
          }  // container dhcp-security
        }  // grouping juniper-bridge-forwarding-options
    
        grouping jdhcp-relay-type {
          description
            "Dynamic Host Configuration Protocol relay configuration";
          uses apply-advanced;
    
          leaf duplicate-clients-on-interface {
            type empty;
            status deprecated;
            description
              "Allow duplicate clients on different interfaces in a subnet";
          }
    
          container duplicate-clients-in-subnet {
            junos:must "(!(".. duplicate-clients-on-interface"))";
            junos:must-message "Cannot specify duplicate-clients-in-subnet with duplicate-clients-on-interface";
            description
              "Allow duplicate clients in a subnet";
            uses jdhcp-duplicate-clients-in-subnet-type;
          }  // container duplicate-clients-in-subnet
    
          container dhcpv6 {
            description "DHCPv6 configuration";
            uses dhcpv6-relay-type;
          }  // container dhcpv6
    
          leaf arp-inspection {
            type empty;
            description
              "Enable Dynamic ARP Inspection";
          }
    
          container forward-snooped-clients {
            junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))";
            junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured";
            description
              "Forward snooped (unicast) packets";
            choice interface-type {
              leaf configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured interfaces";
              }
              leaf non-configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on non-configured interfaces";
              }
              leaf all-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured and non-configured interfaces";
              }
            }  // choice interface-type
          }  // container forward-snooped-clients
    
          container authentication {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'authentication' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            description "DHCP authentication";
            uses authentication-type;
          }  // container authentication
    
          container liveness-detection {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'liveness-detection' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            description
              "DHCP client liveness detection processing";
            uses dhcp-liveness-detection-type;
          }  // container liveness-detection
    
          container dynamic-profile {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'dynamic-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'access-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container overrides {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'overrides' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            presence "enable overrides";
            description
              "DHCP override processing";
            uses override-type;
          }  // container overrides
    
          container relay-option {
            junos:must "((!(".. relay-option-60") && !(any ".. group <*> relay-option-60")))";
            junos:must-message "Cannot specify relay-option-60 with relay-option";
            presence "enable relay-option";
            description "DHCP option processing";
            uses dhcp-generic-v4-option;
          }  // container relay-option
    
          container server-match {
            description
              "Server match processing";
            uses apply-advanced;
    
            container default-action {
              presence "enable default-action";
              description
                "Server match default action";
              uses server-match-action-choice;
            }  // container default-action
    
            list address {
              key "name";
              ordered-by user;
              description "Server address";
              leaf name {
                type jt:ipv4prefix;
                description
                  "Server address for matching";
              }
    
              uses apply-advanced;
    
              choice server-match-action-choice {
                leaf forward-only {
                  type empty;
                  description
                    "Forward without subscriber services when a match is made";
                }
                leaf create-relay-entry {
                  type empty;
                  description
                    "Create relay entry and allow subscriber services";
                }
              }  // choice server-match-action-choice
            }  // list address
          }  // container server-match
    
          container relay-option-60 {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'relay-option-60' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            junos:must "((!(".. relay-option") && !(any ".. group <*> relay-option")))";
            junos:must-message "Cannot specify relay-option with relay-option-60 ";
            presence "enable relay-option-60";
            status deprecated;
            description
              "DHCP option-60 processing";
            uses relay-option-60-type-top;
          }  // container relay-option-60
    
          container relay-option-82 {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'relay-option-82' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            presence "enable relay-option-82";
            description
              "DHCP option-82 processing";
            uses relay-option-82-type;
          }  // container relay-option-82
    
          container forward-only {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'forward-only' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            presence "enable forward-only";
            description
              "Forward DHCP packets without creating binding";
            uses forward-only-to-rc-type;
          }  // container forward-only
    
          leaf description {
            type string;
            description
              "Text description of servers";
          }
    
          leaf maximum-hop-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 16";
              }
            }
            description
              "Maximum number of hops per packet";
          }
    
          leaf minimum-wait-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 30000";
              }
            }
            description
              "Minimum number of seconds before requests are forwarded";
          }
    
          leaf client-response-ttl {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 255";
              }
            }
            description
              "IP time-to-live value to set in responses to client";
          }
    
          leaf source-ip-change {
            type empty;
            description
              "Use address of egress interface as source ip";
          }
    
          leaf forward-only-replies {
            type empty;
            description
              "Forward-only replies from server to appropriate logical-system:routing-instance based on options";
          }
    
          container server-group {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'server-group' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            description
              "Define a DHCP server group";
            uses server-group-type;
          }  // container server-group
    
          container active-server-group {
            description
              "Name of DHCP server group";
            uses dhcpv4-gbl-active-sg-type;
          }  // container active-server-group
    
          container route-suppression {
            junos:must "(!(".. liveness-detection method layer2-liveness-detection"))";
            junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection";
            junos:must "(!(".. overrides no-arp"))";
            junos:must-message "Cannot specify route-suppression with overrides no-arp";
            description
              "Suppress access-internal and/or destination route addition";
            uses dhcp-route-suppression-type;
          }  // container route-suppression
    
          list group {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'group' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            key "name";
            ordered-by user;
            description "Define a DHCP group";
            uses dhcp-group;
          }  // list group
    
          list dual-stack-group {
            key "name";
            description
              "Define a DHCP dual stack group";
            uses dhcp-dual-stack-group;
          }  // list dual-stack-group
    
          leaf no-snoop {
            junos:must "(!("legacy-snooping"))";
            junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement";
            type empty;
            description
              "Do not snoop DHCP packets";
          }
    
          leaf server-response-time {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "0";
            description
              "Number of seconds in a period of activity between the last server response and an unaswered request";
          }
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation in seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              leaf drop {
                type empty;
                description
                  "Drop dhcpv4 offer and ack packets";
              }
            }  // container violation-action
          }  // container lease-time-validation
    
          container leasequery {
            junos:must "(".. overrides always-write-option-82")";
            junos:must-message "Must configure [overrides always-write-option-82] to overwrite circuit-id";
            junos:must "((".. relay-option-82 circuit-id" && (!(".. relay-option-82 circuit-id use-interface-description") && !(".. relay-option-82 circuit-id require-interface-description"))))";
            junos:must-message "Must configure [relay-option-82 circuit-id] without description to insert circuit-id";
            presence "enable leasequery";
            description
              "DHCP leasequery configuration";
            uses relay-leasequery-type;
          }  // container leasequery
    
          container bulk-leasequery {
            presence "enable bulk-leasequery";
            description
              "DHCP bulk leasequery configuration";
            uses relay-bulk-leasequery-v4-type;
          }  // container bulk-leasequery
    
          container active-leasequery {
            junos:must "(".. bulk-leasequery")";
            junos:must-message "Must configure bulk-leasequery";
            presence "enable active-leasequery";
            description
              "DHCPv4 active leasequery configuration";
            uses relay-active-leasequery-v4-type;
          }  // container active-leasequery
    
          container remote-id-mismatch {
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
        }  // grouping jdhcp-relay-type
    
        grouping dhcp-dual-stack-group {
          description "DHCP dual stack groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Dual stack group name";
          }
    
          uses apply-advanced;
    
          container authentication {
            description "DHCP authentication";
            uses dual-stack-authentication-type;
          }  // container authentication
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to be used for jdhcpd";
          }
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          container liveness-detection {
            description
              "DHCP client liveness detection processing";
            uses dhcp-liveness-detection-dualstack-type;
          }  // container liveness-detection
    
          container relay-agent-interface-id {
            presence
              "enable relay-agent-interface-id";
            description
              "Interface-id option processing";
            uses v6-relay-option-interface-id-type;
          }  // container relay-agent-interface-id
    
          container relay-agent-remote-id {
            presence
              "enable relay-agent-remote-id";
            description
              "Remote-id option processing";
            uses v6-relay-option-remote-id-type;
          }  // container relay-agent-remote-id
    
          container classification-key {
            junos:must "(".. dynamic-profile")";
            junos:must-message "dynamic profile configuration in dual-stack-group is must for configuring classification-type";
            description
              "Classification key for identifying dual stack household";
            uses classification-types;
          }  // container classification-key
    
          container protocol-master {
            description
              "Select family as protocol master";
            uses jdhcp-dual-stack-protocol-mstr-type;
          }  // container protocol-master
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
        }  // grouping dhcp-dual-stack-group
    
        grouping dhcp-generic-v4-option {
          description
            "Generic DHCP options processing";
          uses apply-advanced;
    
          leaf option-number {
            type enumeration {
              enum "60" {
                value 0;
                status deprecated;
                description "Option 60";
              }
              enum "77" {
                value 1;
                status deprecated;
                description "Option 77";
              }
            }
            status deprecated;
            description "Option number";
          }
    
          container equals {
            status deprecated;
            description "Generic option equals";
            uses relay-v4-option-ascii-hex;
          }  // container equals
    
          container default-action {
            status deprecated;
            description
              "Generic option default action";
            uses dhcp-v4-option-default-action;
          }  // container default-action
    
          container starts-with {
            status deprecated;
            description
              "Generic option starts with";
            uses relay-v4-option-ascii-hex;
          }  // container starts-with
    
          container option-60 {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-60  with option-number";
            presence "enable option-60";
            description
              "Add option 60 processing";
            uses dhcp-generic-v4-option-type;
          }  // container option-60
    
          container option-77 {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-77  with option-number";
            presence "enable option-77";
            description
              "Add option 77 processing";
            uses dhcp-generic-v4-option-type;
          }  // container option-77
    
          list option-order {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-order  with option-number";
            key "name";
            ordered-by user;
            description
              "Options precedence order";
            leaf name {
              type enumeration {
                enum "60" {
                  value 0;
                  description "Option 60";
                }
                enum "77" {
                  value 1;
                  description "Option 77";
                }
              }
              description "Option number";
            }
    
            uses apply-advanced;
          }  // list option-order
        }  // grouping dhcp-generic-v4-option
    
        grouping dhcp-generic-v4-option-type {
          uses apply-advanced;
    
          container equals {
            description "Generic option equals";
            uses relay-v4-option-ascii-hex;
          }  // container equals
    
          container default-action {
            description
              "Generic option default action";
            uses dhcp-v4-option-default-action;
          }  // container default-action
    
          container starts-with {
            description
              "Generic option starts with";
            uses relay-v4-option-ascii-hex;
          }  // container starts-with
        }  // grouping dhcp-generic-v4-option-type
    
        grouping dhcp-group {
          description "DHCP groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container active-server-group {
            description
              "Name of DHCP server group";
            uses dhcpv4-gp-active-sg-type;
          }  // container active-server-group
    
          container authentication {
            description "DHCP authentication";
            uses authentication-type;
          }  // container authentication
    
          container liveness-detection {
            description
              "DHCP client liveness detection processing";
            uses dhcp-liveness-detection-type;
          }  // container liveness-detection
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container overrides {
            presence "enable overrides";
            description
              "DHCP override processing";
            uses override-type;
          }  // container overrides
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container server-match {
            description
              "Server match processing";
            uses apply-advanced;
    
            container default-action {
              presence "enable default-action";
              description
                "Server match default action";
              uses server-match-action-choice;
            }  // container default-action
    
            list address {
              key "name";
              ordered-by user;
              description "Server address";
              leaf name {
                type jt:ipv4prefix;
                description
                  "Server address for matching";
              }
    
              uses apply-advanced;
    
              choice server-match-action-choice {
                leaf forward-only {
                  type empty;
                  description
                    "Forward without subscriber services when a match is made";
                }
                leaf create-relay-entry {
                  type empty;
                  description
                    "Create relay entry and allow subscriber services";
                }
              }  // choice server-match-action-choice
            }  // list address
          }  // container server-match
    
          container relay-option {
            junos:must "((!(".. relay-option-60") && !(".. .. relay-option-60")))";
            junos:must-message "Cannot specify relay-option-60 with relay-option";
            presence "enable relay-option";
            description "DHCP option processing";
            uses dhcp-generic-v4-option;
          }  // container relay-option
    
          container relay-option-60 {
            junos:must "((!(".. relay-option") && !(".. .. relay-option")))";
            junos:must-message "Cannot specify relay-option with relay-option-60";
            presence "enable relay-option-60";
            status deprecated;
            description
              "DHCP option-60 processing";
            uses relay-option-60-type-group;
          }  // container relay-option-60
    
          container relay-option-82 {
            presence "enable relay-option-82";
            description
              "DHCP option-82 processing";
            uses relay-option-82-type;
          }  // container relay-option-82
    
          container forward-only {
            presence "enable forward-only";
            description
              "Forward DHCP packets without creating binding";
            uses forward-only-to-rc-type;
          }  // container forward-only
    
          container route-suppression {
            junos:must "(!(".. liveness-detection method layer2-liveness-detection"))";
            junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection";
            junos:must "((!(".. overrides no-arp") && !(".. .. overrides no-arp")))";
            junos:must-message "Cannot specify route-suppression with overrides no-arp";
            description
              "Suppress access-internal and/or destination route addition";
            uses dhcp-route-suppression-type;
          }  // container route-suppression
    
          leaf description {
            type string;
            description
              "Text description of servers";
          }
    
          leaf maximum-hop-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 16";
              }
            }
            description
              "Maximum number of hops per packet";
          }
    
          leaf minimum-wait-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 30000";
              }
            }
            description
              "Minimum number of seconds before requests are forwarded";
          }
    
          leaf client-response-ttl {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 255";
              }
            }
            description
              "IP time-to-live value to set in responses to client";
          }
    
          leaf source-ip-change {
            type empty;
            description
              "Use address of egress interface as source ip";
          }
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf upto {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface up to";
            }
    
            leaf exclude {
              type empty;
              description
                "Exclude this interface range";
            }
    
            container overrides {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "DHCP override processing";
              uses override-type;
            }  // container overrides
    
            container dynamic-profile {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "Dynamic profile to use";
              uses dynamic-profile-type;
            }  // container dynamic-profile
    
            leaf service-profile {
              type string {
                length "1 .. 128";
              }
              description
                "Dynamic profile to use for default service activation";
            }
    
            leaf access-profile {
              junos:must "("access profile $$")";
              junos:must-message "Matching access profile must be defined";
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              type string {
                length "1 .. 128";
              }
              description
                "Access profile to use for AAA services";
            }
    
            container short-cycle-protection {
              description
                "Short cycle lockout configuration";
              leaf lockout-min-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
    
              leaf lockout-max-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
            }  // container short-cycle-protection
          }  // list interface
    
          container remote-id-mismatch {
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation in seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              leaf drop {
                type empty;
                description
                  "Drop dhcpv4 offer and ack packets";
              }
            }  // container violation-action
          }  // container lease-time-validation
        }  // grouping dhcp-group
    
        grouping dhcp-liveness-detection-type {
          description
            "DHCP client liveness detection processing";
          uses apply-advanced;
    
          container failure-action {
            description
              "Liveness detection failure action options";
            uses dhcp-liveness-detection-failure-action-type;
          }  // container failure-action
    
          container method {
            description
              "Liveness detection method options";
            uses apply-advanced;
    
            choice method-choice {
              container bfd {
                description
                  "Bidirectional Forwarding Detection (BFD) options";
                uses dhcp-bfd-liveness-detection-type;
              }  // container bfd
              container layer2-liveness-detection {
                junos:must "((!(".. .. route-suppression") && (!(".. .. .. route-suppression") && !(".. .. .. .. route-suppression"))))";
                junos:must-message "Method not allowed with route-suppression enabled";
                description
                  "Address resolution options";
                uses dhcp-arp-nud-liveness-detection-type;
              }  // container layer2-liveness-detection
            }  // choice method-choice
          }  // container method
        }  // grouping dhcp-liveness-detection-type
    
        grouping dhcp-v4-option-default-action {
          description "Default action";
          uses apply-advanced;
    
          choice server-group-choice {
            leaf relay-server-group {
              junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
              junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]";
              type string {
                length "1 .. 64";
              }
              description
                "Name of DHCP relay server group when match is made";
            }
            leaf local-server-group {
              junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))";
              junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
              type string {
                length "1 .. 64";
              }
              description
                "Name of DHCP local server group when match is made";
            }
            leaf drop {
              type empty;
              description
                "Discard when a match is made";
            }
            leaf forward-only {
              type empty;
              description
                "Forward without subscriber services when a match is made";
            }
          }  // choice server-group-choice
        }  // grouping dhcp-v4-option-default-action
    
        grouping dhcpv4-gbl-active-sg-type {
          leaf active-server-group {
            junos:must "(".. .. server-group $$")";
            junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]";
            type string {
              length "1 .. 64";
            }
            description
              "Name of DHCP server group";
          }
    
          leaf allow-server-change {
            type empty;
            description
              "Accept DHCP-ACK from any server in this group";
          }
        }  // grouping dhcpv4-gbl-active-sg-type
    
        grouping dhcpv4-gp-active-sg-type {
          leaf active-server-group {
            junos:must "(".. .. .. server-group $$")";
            junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]";
            type string {
              length "1 .. 64";
            }
            description
              "Name of DHCP server group";
          }
    
          leaf allow-server-change {
            type empty;
            description
              "Accept DHCP-ACK from any server in this group";
          }
        }  // grouping dhcpv4-gp-active-sg-type
    
        grouping dhcpv6-relay-type {
          description
            "DHCPv6 relay configuration";
          uses apply-advanced;
    
          container authentication {
            description "DHCPv6 authentication";
            uses dhcpv6-authentication-type;
          }  // container authentication
    
          container liveness-detection {
            description
              "DHCPv6 client liveness detection processing";
            uses dhcpv6-liveness-detection-type;
          }  // container liveness-detection
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container overrides {
            presence "enable overrides";
            description
              "DHCPv6 override processing";
            uses dhcpv6-override-relay-type;
          }  // container overrides
    
          container relay-option {
            presence "enable relay-option";
            description
              "DHCPv6 option processing";
            uses dhcp-generic-v6-option;
          }  // container relay-option
    
          leaf exclude-relay-agent-identifier {
            type empty;
            description
              "Exclude relay agent identifier from packets to server";
          }
    
          container server-match {
            description
              "Server match processing";
            uses apply-advanced;
    
            container default-action {
              description
                "Server match default action";
              uses server-match-action-choice;
            }  // container default-action
    
            container duid {
              description
                "Match duid processing";
              uses apply-advanced;
    
              container equals {
                description "Duid equals";
                uses server-match-v6-ascii-hex;
              }  // container equals
    
              container starts-with {
                description "Duid starts with";
                uses server-match-v6-ascii-hex;
              }  // container starts-with
            }  // container duid
    
            list address {
              key "name";
              ordered-by user;
              description "Server ipv6 address";
              leaf name {
                type jt:ipv6prefix;
                description
                  "Server ipv6 address for matching";
              }
    
              uses apply-advanced;
    
              choice server-match-action-choice {
                leaf forward-only {
                  type empty;
                  description
                    "Forward without subscriber services when a match is made";
                }
                leaf create-relay-entry {
                  type empty;
                  description
                    "Create relay entry and allow subscriber services";
                }
              }  // choice server-match-action-choice
            }  // list address
          }  // container server-match
    
          leaf relay-agent-option-79 {
            type empty;
            description
              "Add the client MAC address to the Relay Forward header.";
          }
    
          container vendor-specific-information {
            description
              "DHCPv6 option 17 vendor-specific processing";
            uses jdhcp-vendor-specific-type;
          }  // container vendor-specific-information
    
          container forward-only {
            presence "enable forward-only";
            description
              "Forward DHCPv6 packets without creating binding";
            uses forward-only-to-rc-type;
          }  // container forward-only
    
          leaf forward-only-replies {
            type empty;
            description
              "Forward-only replies from server to appropriate logical-system:routing-instance based on options";
          }
    
          container forward-snooped-clients {
            junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))";
            junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured";
            description
              "Forward snooped (unicast) packets";
            choice interface-type {
              leaf configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured interfaces";
              }
              leaf non-configured-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on non-configured interfaces";
              }
              leaf all-interfaces {
                type empty;
                description
                  "Forward snooped (unicast) packets on configured and non-configured interfaces";
              }
            }  // choice interface-type
          }  // container forward-snooped-clients
    
          container route-suppression {
            description
              "Suppress access-internal and/or access route addition";
            uses dhcpv6-route-suppression-type;
          }  // container route-suppression
    
          list group {
            key "name";
            ordered-by user;
            description
              "Define a DHCPv6 relay group";
            uses dhcpv6-relay-group;
          }  // list group
    
          container relay-agent-interface-id {
            presence
              "enable relay-agent-interface-id";
            description
              "DHCPv6 interface-id option processing";
            uses v6-relay-option-interface-id-type;
          }  // container relay-agent-interface-id
    
          container relay-agent-remote-id {
            presence
              "enable relay-agent-remote-id";
            description
              "DHCPv6 remote-id option processing";
            uses v6-relay-option-remote-id-type;
          }  // container relay-agent-remote-id
    
          container server-group {
            description
              "Define a DHCPv6 server group";
            uses v6-server-group-type;
          }  // container server-group
    
          container active-server-group {
            description
              "Name of DHCPv6 server group";
            uses dhcpv6-gbl-active-sg-type;
          }  // container active-server-group
    
          leaf server-response-time {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "0";
            description
              "Number of seconds in a period of activity between the last server response and an unaswered request";
          }
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation in seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              leaf drop {
                type empty;
                description
                  "Drop dhcpv6 advertise and reply packets";
              }
            }  // container violation-action
          }  // container lease-time-validation
    
          leaf no-snoop {
            junos:must "(!("legacy-snooping"))";
            junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement";
            type empty;
            description
              "Do not snoop DHCPV6 packets";
          }
    
          container leasequery {
            junos:must "(".. relay-agent-interface-id")";
            junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id";
            presence "enable leasequery";
            description
              "DHCPv6 leasequery configuration";
            uses relay-leasequery-type;
          }  // container leasequery
    
          container bulk-leasequery {
            junos:must "(".. relay-agent-interface-id")";
            junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id";
            presence "enable bulk-leasequery";
            description
              "DHCPv6 bulk leasequery configuration";
            uses relay-bulk-leasequery-v6-type;
          }  // container bulk-leasequery
    
          container active-leasequery {
            junos:must "(".. bulk-leasequery")";
            junos:must-message "Must configure bulk-leasequery";
            presence "enable active-leasequery";
            description
              "DHCPv6 active leasequery configuration";
            uses relay-active-leasequery-v6-type;
          }  // container active-leasequery
    
          container remote-id-mismatch {
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container duplicate-clients {
            description
              "Allow duplicate clients";
            uses dhcpv6-duplicate-clients-type;
          }  // container duplicate-clients
        }  // grouping dhcpv6-relay-type
    
        grouping dhcp-generic-v6-option {
          description
            "Generic DHCPv6 options processing";
          uses apply-advanced;
    
          leaf option-number {
            type enumeration {
              enum "15" {
                value 0;
                status deprecated;
                description "Option 15";
              }
              enum "16" {
                value 1;
                status deprecated;
                description "Option 16";
              }
            }
            status deprecated;
            description "Option number";
          }
    
          container equals {
            status deprecated;
            description "Generic option equals";
            uses relay-v6-option-ascii-hex;
          }  // container equals
    
          container default-action {
            status deprecated;
            description
              "Generic option default action";
            uses dhcp-v6-option-default-action;
          }  // container default-action
    
          container starts-with {
            status deprecated;
            description
              "Generic option starts with";
            uses relay-v6-option-ascii-hex;
          }  // container starts-with
    
          container option-15 {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-15  with option-number";
            presence "enable option-15";
            description
              "Add option 15 processing";
            uses dhcp-generic-v6-option-type;
          }  // container option-15
    
          container option-16 {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-16  with option-number";
            presence "enable option-16";
            description
              "Add option 16 processing";
            uses dhcp-generic-v6-option-type;
          }  // container option-16
    
          list option-order {
            junos:must "(!("option-number"))";
            junos:must-message "Cannot specify option-order  with option-number";
            key "name";
            ordered-by user;
            description
              "Options precedence order";
            leaf name {
              type enumeration {
                enum "15" {
                  value 0;
                  description "Option 15";
                }
                enum "16" {
                  value 1;
                  description "Option 16";
                }
              }
              description "Option number";
            }
    
            uses apply-advanced;
          }  // list option-order
        }  // grouping dhcp-generic-v6-option
    
        grouping dhcp-generic-v6-option-type {
          uses apply-advanced;
    
          container equals {
            description "Generic option equals";
            uses relay-v6-option-ascii-hex;
          }  // container equals
    
          container default-action {
            description
              "Generic option default action";
            uses dhcp-v6-option-default-action;
          }  // container default-action
    
          container starts-with {
            description
              "Generic option starts with";
            uses relay-v6-option-ascii-hex;
          }  // container starts-with
        }  // grouping dhcp-generic-v6-option-type
    
        grouping dhcp-v6-option-default-action {
          description "Default action";
          uses apply-advanced;
    
          choice server-group-choice {
            leaf relay-server-group {
              junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
              junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]";
              type string {
                length "1 .. 64";
              }
              description
                "Name of DHCP relay server group when match is made";
            }
            leaf drop {
              type empty;
              description
                "Discard when a match is made";
            }
            leaf forward-only {
              type empty;
              description
                "Forward without subscriber services when a match is made";
            }
          }  // choice server-group-choice
        }  // grouping dhcp-v6-option-default-action
    
        grouping dhcpv6-gbl-active-sg-type {
          uses apply-advanced;
    
          leaf active-server-group {
            junos:must "(".. .. server-group $$")";
            junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay dhcpv6 server-group]";
            type string {
              length "1 .. 64";
            }
            description
              "Name of DHCPv6 server group";
          }
        }  // grouping dhcpv6-gbl-active-sg-type
    
        grouping dhcpv6-override-relay-type {
          description
            "DHCPv6 relay override processing";
          uses apply-advanced;
    
          choice allow-snooped-clients-choice {
            leaf allow-snooped-clients {
              type empty;
              description
                "Allow client creation from snooped PDUs";
            }
            leaf no-allow-snooped-clients {
              type empty;
              description
                "Don't allow client creation from snooped PDUs";
            }
          }  // choice allow-snooped-clients-choice
    
          leaf delay-authentication {
            type empty;
            description
              "Delay subscriber authentication in DHCP protocol processing until request packet";
          }
    
          leaf interface-client-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 500000";
              }
            }
            description
              "Limit the number of clients allowed on an interface";
          }
    
          leaf dual-stack {
            type string {
              length "1 .. 64";
            }
            description
              "Dual stack group to use.";
          }
    
          leaf no-bind-on-request {
            type empty;
            description
              "Do not bind if stray DHCPv6 RENEW, REBIND is received";
          }
    
          container client-negotiation-match {
            description
              "Use secondary match criteria for SOLICIT PDU";
            choice match-with {
              leaf incoming-interface {
                type empty;
                description
                  "Use incoming interface";
              }
            }  // choice match-with
          }  // container client-negotiation-match
    
          leaf send-release-on-delete {
            type empty;
            description
              "Always send RELEASE to the server when a binding is deleted";
          }
    
          leaf always-process-option-request-option {
            type empty;
            description
              "Always process option even after address allocation failure";
          }
    
          leaf relay-source {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface for relay source";
          }
    
          leaf delete-binding-on-renegotiation {
            type empty;
            description
              "Delete binding on renegotiation";
          }
    
          leaf asymmetric-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced lease time for the client. In seconds";
          }
    
          leaf asymmetric-prefix-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced prefix lease time for the client. In seconds";
          }
        }  // grouping dhcpv6-override-relay-type
    
        grouping dhcpv6-relay-group {
          description "DHCPv6 groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container active-server-group {
            description
              "Name of DHCPv6 server group";
            uses dhcpv6-gp-active-sg-type;
          }  // container active-server-group
    
          list dual-stack-group {
            key "name";
            description
              "Define a DHCP dual stack group";
            uses dhcp-dual-stack-group;
          }  // list dual-stack-group
    
          container authentication {
            description "DHCPv6 authentication";
            uses dhcpv6-authentication-type;
          }  // container authentication
    
          container liveness-detection {
            description
              "DHCPv6 client liveness detection processing";
            uses dhcpv6-liveness-detection-type;
          }  // container liveness-detection
    
          container dynamic-profile {
            description "Dynamic profile to use";
            uses dynamic-profile-type;
          }  // container dynamic-profile
    
          leaf service-profile {
            type string {
              length "1 .. 128";
            }
            description
              "Dynamic profile to use for default service activation";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Matching access profile must be defined";
            type string {
              length "1 .. 128";
            }
            description
              "Access profile to use for AAA services";
          }
    
          container short-cycle-protection {
            description
              "Short cycle lockout configuration";
            leaf lockout-min-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
    
            leaf lockout-max-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 86400";
                }
              }
              description
                "Short cycle lockout time in seconds";
            }
          }  // container short-cycle-protection
    
          container overrides {
            presence "enable overrides";
            description
              "DHCPv6 override processing";
            uses dhcpv6-override-relay-type;
          }  // container overrides
    
          container relay-option {
            presence "enable relay-option";
            description
              "DHCPv6 option processing";
            uses dhcp-generic-v6-option;
          }  // container relay-option
    
          container vendor-specific-information {
            description
              "DHCPv6 option 17 vendor-specific processing";
            uses jdhcp-vendor-specific-type;
          }  // container vendor-specific-information
    
          container forward-only {
            presence "enable forward-only";
            description
              "Forward DHCPv6 packets without creating binding";
            uses forward-only-to-rc-type;
          }  // container forward-only
    
          container relay-agent-interface-id {
            presence
              "enable relay-agent-interface-id";
            description
              "DHCPv6 interface-id option processing";
            uses v6-relay-option-interface-id-type;
          }  // container relay-agent-interface-id
    
          container relay-agent-remote-id {
            presence
              "enable relay-agent-remote-id";
            description
              "DHCPv6 remote-id option processing";
            uses v6-relay-option-remote-id-type;
          }  // container relay-agent-remote-id
    
          container route-suppression {
            description
              "Suppress access-internal and/or access route addition";
            uses dhcpv6-route-suppression-type;
          }  // container route-suppression
    
          leaf relay-agent-option-79 {
            type empty;
            description
              "Add the client MAC address to the Relay Forward header.";
          }
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              junos:must "((unique "forwarding-options dhcp-relay dhcpv6 group <*> interface $$" && !(any "system services dhcp-local-server dhcpv6 group <*> interface $$")))";
              junos:must-message "Interface used in other relay or server group";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf upto {
              junos:must "(!(".. .. interface $$"))";
              junos:must-message "Range end point must not equal start";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface up to";
            }
    
            leaf exclude {
              type empty;
              description
                "Exclude this interface range";
            }
    
            leaf trace {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify tracing with exclude";
              type empty;
              description
                "Enable tracing for this interface";
            }
    
            container overrides {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              description
                "DHCPv6 override processing";
              uses dhcpv6-override-relay-type;
            }  // container overrides
    
            container dynamic-profile {
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify dynamic-profile with exclude";
              description
                "Dynamic profile to use";
              uses dynamic-profile-type;
            }  // container dynamic-profile
    
            leaf service-profile {
              type string {
                length "1 .. 128";
              }
              description
                "Dynamic profile to use for default service activation";
            }
    
            leaf access-profile {
              junos:must "("access profile $$")";
              junos:must-message "Matching access profile must be defined";
              junos:must "(!(".. exclude"))";
              junos:must-message "Cannot specify overrides with exclude";
              type string {
                length "1 .. 128";
              }
              description
                "Access profile to use for AAA services";
            }
    
            container short-cycle-protection {
              description
                "Short cycle lockout configuration";
              leaf lockout-min-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
    
              leaf lockout-max-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 86400";
                  }
                }
                description
                  "Short cycle lockout time in seconds";
              }
            }  // container short-cycle-protection
          }  // list interface
    
          container lease-time-validation {
            presence
              "enable lease-time-validation";
            description
              "Configure lease time violation validation";
            uses apply-advanced;
    
            leaf lease-time-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 2147483647";
                }
              }
              units "seconds";
              description
                "Threshold for lease time violation in seconds";
            }
    
            container violation-action {
              description
                "Lease time validation violation action";
              leaf drop {
                type empty;
                description
                  "Drop dhcpv6 advertise and reply packets";
              }
            }  // container violation-action
          }  // container lease-time-validation
    
          container remote-id-mismatch {
            presence "enable remote-id-mismatch";
            description
              "DHCP client remote-id mismatch";
            uses dhcp-remote-id-mismatch-type;
          }  // container remote-id-mismatch
    
          container server-match {
            description
              "Server match processing";
            uses apply-advanced;
    
            container default-action {
              description
                "Server match default action";
              uses server-match-action-choice;
            }  // container default-action
    
            container duid {
              description
                "Match duid processing";
              uses apply-advanced;
    
              container equals {
                description "Duid equals";
                uses server-match-v6-ascii-hex;
              }  // container equals
    
              container starts-with {
                description "Duid starts with";
                uses server-match-v6-ascii-hex;
              }  // container starts-with
            }  // container duid
    
            list address {
              key "name";
              ordered-by user;
              description "Server ipv6 address";
              leaf name {
                type jt:ipv6prefix;
                description
                  "Server ipv6 address for matching";
              }
    
              uses apply-advanced;
    
              choice server-match-action-choice {
                leaf forward-only {
                  type empty;
                  description
                    "Forward without subscriber services when a match is made";
                }
                leaf create-relay-entry {
                  type empty;
                  description
                    "Create relay entry and allow subscriber services";
                }
              }  // choice server-match-action-choice
            }  // list address
          }  // container server-match
        }  // grouping dhcpv6-relay-group
    
        grouping dhcpv6-gp-active-sg-type {
          uses apply-advanced;
    
          leaf active-server-group {
            junos:must "(".. .. .. server-group $$")";
            junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay dhcpv6 server-group]";
            type string {
              length "1 .. 64";
            }
            description
              "Name of DHCPv6 server group";
          }
        }  // grouping dhcpv6-gp-active-sg-type
    
        grouping forward-only-to-rc-type {
          description
            "Forward DHCP packets without creating binding";
          uses apply-advanced;
    
          leaf logical-system {
            type string;
            default "current";
          }
    
          leaf routing-instance {
            type string;
            default "current";
          }
        }  // grouping forward-only-to-rc-type
    
        grouping jdhcp-security-type {
          description
            "DHCP access security configuration";
          uses apply-advanced;
    
          leaf no-dhcp-snooping {
            junos:must "(!("switch-options no-arp-trap "))";
            junos:must-message "Cannot enable ARP inspection with no-arp-trap";
            type empty;
            description "Disable dhcp snooping";
          }
    
          leaf arp-inspection {
            type empty;
            description
              "Enable dynamic ARP inspection";
          }
    
          leaf ip-source-guard {
            type empty;
            description "Enable IP source guard";
          }
    
          leaf no-dhcpv6-snooping {
            type empty;
            description
              "Disable DHCPv6 snooping";
          }
    
          leaf neighbor-discovery-inspection {
            type empty;
            description
              "Enable neighbor discovery inspection";
          }
    
          leaf ipv6-source-guard {
            type empty;
            description
              "Enable IPv6 source guard";
          }
    
          leaf light-weight-dhcpv6-relay {
            type empty;
            description
              "Enable light weight dhcpv6 relay";
          }
    
          list group {
            key "name";
            ordered-by user;
            description
              "Define a DHCP security group for overriding defaults";
            uses ds-group;
          }  // list group
    
          container option-82 {
            presence "enable option-82";
            description
              "DHCP option-82 processing for snooped packets";
            uses security-option-82-type;
          }  // container option-82
    
          container dhcpv6-options {
            presence "enable dhcpv6-options";
            description
              "DHCPv6 option processing for snooped packets";
            uses security-dhcpv6-options-type;
          }  // container dhcpv6-options
        }  // grouping jdhcp-security-type
    
        grouping ds-group {
          description "DHCP security groups";
          leaf name {
            type string {
              junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
              junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              length "1 .. 64";
            }
            description "Group name";
          }
    
          uses apply-advanced;
    
          container overrides {
            presence "enable overrides";
            description
              "DHCP override processing";
            uses ds-override-type;
          }  // container overrides
    
          list interface {
            key "name";
            description "One or more interfaces";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            list static-ip {
              key "name";
              ordered-by user;
              description
                "Static IP address configuration";
              uses ip-mac-static;
            }  // list static-ip
    
            list static-ipv6 {
              key "name";
              ordered-by user;
              description
                "Static IPv6 address configuration";
              uses ipv6-mac-static;
            }  // list static-ipv6
          }  // list interface
        }  // grouping ds-group
    
        grouping ds-override-type {
          description
            "Dynamic ARP Inspection override processing";
          uses apply-advanced;
    
          leaf trusted {
            junos:must "(!(".. untrusted"))";
            junos:must-message "Trusted and untrusted cannot be configured together";
            type empty;
            description
              "Make this trusted group of interfaces";
          }
    
          leaf untrusted {
            junos:must "(!(".. trusted"))";
            junos:must-message "Trusted and untrusted cannot be configured together";
            type empty;
            description
              "Make this untrusted group of interfaces";
          }
    
          leaf no-option82 {
            type empty;
            description
              "Make this group of interfaces not to add option82";
          }
    
          leaf no-option37 {
            type empty;
            description
              "Make this group of interfaces not to add option37";
          }
    
          leaf no-option18 {
            type empty;
            description
              "Make this group of interfaces not to add option18";
          }
    
          leaf no-option16 {
            type empty;
            description
              "Make this group of interfaces not to add option16";
          }
    
          leaf no-option79 {
            type empty;
            description
              "Make this group of interfaces not to add option79";
          }
    
          leaf no-dhcpv6-options {
            type empty;
            description
              "Make this group of interfaces not to add any DHCPv6 options";
          }
        }  // grouping ds-override-type
    
        grouping ip-mac-static {
          leaf name {
            type jt:ipaddr;
            description "IP address";
          }
    
          leaf mac {
            type jt:mac-addr;
            description "MAC address";
          }
        }  // grouping ip-mac-static
    
        grouping ipv6-mac-static {
          leaf name {
            type jt:ipv6addr;
            description "IP address";
          }
    
          leaf mac {
            type jt:mac-addr;
            description "MAC address";
          }
        }  // grouping ipv6-mac-static
    
        grouping jdhcp-vendor-specific-type {
          description
            "Add vendor-specific option processing";
          uses apply-advanced;
    
          leaf host-name {
            type empty;
            description "Add router host name";
          }
    
          leaf location {
            type empty;
            description
              "Add location information expressed as interface name format";
          }
        }  // grouping jdhcp-vendor-specific-type
    
        grouping juniper-forwarding-options {
          uses apply-advanced;
    
          list storm-control-profiles {
            key "name";
            description
              "Storm control profile for this instance";
            leaf name {
              junos:must "("forwarding-options storm-control-profiles $$ all")";
              junos:must-message "Only aggregate profiles supported";
              type string {
                length "1 .. 127";
              }
              description
                "Storm control profile name";
            }
    
            uses apply-advanced;
    
            container all {
              presence "enable all";
              description "For all BUM traffic";
              uses apply-advanced;
    
              choice bandwidth {
                leaf bandwidth-percentage {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of link bandwidth";
                }
                leaf bandwidth-level {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  units "kbps";
                  description "Link bandwidth";
                }
              }  // choice bandwidth
    
              leaf burst-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                units "bytes";
                description "Burst size";
              }
    
              leaf no-broadcast {
                type empty;
                description
                  "Disable broadcast storm control";
              }
    
              leaf no-unknown-unicast {
                type empty;
                description
                  "Disable unknown unicast storm control";
              }
    
              choice no-multicast-choices {
                leaf no-multicast {
                  type empty;
                  description
                    "Disable multicast storm control";
                }
                leaf no-registered-multicast {
                  type empty;
                  description
                    "Disable registered multicast storm control";
                }
                leaf no-unregistered-multicast {
                  type empty;
                  description
                    "Disable unregistered multicast storm control";
                }
              }  // choice no-multicast-choices
            }  // container all
    
            leaf action-shutdown {
              type empty;
              description
                "Disable port for excessive storm control errors";
            }
          }  // list storm-control-profiles
    
          choice sampling-or-packet-capture {
            container sampling {
              description
                "Statistical traffic sampling options";
              uses juniper-sampling-options;
            }  // container sampling
            container packet-capture {
              description
                "Packet capture options";
              uses juniper-packet-capture-options;
            }  // container packet-capture
          }  // choice sampling-or-packet-capture
    
          list accounting {
            key "name";
            description
              "Configure accounting of traffic";
            uses juniper-packet-accounting-options;
          }  // list accounting
    
          container port-mirroring {
            description
              "Configure port mirroring of traffic";
            uses juniper-port-mirror-options;
          }  // container port-mirroring
    
          container evpn-vxlan {
            description
              "EVPN VXLAN configurations";
            uses apply-advanced;
    
            leaf shared-tunnels {
              type empty;
              description
                "Create VTEP tunnels to EVPN PE";
            }
    
            container reroute-address {
              description
                "Reroute IP address for vxlan encapsulation";
              choice family {
                container inet {
                  presence "enable inet";
                  description
                    "IPv4 address family";
                  uses apply-advanced;
    
                  leaf address {
                    type jt:ipv4addr;
                    description
                      "Reroute address for IPV4 FRR";
                  }
                }  // container inet
                container inet6 {
                  presence "enable inet6";
                  description
                    "IPv6 address family";
                  uses apply-advanced;
    
                  leaf address {
                    type jt:ipv6addr;
                    description
                      "Reroute address for IPV6 FRR";
                  }
                }  // container inet6
              }  // choice family
            }  // container reroute-address
          }  // container evpn-vxlan
    
          container multicast-replication {
            description
              "Set mode of multicast replication";
            uses apply-advanced;
    
            container evpn {
              description
                "EVPN IRB multicast related options";
              uses apply-advanced;
    
              leaf irb {
                type enumeration {
                  enum "local-only" {
                    value 0;
                    description
                      "Multicast forward in local-only mode";
                  }
                  enum "local-remote" {
                    value 1;
                    description
                      "Multicast forward in local-remote mode";
                  }
                  enum "oism" {
                    value 2;
                    description
                      "Optimized inter subnet multicast mode";
                  }
                }
              }
    
              leaf smet-nexthop-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10000 .. 40000";
                  }
                }
                description
                  "Flood traffic to all egress when count goes above limit";
              }
            }  // container evpn
          }  // container multicast-replication
    
          container load-balance {
            description
              "Configure load-balancing attributes on the forwarding path";
            uses apply-advanced;
    
            container indexed-load-balance {
              presence
                "enable indexed-load-balance";
              description
                "Use indexed permuted next hop lists for unilist and aggregate next hops";
              uses apply-advanced;
            }  // container indexed-load-balance
    
            container per-flow {
              uses apply-advanced;
            }  // container per-flow
    
            container per-prefix {
              presence "enable per-prefix";
              uses apply-advanced;
    
              leaf hash-seed {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "0 .. 65534";
                  }
                }
                default "0";
                description
                  "Specifies per-router input value for per-prefix load-balancing hash function";
              }
            }  // container per-prefix
          }  // container load-balance
    
          container hash-key {
            description
              "Select data used in the hash key";
            uses junos_hash_key;
          }  // container hash-key
    
          container enhanced-hash-key {
            description
              "Select data used in the hash key for Enhanced IP Forwarding Engines";
            uses apply-advanced;
    
            container lag-dlb {
              presence "enable lag-dlb";
              description
                "Setting dynamic load balancing options for LAG";
              uses apply-advanced;
    
              container ether-type {
                presence "enable ether-type";
                description
                  "Setting ether type for LAG DLB";
                uses apply-advanced;
    
                leaf ipv4 {
                  type empty;
                  description
                    "Ether type is ipv4";
                }
    
                leaf ipv6 {
                  type empty;
                  description
                    "Ether type is ipv6";
                }
    
                leaf mpls {
                  type empty;
                  description
                    "Ether type is mpls";
                }
              }  // container ether-type
            }  // container lag-dlb
    
            container ecmp-dlb {
              junos:must "(!(".. ecmp-resilient-hash"))";
              junos:must-message "RH and DLB cannot be configured together";
              description
                "Set load balancing options for VC-Fabric forwarding";
              uses apply-advanced;
    
              choice mode {
                leaf assigned-flow {
                  type empty;
                  description
                    "Flow-based fixed link assignment";
                }
                container flowlet {
                  presence "enable flowlet";
                  description
                    "Inactivity-based flowlet link assignment (default)";
                  uses apply-advanced;
    
                  leaf inactivity-interval {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32;
                    }
                    default "256";
                    description
                      "Minimum inactivity interval in micro-seconds for flowlet detection";
                  }
                }  // container flowlet
                leaf per-packet {
                  type empty;
                  description
                    "Per-packet optimal spraying";
                }
              }  // choice mode
    
              container ether-type {
                presence "enable ether-type";
                description "Ether type";
                uses apply-advanced;
    
                leaf ipv4 {
                  type empty;
                  description "Set DLB for ipv4";
                }
    
                leaf ipv6 {
                  type empty;
                  description "Set DLB for ipv6";
                }
    
                leaf mpls {
                  type empty;
                  description "Set DLB for mpls";
                }
              }  // container ether-type
            }  // container ecmp-dlb
    
            container hash-seed {
              presence "enable hash-seed";
              description "Hash seed";
              uses apply-advanced;
            }  // container hash-seed
    
            container mpls {
              description
                "Configure mpls fields";
              uses apply-advanced;
    
              leaf no-incoming-port {
                type empty;
                description
                  "Exclude incoming port from the hash key";
              }
    
              leaf no-incoming-device {
                type empty;
                description
                  "Exclude incoming device from the hash key";
              }
            }  // container mpls
    
            container layer2 {
              description
                "Configure layer2 fields";
              uses apply-advanced;
    
              leaf no-incoming-port {
                type empty;
                description
                  "Exclude incoming port from the hash key";
              }
    
              leaf no-incoming-device {
                type empty;
                description
                  "Exclude incoming device from the hash key";
              }
    
              leaf no-source-mac-address {
                type empty;
                description
                  "Exclude source MAC address from the hash key";
              }
    
              leaf no-destination-mac-address {
                type empty;
                description
                  "Exclude destination MAC address from the hash key";
              }
    
              leaf no-ether-type {
                type empty;
                description
                  "Exclude ether type from the hash key";
              }
    
              leaf vlan-id {
                type empty;
                description
                  "Include incoming vlan-id in hash key";
              }
            }  // container layer2
    
            container inet {
              description
                "Configure inet4 fields";
              uses apply-advanced;
    
              leaf no-incoming-port {
                type empty;
                description
                  "Exclude incoming port from the hash key";
              }
    
              leaf no-incoming-device {
                type empty;
                description
                  "Exclude incoming device from the hash key";
              }
    
              leaf no-l4-source-port {
                type empty;
                description
                  "Exclude l4 source port from the hash key";
              }
    
              leaf no-l4-destination-port {
                type empty;
                description
                  "Exclude l4 dest port from the hash key";
              }
    
              leaf no-protocol {
                type empty;
                description
                  "Exclude protocol from the hash key";
              }
    
              leaf no-ipv4-source-address {
                type empty;
                description
                  "Exclude IPv4 source address";
              }
    
              leaf no-ipv4-destination-address {
                type empty;
                description
                  "Exclude IPv4 destination address";
              }
    
              leaf vlan-id {
                type empty;
                description
                  "Include incoming vlan-id in hash key";
              }
            }  // container inet
    
            container inet6 {
              description
                "Configure inet6 fields";
              uses apply-advanced;
    
              leaf no-incoming-port {
                type empty;
                description
                  "Exclude incoming port from the hash key";
              }
    
              leaf no-incoming-device {
                type empty;
                description
                  "Exclude incoming device from the hash key";
              }
    
              leaf no-l4-source-port {
                type empty;
                description
                  "Exclude l4 source port from the hash key";
              }
    
              leaf no-l4-destination-port {
                type empty;
                description
                  "Exclude l4 dest port from the hash key";
              }
    
              leaf no-next-header {
                type empty;
                description
                  "Exclude next header from the hash key";
              }
    
              leaf no-ipv6-source-address {
                type empty;
                description
                  "Exclude IPv6 source address";
              }
    
              leaf no-ipv6-destination-address {
                type empty;
                description
                  "Exclude IPv6 destination address";
              }
    
              leaf vlan-id {
                type empty;
                description
                  "Include vlan-id in hash key";
              }
            }  // container inet6
    
            leaf no-mpls {
              type empty;
              description
                "Disable mpls in hash key";
            }
    
            container gre {
              description "Configure for GRE ";
              uses apply-advanced;
    
              leaf key {
                type empty;
                description
                  "Include key in hash key";
              }
    
              leaf protocol {
                type empty;
                description
                  "Include protocol in hash key";
              }
            }  // container gre
    
            container services-loadbalancing {
              description
                "Select key to load balance across service PICs";
              uses apply-advanced;
    
              container family {
                description "Protocol family";
                container inet {
                  description
                    "IPv4 protocol family";
                  uses apply-advanced;
    
                  container layer-3-services {
                    description
                      "Include Layer 3 (IP) data in the hash key";
                    uses apply-advanced;
    
                    leaf source-address {
                      type empty;
                      description
                        "Include IP source address in the hash key";
                    }
    
                    leaf destination-address {
                      type empty;
                      description
                        "Include IP destination address in the hash key";
                    }
    
                    leaf incoming-interface-index {
                      type empty;
                      description
                        "Include incoming interface index in the hash key";
                    }
                  }  // container layer-3-services
                }  // container inet
    
                container inet6 {
                  description
                    "IPv6 protocol family";
                  uses apply-advanced;
    
                  container layer-3-services {
                    description
                      "Include Layer 3 (IP) data in the hash key";
                    uses apply-advanced;
    
                    leaf source-address {
                      type empty;
                      description
                        "Include IP source address in the hash key";
                    }
    
                    leaf destination-address {
                      type empty;
                      description
                        "Include IP destination address in the hash key";
                    }
    
                    leaf incoming-interface-index {
                      type empty;
                      description
                        "Include incoming interface index in the hash key";
                    }
    
                    leaf src-prefix-len {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "56 .. 127";
                        }
                      }
                      units "bits";
                      default "127";
                      description
                        "Enhanced hash key inet6 source prefix length";
                    }
                  }  // container layer-3-services
                }  // container inet6
              }  // container family
            }  // container services-loadbalancing
    
            container family {
              description "Protocol family";
              container inet {
                description
                  "IPv4 protocol family";
                uses apply-advanced;
    
                leaf incoming-interface-index {
                  type empty;
                  description
                    "Include incoming interface index in the hash key";
                }
    
                leaf no-destination-port {
                  type empty;
                  description
                    "Omit IP destination port in the hash key";
                }
    
                leaf no-source-port {
                  type empty;
                  description
                    "Omit IP source port in the hash key";
                }
    
                leaf type-of-service {
                  type empty;
                  description
                    "Include TOS byte in the hash key";
                }
    
                leaf gtp-tunnel-endpoint-identifier {
                  type empty;
                  description
                    "Include TEID in the hash key for GTP-U packets";
                }
    
                leaf l2tp-tunnel-session-identifier {
                  type empty;
                  description
                    "Include TID SID in the hash key for L2TP packets";
                }
    
                leaf session-id {
                  type empty;
                  description
                    "Include session ID in the enhanced hash key";
                }
              }  // container inet
    
              container inet6 {
                description
                  "IPv6 protocol family";
                uses apply-advanced;
    
                leaf incoming-interface-index {
                  type empty;
                  description
                    "Include incoming interface index in the hash key";
                }
    
                leaf traffic-class {
                  type empty;
                  description
                    "Include Traffic Class byte in the hash key";
                }
    
                leaf no-destination-port {
                  type empty;
                  description
                    "Omit IP destination port in the hash key";
                }
    
                leaf no-source-port {
                  type empty;
                  description
                    "Omit IP source port in the hash key";
                }
    
                leaf gtp-tunnel-endpoint-identifier {
                  type empty;
                  description
                    "Include TEID in the hash key for GTP-U packets";
                }
    
                leaf session-id {
                  type empty;
                  description
                    "Include session ID in the enhanced hash key";
                }
    
                leaf no-flow-label {
                  type empty;
                  description
                    "Omit Flow label in the hash key";
                }
    
                leaf type-of-service {
                  type empty;
                  description
                    "Include TOS byte in the hash key";
                }
              }  // container inet6
    
              container mpls {
                description
                  "MPLS protocol family";
                uses apply-advanced;
    
                leaf label-1-exp {
                  type empty;
                  description
                    "Include EXP of first MPLS label from the hash key";
                }
    
                leaf incoming-interface-index {
                  type empty;
                  description
                    "Include incoming interface index in the hash key";
                }
    
                choice pseudowire_option {
                  leaf no-ether-pseudowire {
                    type empty;
                    description
                      "Omit IP payload over ethernet PW from the hash-key";
                  }
                  container ether-pseudowire {
                    description
                      "Load-balance IP over ethernet PW";
                    leaf zero-control-word {
                      type empty;
                      description
                        "Parse zero control word in packet header";
                    }
                  }  // container ether-pseudowire
                }  // choice pseudowire_option
    
                leaf no-payload {
                  type empty;
                  description
                    "Omit MPLS payload data from the hash key";
                }
              }  // container mpls
    
              container multiservice {
                description
                  "Multiservice protocol (bridged/CCC/VPLS) family";
                uses apply-advanced;
    
                leaf incoming-interface-index {
                  type empty;
                  description
                    "Include incoming interface index in hash key";
                }
    
                leaf outer-priority {
                  type empty;
                  description
                    "Include Outer 802.1 Priority bits in the hash key";
                }
    
                leaf no-payload {
                  type empty;
                  description
                    "Omit payload data from the hash key";
                }
    
                leaf no-mac-addresses {
                  type empty;
                  description
                    "Omit source and destination MAC addresses from the hash key";
                }
              }  // container multiservice
            }  // container family
    
            container vxlan {
              description "Vxlan traffic";
              uses apply-advanced;
    
              leaf no-inner-payload {
                type empty;
                description
                  "To enable load-balancing on Vxlan traffic based on outer IP/UDP header";
              }
            }  // container vxlan
    
            list conditional-match {
              key "name";
              ordered-by user;
              description
                "Configures a conditional match";
              leaf name {
                type string;
                description "Name identifier";
              }
    
              uses apply-advanced;
    
              container offset1 {
                presence "enable offset1";
                description "Configure offset 1";
                uses apply-advanced;
    
                leaf base-offset1 {
                  type enumeration {
                    enum "start-of-L2Header" {
                      value 0;
                      description
                        "Offset will be extracted from start of L2 header";
                    }
                    enum
                      "start-of-L3-OuterHeader" {
                      value 1;
                      description
                        "Offset will be extracted from start of outer L3 header";
                    }
                    enum
                      "start-of-L3-InnerHeader" {
                      value 2;
                      description
                        "Offset will be extracted from start of inner L3 header";
                    }
                    enum "start-of-L4-Header" {
                      value 3;
                      description
                        "Offset will be extracted from start of L4 header";
                    }
                  }
                  description
                    "Configure base-offset";
                }
    
                leaf offset1-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "0 .. 126";
                    }
                  }
                  description
                    "Offset of the data to be extracted from the base offset. Only even number";
                }
    
                leaf matchdata1 {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description
                    "Data to be matched";
                }
    
                leaf matchdata1-mask {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description "Matchdata mask";
                }
              }  // container offset1
    
              container offset2 {
                presence "enable offset2";
                description "Configure offset 2";
                uses apply-advanced;
    
                leaf base-offset2 {
                  type enumeration {
                    enum "start-of-L2Header" {
                      value 0;
                      description
                        "Offset will be extracted from start of L2 header";
                    }
                    enum
                      "start-of-L3-OuterHeader" {
                      value 1;
                      description
                        "Offset will be extracted from start of outer L3 header";
                    }
                    enum
                      "start-of-L3-InnerHeader" {
                      value 2;
                      description
                        "Offset will be extracted from start of inner L3 header";
                    }
                    enum "start-of-L4-Header" {
                      value 3;
                      description
                        "Offset will be extracted from start of L4 header";
                    }
                  }
                  description
                    "Configure base-offset";
                }
    
                leaf offset2-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "0 .. 126";
                    }
                  }
                  description
                    "Offset of the data to be extracted from the base offset. Only even number";
                }
    
                leaf matchdata2 {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description
                    "Data to be matched";
                }
    
                leaf matchdata2-mask {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description "Matchdata mask";
                }
              }  // container offset2
    
              container offset3 {
                presence "enable offset3";
                description "Configure offset 3";
                uses apply-advanced;
    
                leaf base-offset3 {
                  type enumeration {
                    enum "start-of-L2Header" {
                      value 0;
                      description
                        "Offset will be extracted from start of L2 header";
                    }
                    enum
                      "start-of-L3-OuterHeader" {
                      value 1;
                      description
                        "Offset will be extracted from start of outer L3 header";
                    }
                    enum
                      "start-of-L3-InnerHeader" {
                      value 2;
                      description
                        "Offset will be extracted from start of inner L3 header";
                    }
                    enum "start-of-L4-Header" {
                      value 3;
                      description
                        "Offset will be extracted from start of L4 header";
                    }
                  }
                  description
                    "Configure base-offset";
                }
    
                leaf offset3-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "0 .. 126";
                    }
                  }
                  description
                    "Offset of the data to be extracted from the base offset. Only even number";
                }
    
                leaf matchdata3 {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description
                    "Data to be matched";
                }
    
                leaf matchdata3-mask {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description "Matchdata mask";
                }
              }  // container offset3
    
              container offset4 {
                presence "enable offset4";
                description "Configure offset 4";
                uses apply-advanced;
    
                leaf base-offset4 {
                  type enumeration {
                    enum "start-of-L2Header" {
                      value 0;
                      description
                        "Offset will be extracted from start of L2 header";
                    }
                    enum
                      "start-of-L3-OuterHeader" {
                      value 1;
                      description
                        "Offset will be extracted from start of outer L3 header";
                    }
                    enum
                      "start-of-L3-InnerHeader" {
                      value 2;
                      description
                        "Offset will be extracted from start of inner L3 header";
                    }
                    enum "start-of-L4-Header" {
                      value 3;
                      description
                        "Offset will be extracted from start of L4 header";
                    }
                  }
                  description
                    "Configure base-offset";
                }
    
                leaf offset4-value {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "0 .. 126";
                    }
                  }
                  description
                    "Offset of the data to be extracted from the base offset. Only even number";
                }
    
                leaf matchdata4 {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description
                    "Data to be matched";
                }
    
                leaf matchdata4-mask {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "4";
                  }
                  description "Matchdata mask";
                }
              }  // container offset4
            }  // list conditional-match
    
            list flex-hashing {
              key "name";
              ordered-by user;
              description "Set flex hashing";
              leaf name {
                type string;
                description "Name identifier";
              }
    
              uses apply-advanced;
    
              container ethtype {
                presence "enable ethtype";
                description
                  "Configure ether-type of packet";
                uses apply-advanced;
    
                container inet {
                  description
                    "Enable flex-hashing on ipv4";
                  uses apply-advanced;
    
                  leaf interface {
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Incoming interface name. This is optional parameter";
                  }
    
                  leaf conditional-match {
                    type string;
                    description
                      "Conditional match to be matched in the packet";
                  }
    
                  container hash-offset {
                    description
                      "Configure the offsets for hashing";
                    uses apply-advanced;
    
                    container offset1 {
                      presence "enable offset1";
                      description
                        "Configure offset 1 value";
                      uses apply-advanced;
    
                      leaf base-offset1 {
                        type enumeration {
                          enum
                            "start-of-L2Header" {
                            value 0;
                            description
                              "Offset will be extracted from start of L2 header";
                          }
                          enum
                            "start-of-L3-OuterHeader" {
                            value 1;
                            description
                              "Offset will be extracted from start of outer L3 header";
                          }
                          enum
                            "start-of-L3-InnerHeader" {
                            value 2;
                            description
                              "Offset will be extracted from start of inner L3 header";
                          }
                          enum
                            "start-of-L4-Header" {
                            value 3;
                            description
                              "Offset will be extracted from start of L4 header";
                          }
                        }
                        description
                          "Configure base-offset";
                      }
    
                      leaf offset1-value {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint8 {
                            range "0 .. 126";
                          }
                        }
                        description
                          "Offset of the data to be extracted from the base offset. Only even number";
                      }
    
                      leaf offset1-mask {
                        type string {
                          junos:posix-pattern "^[[:xdigit:]]+$";
                          junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                          length "4";
                        }
                        description
                          "Mask for the hash data extracted. 2 byte mask";
                      }
    
                      container offset2 {
                        presence
                          "enable offset2";
                        description
                          "Configure offset 2 value";
                        uses apply-advanced;
    
                        leaf base-offset2 {
                          type enumeration {
                            enum
                              "start-of-L2Header" {
                              value 0;
                              description
                                "Offset will be extracted from start of L2 header";
                            }
                            enum
                              "start-of-L3-OuterHeader" {
                              value 1;
                              description
                                "Offset will be extracted from start of outer L3 header";
                            }
                            enum
                              "start-of-L3-InnerHeader" {
                              value 2;
                              description
                                "Offset will be extracted from start of inner L3 header";
                            }
                            enum
                              "start-of-L4-Header" {
                              value 3;
                              description
                                "Offset will be extracted from start of L4 header";
                            }
                          }
                          description
                            "Configure base-offset";
                        }
    
                        leaf offset2-value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint8 {
                              range "0 .. 126";
                            }
                          }
                          description
                            "Offset of the data to be extracted from the base offset. Only even number";
                        }
    
                        leaf offset2-mask {
                          type string {
                            junos:posix-pattern "^[[:xdigit:]]+$";
                            junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                            length "4";
                          }
                          description
                            "Mask for the hash data extracted. 2 byte mask";
                        }
                      }  // container offset2
                    }  // container offset1
                  }  // container hash-offset
                }  // container inet
    
                container inet6 {
                  description
                    "Enable flex-hashing on ipv6";
                  uses apply-advanced;
    
                  leaf interface {
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Incoming interface name. This is optional parameter";
                  }
    
                  leaf conditional-match {
                    type string;
                    description
                      "Conditional match to be matched in the packet";
                  }
    
                  container hash-offset {
                    description
                      "Configure the offsets for hashing";
                    uses apply-advanced;
    
                    container offset1 {
                      presence "enable offset1";
                      description
                        "Configure offset 1 value";
                      uses apply-advanced;
    
                      leaf base-offset1 {
                        type enumeration {
                          enum
                            "start-of-L2Header" {
                            value 0;
                            description
                              "Offset will be extracted from start of L2 header";
                          }
                          enum
                            "start-of-L3-OuterHeader" {
                            value 1;
                            description
                              "Offset will be extracted from start of outer L3 header";
                          }
                          enum
                            "start-of-L3-InnerHeader" {
                            value 2;
                            description
                              "Offset will be extracted from start of inner L3 header";
                          }
                          enum
                            "start-of-L4-Header" {
                            value 3;
                            description
                              "Offset will be extracted from start of L4 header";
                          }
                        }
                        description
                          "Configure base-offset";
                      }
    
                      leaf offset1-value {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint8 {
                            range "0 .. 126";
                          }
                        }
                        description
                          "Offset of the data to be extracted from the base offset. Only even number";
                      }
    
                      leaf offset1-mask {
                        type string {
                          junos:posix-pattern "^[[:xdigit:]]+$";
                          junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                          length "4";
                        }
                        description
                          "Mask for the hash data extracted. 2 byte mask";
                      }
    
                      container offset2 {
                        presence
                          "enable offset2";
                        description
                          "Configure offset 2 value";
                        uses apply-advanced;
    
                        leaf base-offset2 {
                          type enumeration {
                            enum
                              "start-of-L2Header" {
                              value 0;
                              description
                                "Offset will be extracted from start of L2 header";
                            }
                            enum
                              "start-of-L3-OuterHeader" {
                              value 1;
                              description
                                "Offset will be extracted from start of outer L3 header";
                            }
                            enum
                              "start-of-L3-InnerHeader" {
                              value 2;
                              description
                                "Offset will be extracted from start of inner L3 header";
                            }
                            enum
                              "start-of-L4-Header" {
                              value 3;
                              description
                                "Offset will be extracted from start of L4 header";
                            }
                          }
                          description
                            "Configure base-offset";
                        }
    
                        leaf offset2-value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint8 {
                              range "0 .. 126";
                            }
                          }
                          description
                            "Offset of the data to be extracted from the base offset. Only even number";
                        }
    
                        leaf offset2-mask {
                          type string {
                            junos:posix-pattern "^[[:xdigit:]]+$";
                            junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                            length "4";
                          }
                          description
                            "Mask for the hash data extracted. 2 byte mask";
                        }
                      }  // container offset2
                    }  // container offset1
                  }  // container hash-offset
                }  // container inet6
    
                container mpls {
                  description
                    "Configure number of MPLS labels";
                  uses apply-advanced;
    
                  leaf num-labels {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 5";
                      }
                    }
                    description
                      "Configure number of MPLS labels";
                  }
    
                  leaf interface {
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Incoming interface name. This is optional parameter";
                  }
    
                  leaf conditional-match {
                    type string;
                    description
                      "Conditional match to be matched in the packet";
                  }
    
                  container hash-offset {
                    description
                      "Configure the offsets for hashing";
                    uses apply-advanced;
    
                    container offset1 {
                      presence "enable offset1";
                      description
                        "Configure offset 1 value";
                      uses apply-advanced;
    
                      leaf base-offset1 {
                        type enumeration {
                          enum
                            "start-of-L2Header" {
                            value 0;
                            description
                              "Offset will be extracted from start of L2 header";
                          }
                          enum
                            "start-of-L3-OuterHeader" {
                            value 1;
                            description
                              "Offset will be extracted from start of outer L3 header";
                          }
                          enum
                            "start-of-L3-InnerHeader" {
                            value 2;
                            description
                              "Offset will be extracted from start of inner L3 header";
                          }
                          enum
                            "start-of-L4-Header" {
                            value 3;
                            description
                              "Offset will be extracted from start of L4 header";
                          }
                        }
                        description
                          "Configure base-offset";
                      }
    
                      leaf offset1-value {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint8 {
                            range "0 .. 126";
                          }
                        }
                        description
                          "Offset of the data to be extracted from the base offset. Only even number";
                      }
    
                      leaf offset1-mask {
                        type string {
                          junos:posix-pattern "^[[:xdigit:]]+$";
                          junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                          length "4";
                        }
                        description
                          "Mask for the hash data extracted. 2 byte mask";
                      }
    
                      container offset2 {
                        presence
                          "enable offset2";
                        description
                          "Configure offset 2 value";
                        uses apply-advanced;
    
                        leaf base-offset2 {
                          type enumeration {
                            enum
                              "start-of-L2Header" {
                              value 0;
                              description
                                "Offset will be extracted from start of L2 header";
                            }
                            enum
                              "start-of-L3-OuterHeader" {
                              value 1;
                              description
                                "Offset will be extracted from start of outer L3 header";
                            }
                            enum
                              "start-of-L3-InnerHeader" {
                              value 2;
                              description
                                "Offset will be extracted from start of inner L3 header";
                            }
                            enum
                              "start-of-L4-Header" {
                              value 3;
                              description
                                "Offset will be extracted from start of L4 header";
                            }
                          }
                          description
                            "Configure base-offset";
                        }
    
                        leaf offset2-value {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint8 {
                              range "0 .. 126";
                            }
                          }
                          description
                            "Offset of the data to be extracted from the base offset. Only even number";
                        }
    
                        leaf offset2-mask {
                          type string {
                            junos:posix-pattern "^[[:xdigit:]]+$";
                            junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                            length "4";
                          }
                          description
                            "Mask for the hash data extracted. 2 byte mask";
                        }
                      }  // container offset2
                    }  // container offset1
                  }  // container hash-offset
                }  // container mpls
              }  // container ethtype
            }  // list flex-hashing
          }  // container enhanced-hash-key
    
          container next-hop {
            description "Next hop throttle";
            uses apply-advanced;
    
            leaf arp-throttle {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "10 .. 100";
                }
              }
              description
                "Change the arp throttling time(seconds)";
            }
    
            leaf arp-detect {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 100000";
                }
              }
              description
                "Change the arp throttling detect time(milliseconds)";
            }
          }  // container next-hop
    
          container sflow {
            description "Sflow related";
            uses apply-advanced;
    
            container egress-multicast {
              description
                "Sflow for egress multicast";
              uses apply-advanced;
    
              leaf max-replication-rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 2000";
                  }
                }
                description
                  "To configure max replication rate (0 to 2K pps)";
              }
            }  // container egress-multicast
          }  // container sflow
    
          container multicast {
            description
              "Multicast resolve and mismatch rate";
            uses apply-advanced;
    
            leaf resolve-rate {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "100 .. 1000";
                }
              }
              units "per second";
              description
                "Multicast resolve rate";
            }
    
            leaf mismatch-rate {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "50 .. 1000";
                }
              }
              units "per second";
              description
                "Multicast interface mismatch rate";
            }
          }  // container multicast
    
          container packet-capture-telemetry {
            description
              "Packet capture telemetry options";
            uses apply-advanced;
    
            container egress {
              description "Egress options";
              uses packet-capture-egress-intf-type;
            }  // container egress
          }  // container packet-capture-telemetry
    
          container explicit-null-cos {
            presence "enable explicit-null-cos";
            description
              "Configure to use MPLS explicit null exp for COS classification";
            uses apply-advanced;
    
            leaf inet {
              type empty;
              description "Include family inet";
            }
    
            leaf inet6 {
              type empty;
              description "Include family inet6";
            }
          }  // container explicit-null-cos
    
          container helpers {
            description
              "Port forwarding configuration";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for helper";
              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 UDP forwarding helper process on which to enable debugging output";
                leaf name {
                  type enumeration {
                    enum "trace" {
                      value 0;
                      description
                        "Trace tracing code";
                    }
                    enum "address" {
                      value 1;
                      description
                        "Trace address management code";
                    }
                    enum "main" {
                      value 2;
                      description
                        "Trace main loop code";
                    }
                    enum "config" {
                      value 3;
                      description
                        "Trace configuration code";
                    }
                    enum "ifdb" {
                      value 4;
                      description
                        "Trace interface database code";
                    }
                    enum "io" {
                      value 5;
                      description
                        "Trace I/O code";
                    }
                    enum "rtsock" {
                      value 6;
                      description
                        "Trace routing socket code";
                    }
                    enum "ui" {
                      value 7;
                      description
                        "Trace user interface code";
                    }
                    enum "util" {
                      value 8;
                      description
                        "Trace miscellaneous utility code";
                    }
                    enum "gencfg" {
                      value 9;
                      description
                        "Trace fud gencfg message";
                    }
                    enum "domain" {
                      value 10;
                      description
                        "Trace DNS service-specific code";
                    }
                    enum "tftp" {
                      value 11;
                      description
                        "Trace TFTP service-specific code";
                    }
                    enum "bootp" {
                      value 12;
                      description
                        "Trace BOOTP/DHCP service-specific code";
                    }
                    enum "port" {
                      value 13;
                      description
                        "Trace arbitrary protocol code";
                    }
                    enum "if-rtsdb" {
                      value 14;
                      description
                        "Trace interface hierarchy rtsdb";
                    }
                    enum "all" {
                      value 15;
                      description
                        "Trace all areas of code";
                    }
                  }
                }
              }  // list flag
            }  // container traceoptions
    
            container rtsdb-client-traceoptions {
              presence
                "enable rtsdb-client-traceoptions";
              status deprecated;
              description
                "SHM rtsock database client library trace options";
              uses apply-advanced;
    
              container if-rtsdb {
                presence "enable if-rtsdb";
                description
                  "Trace interface hierarchy rtsdb";
                uses apply-advanced;
    
                list flag {
                  key "name";
                  ordered-by user;
                  description
                    "Tracing parameters";
                  leaf name {
                    type enumeration {
                      enum "init" {
                        value 0;
                        description
                          "Trace initialization";
                      }
                      enum "routing-socket" {
                        value 1;
                        description
                          "Trace routing socket messages";
                      }
                      enum "map" {
                        value 2;
                        description
                          "Trace shared memory mapping";
                      }
                      enum "all" {
                        value 3;
                        description "Trace all";
                      }
                    }
                  }
    
                  leaf disable {
                    type empty;
                    description
                      "Disable this trace flag";
                  }
                }  // list flag
              }  // container if-rtsdb
            }  // container rtsdb-client-traceoptions
    
            container domain {
              description
                "Incoming DNS request forwarding configuration";
              uses apply-advanced;
    
              leaf description {
                type string;
                description
                  "Text description of server";
              }
    
              container server {
                description "Server information";
                leaf address {
                  type jt:ipv4addr;
                  description
                    "Name or address of server to which to forward";
                }
    
                choice instance {
                  container logical-system {
                    description
                      "Logical system of server to which to forward";
                    leaf logical-system-name {
                      junos:must "("logical-systems $$")";
                      junos:must-message "referenced logical system must be defined";
                      type string {
                        junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                        junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                      }
                      description
                        "Name of logical system";
                    }
    
                    leaf routing-instance {
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // container logical-system
                  leaf routing-instance {
                    junos:must "("routing-instances $$")";
                    junos:must-message "referenced routing instance must be defined";
                    type union {
                      type string {
                        pattern "default";
                      }
                      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 of server to which to forward";
                  }
                }  // choice instance
              }  // container server
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Incoming DNS request forwarding interface configuration";
                leaf name {
                  type union {
                    type jt:interface-wildcard;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of interface or group of interfaces";
                }
    
                uses apply-advanced;
    
                leaf no-listen {
                  type empty;
                  description
                    "Do not listen on this interface";
                }
    
                leaf broadcast {
                  type empty;
                  description
                    "If the layer 2 interface is unknown then broadcast";
                }
    
                leaf description {
                  type string;
                  description
                    "Text description of server";
                }
    
                container server {
                  description
                    "Server information";
                  leaf address {
                    type jt:ipv4addr;
                    description
                      "Name or address of server to which to forward";
                  }
    
                  choice instance {
                    container logical-system {
                      description
                        "Logical system of server to which to forward";
                      leaf logical-system-name {
                        junos:must "("logical-systems $$")";
                        junos:must-message "referenced logical system must be defined";
                        type string {
                          junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                          junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                        }
                        description
                          "Name of logical system";
                      }
    
                      leaf routing-instance {
                        type union {
                          type string {
                            pattern "default";
                          }
                          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 of server to which to forward";
                      }
                    }  // container logical-system
                    leaf routing-instance {
                      junos:must "("routing-instances $$")";
                      junos:must-message "referenced routing instance must be defined";
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // choice instance
                }  // container server
              }  // list interface
            }  // container domain
    
            container tftp {
              description
                "Incoming TFTP request forwarding configuration";
              uses apply-advanced;
    
              leaf description {
                type string;
                description
                  "Text description of server";
              }
    
              container server {
                description "Server information";
                leaf address {
                  type jt:ipv4addr;
                  description
                    "Name or address of server to which to forward";
                }
    
                choice instance {
                  container logical-system {
                    description
                      "Logical system of server to which to forward";
                    leaf logical-system-name {
                      junos:must "("logical-systems $$")";
                      junos:must-message "referenced logical system must be defined";
                      type string {
                        junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                        junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                      }
                      description
                        "Name of logical system";
                    }
    
                    leaf routing-instance {
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // container logical-system
                  leaf routing-instance {
                    junos:must "("routing-instances $$")";
                    junos:must-message "referenced routing instance must be defined";
                    type union {
                      type string {
                        pattern "default";
                      }
                      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 of server to which to forward";
                  }
                }  // choice instance
              }  // container server
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Incoming TFTP request forwarding interface configuration";
                leaf name {
                  type union {
                    type jt:interface-wildcard;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of interface or group of interfaces";
                }
    
                uses apply-advanced;
    
                leaf no-listen {
                  type empty;
                  description
                    "Do not listen on this interface";
                }
    
                leaf broadcast {
                  type empty;
                  description
                    "If the layer 2 interface is unknown then broadcast";
                }
    
                leaf description {
                  type string;
                  description
                    "Text description of server";
                }
    
                container server {
                  description
                    "Server information";
                  leaf address {
                    type jt:ipv4addr;
                    description
                      "Name or address of server to which to forward";
                  }
    
                  choice instance {
                    container logical-system {
                      description
                        "Logical system of server to which to forward";
                      leaf logical-system-name {
                        junos:must "("logical-systems $$")";
                        junos:must-message "referenced logical system must be defined";
                        type string {
                          junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                          junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                        }
                        description
                          "Name of logical system";
                      }
    
                      leaf routing-instance {
                        type union {
                          type string {
                            pattern "default";
                          }
                          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 of server to which to forward";
                      }
                    }  // container logical-system
                    leaf routing-instance {
                      junos:must "("routing-instances $$")";
                      junos:must-message "referenced routing instance must be defined";
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // choice instance
                }  // container server
              }  // list interface
            }  // container tftp
    
            container bootp {
              junos:must "(!("system autoinstallation"))";
              junos:must-message "incompatible with 'system autoinstallation'";
              description
                "Incoming BOOTP/DHCP request forwarding configuration";
              uses apply-advanced;
    
              leaf relay-agent-option {
                type empty;
                description
                  "Use DHCP Relay Agent option in relayed BOOTP/DHCP messages";
              }
    
              leaf description {
                type string;
                description
                  "Text description of servers";
              }
    
              list server {
                key "name";
                ordered-by user;
                description "Server information";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Name or address of servers to which to forward";
                }
    
                uses apply-advanced;
    
                list logical-system {
                  key "name";
                  ordered-by user;
                  description
                    "Logical system of server to which to forward";
                  leaf name {
                    junos:must "("logical-systems $$")";
                    junos:must-message "referenced logical system must be defined";
                    type string {
                      junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                      junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                    }
                    description
                      "Name of logical system";
                  }
    
                  leaf-list routing-instance {
                    type string;
                    ordered-by user;
                    description
                      "Routing instance of server to which to forward";
                  }
                }  // list logical-system
    
                leaf-list routing-instance {
                  type string;
                  ordered-by user;
                  description
                    "Routing instance of server to which to forward";
                }
              }  // list server
    
              leaf maximum-hop-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16";
                  }
                }
                default "4";
                description
                  "Maximum number of hops per packet";
              }
    
              leaf minimum-wait-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 30000";
                  }
                }
                default "0";
                description
                  "Minimum number of seconds before requests are forwarded";
              }
    
              leaf client-response-ttl {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "IP time-to-live value to set in responses to client";
              }
    
              leaf vpn {
                type empty;
                description
                  "Enable vpn encryption ";
              }
    
              leaf apply-secondary-as-giaddr {
                type empty;
                description
                  "Enable DHCP relay to use secondary gateway ip on all interfaces";
              }
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Incoming BOOTP/DHCP request forwarding interface configuration";
                leaf name {
                  type union {
                    type jt:interface-wildcard;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of interface or group of interfaces";
                }
    
                uses apply-advanced;
    
                leaf no-listen {
                  type empty;
                  description
                    "Do not listen on this interface";
                }
    
                leaf broadcast {
                  type empty;
                  description
                    "If the layer 2 interface is unknown then broadcast";
                }
    
                leaf description {
                  type string;
                  description
                    "Text description of servers";
                }
    
                list server {
                  key "name";
                  ordered-by user;
                  description
                    "Server information";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "Name or address of servers to which to forward";
                  }
    
                  uses apply-advanced;
    
                  list logical-system {
                    key "name";
                    ordered-by user;
                    description
                      "Logical system of server to which to forward";
                    leaf name {
                      junos:must "("logical-systems $$")";
                      junos:must-message "referenced logical system must be defined";
                      type string {
                        junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                        junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                      }
                      description
                        "Name of logical system";
                    }
    
                    leaf-list routing-instance {
                      type string;
                      ordered-by user;
                      description
                        "Routing instance of server to which to forward";
                    }
                  }  // list logical-system
    
                  leaf-list routing-instance {
                    type string;
                    ordered-by user;
                    description
                      "Routing instance of server to which to forward";
                  }
                }  // list server
    
                leaf maximum-hop-count {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 16";
                    }
                  }
                  default "4";
                  description
                    "Maximum number of hops per packet";
                }
    
                leaf minimum-wait-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 30000";
                    }
                  }
                  default "0";
                  description
                    "Minimum number of seconds before requests are forwarded";
                }
    
                leaf client-response-ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "IP time-to-live value to set in responses to client";
                }
    
                leaf vpn {
                  type empty;
                  description
                    "Enable vpn encryption ";
                }
    
                leaf apply-secondary-as-giaddr {
                  type empty;
                  description
                    "Enable DHCP relay to use secondary gateway ip on this interface";
                }
              }  // list interface
            }  // container bootp
    
            list port {
              key "name";
              ordered-by user;
              description
                "Incoming arbitrary protocol request forwarding configuration";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Port number of the protocol to listen";
              }
    
              uses apply-advanced;
    
              leaf description {
                type string;
                description
                  "Text description of server";
              }
    
              list server {
                key "name";
                ordered-by user;
                description "Server information";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Name or address of server to which to forward";
                }
    
                uses apply-advanced;
    
                choice instance {
                  container logical-system {
                    description
                      "Logical system of server to which to forward";
                    leaf logical-system-name {
                      junos:must "("logical-systems $$")";
                      junos:must-message "referenced logical system must be defined";
                      type string {
                        junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                        junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                      }
                      description
                        "Name of logical system";
                    }
    
                    leaf routing-instance {
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // container logical-system
                  leaf routing-instance {
                    junos:must "("routing-instances $$")";
                    junos:must-message "referenced routing instance must be defined";
                    type union {
                      type string {
                        pattern "default";
                      }
                      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 of server to which to forward";
                  }
                }  // choice instance
              }  // list server
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Incoming request forwarding interface configuration";
                leaf name {
                  type union {
                    type jt:interface-wildcard;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Name of interface or group of interfaces";
                }
    
                uses apply-advanced;
    
                leaf no-listen {
                  type empty;
                  description
                    "Do not listen on this interface";
                }
    
                leaf broadcast {
                  type empty;
                  description
                    "If the layer 2 interface is unknown then broadcast";
                }
    
                leaf description {
                  type string;
                  description
                    "Text description of server";
                }
    
                list server {
                  key "name";
                  ordered-by user;
                  description
                    "Server information";
                  leaf name {
                    type jt:ipv4addr;
                    description
                      "Name or address of server to which to forward";
                  }
    
                  uses apply-advanced;
    
                  choice instance {
                    container logical-system {
                      description
                        "Logical system of server to which to forward";
                      leaf logical-system-name {
                        junos:must "("logical-systems $$")";
                        junos:must-message "referenced logical system must be defined";
                        type string {
                          junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$";
                          junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores";
                        }
                        description
                          "Name of logical system";
                      }
    
                      leaf routing-instance {
                        type union {
                          type string {
                            pattern "default";
                          }
                          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 of server to which to forward";
                      }
                    }  // container logical-system
                    leaf routing-instance {
                      junos:must "("routing-instances $$")";
                      junos:must-message "referenced routing instance must be defined";
                      type union {
                        type string {
                          pattern "default";
                        }
                        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 of server to which to forward";
                    }
                  }  // choice instance
                }  // list server
              }  // list interface
            }  // list port
          }  // container helpers
    
          container family {
            description "Protocol family";
            container inet {
              description "IPv4 parameters";
              uses apply-advanced;
    
              container filter {
                description
                  "Filtering for forwarding table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for forwarded packets";
                }
    
                leaf output {
                  type string;
                  description
                    "Name of output filter to apply for forwarded packets";
                }
              }  // container filter
            }  // container inet
    
            container inet6 {
              description "IPv6 parameters";
              uses apply-advanced;
    
              container filter {
                description
                  "Filtering for forwarding table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for forwarded packets";
                }
    
                leaf output {
                  type string;
                  description
                    "Name of output filter to apply for forwarded packets";
                }
              }  // container filter
    
              leaf source-checking {
                type empty;
                description
                  "Discard IPv6 packet when source address type is unspecified, loopback, multicast or link-local ";
              }
            }  // container inet6
    
            container mpls {
              description "MPLS parameters";
              uses apply-advanced;
    
              container filter {
                description
                  "Filtering for forwarding table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for forwarded packets";
                }
    
                leaf output {
                  type string;
                  description
                    "Name of output filter to apply for forwarded packets";
                }
              }  // container filter
            }  // container mpls
    
            container vpls {
              description "VPLS parameters";
              uses apply-advanced;
    
              container filter {
                description
                  "Filtering for VPLS DMAC forwarding table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for forwarded packets";
                }
              }  // container filter
    
              container flood {
                description
                  "Filtering for VPLS flood table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for VPLS flood packets";
                }
              }  // container flood
            }  // container vpls
    
            container evpn {
              description "EVPN parameters";
              uses apply-advanced;
    
              container filter {
                description
                  "Filtering for EVPN DMAC forwarding table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for forwarded packets";
                }
              }  // container filter
    
              container flood {
                description
                  "Filtering for EVPN flood table";
                uses apply-advanced;
    
                leaf input {
                  type string;
                  description
                    "Name of input filter to apply for EVPN flood packets";
                }
              }  // container flood
            }  // container evpn
          }  // container family
    
          list next-hop-group {
            key "name";
            description
              "Next hop group forwarding option";
            uses juniper-next-hop-group-options;
          }  // list next-hop-group
    
          container dhcp-relay {
            junos:must "(!("system services dhcp"))";
            junos:must-message "Incompatible with 'set system services dhcp'";
            junos:must "(!(".. .. instance-type virtual-switch"))";
            junos:must-message "forwarding-options dhcp-relay incompatible with routing-instances instance-type virtual-switch'";
            description
              "Dynamic Host Configuration Protocol relay configuration";
            uses jdhcp-relay-type;
          }  // container dhcp-relay
    
          choice load-balance-label-capability-choice {
            leaf load-balance-label-capability {
              type empty;
              description
                "Load balance label capability";
            }
            leaf no-load-balance-label-capability {
              type empty;
              description
                "Don't load balance label capability";
            }
          }  // choice load-balance-label-capability-choice
    
          list ip-options-protocol-queue {
            key "name";
            ordered-by user;
            description
              "IP Options protocol logical queue parameters";
            leaf name {
              type string;
              description "Protocol name";
            }
    
            uses apply-advanced;
    
            leaf protocol-id {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 254";
                }
              }
              description "Protocol Identifier";
            }
    
            leaf queue-depth {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 807";
                }
              }
              description
                "Size of the protocol logical options queue";
            }
          }  // list ip-options-protocol-queue
    
          container access-security {
            description
              "Access security configuration";
            uses jdhcp-access-security-type;
          }  // container access-security
    
          container vxlan-routing {
            description
              "VXLAN Routing forwarding options";
            uses apply-advanced;
    
            leaf next-hop {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Next-hop. Must be multiple of 4096. This will restart PFE";
            }
    
            leaf interface-num {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Interface. Must be multiple of 2048. This will restart PFE";
            }
    
            leaf overlay-ecmp {
              type empty;
              description
                "Enable overlay ecmp for vxlan L3. This will restart PFE";
            }
    
            leaf loopback-port {
              junos:must "(all "interfaces $$ unit <*> family ethernet-switching interface-mode trunk")";
              junos:must-message "Interface-mode trunk needs to be enabled for loopback AE";
              junos:must "("chassis aggregated-devices ethernet device-count")";
              junos:must-message "Ethernet device-count needs to be configured for loopback AE";
              junos:must "("interfaces $$ aggregated-ether-options loopback")";
              junos:must-message "Loopback needs to be enabled on the AE interface";
              type string;
              description
                "AE loopback interface used for VXLAN routing. This will restart PFE";
            }
          }  // container vxlan-routing
        }  // grouping juniper-forwarding-options
    
        grouping jdhcp-access-security-type {
          description
            "Access security configuration";
          uses apply-advanced;
    
          container router-advertisement-guard {
            presence
              "enable router-advertisement-guard";
            description
              "Router Advertisement Guard Configuration";
            uses apply-advanced;
    
            list policy {
              key "name";
              ordered-by user;
              description
                "Router Advertisement Guard policy";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Router Advertisement Guard policy name";
              }
    
              uses apply-advanced;
    
              container discard {
                description "Discard parameters";
                uses apply-advanced;
    
                leaf source-ip-address-list {
                  type string;
                  description
                    "IPv6 Source address list name";
                }
    
                leaf source-mac-address-list {
                  type string;
                  description
                    "Source mac address list name";
                }
    
                leaf prefix-list-name {
                  type string;
                  description "Prefix-list Name";
                }
              }  // container discard
    
              container accept {
                description "Accept parameters";
                uses apply-advanced;
    
                container match-list {
                  description
                    "List of parameters to check";
                  uses apply-advanced;
    
                  leaf source-ip-address-list {
                    type string;
                    description
                      "IPv6 Source address list name";
                  }
    
                  leaf source-mac-address-list {
                    type string;
                    description
                      "Source mac address list name";
                  }
    
                  leaf prefix-list-name {
                    type string;
                    description
                      "Prefix-list Name";
                  }
    
                  leaf match-criteria {
                    type enumeration {
                      enum "match-all" {
                        value 0;
                        description
                          "A match from every list";
                      }
                      enum "match-any" {
                        value 1;
                        description
                          "A match from any list";
                      }
                    }
                    description "Match Criteria";
                  }
                }  // container match-list
    
                container match-options {
                  presence
                    "enable match-options";
                  description
                    "List of Options to check";
                  uses apply-advanced;
    
                  container hop-limit {
                    description "Hop limit";
                    uses apply-advanced;
    
                    leaf maximum {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      description
                        "Maximum hop limit";
                    }
    
                    leaf minimum {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 255";
                        }
                      }
                      description
                        "Minimum hop limit";
                    }
                  }  // container hop-limit
    
                  container route-preference {
                    description
                      "Accept route preference";
                    uses apply-advanced;
    
                    leaf maximum {
                      type enumeration {
                        enum "low" {
                          value 0;
                          description
                            "Route preference low";
                        }
                        enum "medium" {
                          value 1;
                          description
                            "Route preference medium";
                        }
                        enum "high" {
                          value 2;
                          description
                            "Route preference high";
                        }
                      }
                      description
                        "Maximum route preference";
                    }
                  }  // container route-preference
    
                  leaf managed-config-flag {
                    type empty;
                    description
                      "Check Managed config flag";
                  }
    
                  leaf other-config-flag {
                    type empty;
                    description
                      "Check Other config flag";
                  }
                }  // container match-options
              }  // container accept
            }  // list policy
    
            container interface {
              description
                "RA Guard config on Interface";
              uses apply-advanced;
    
              list intf-config {
                key "name";
                description
                  "Interface Configuration";
                uses interface-policy;
              }  // list intf-config
            }  // container interface
    
            container vlans {
              description
                "RA Guard config on Vlan";
              uses apply-advanced;
    
              list vlan-config {
                key "name";
                description
                  "Virtual LAN Configuration";
                uses vlan-policy;
              }  // list vlan-config
            }  // container vlans
          }  // container router-advertisement-guard
        }  // grouping jdhcp-access-security-type
    
        grouping interface-policy {
          description "Interface Name";
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface Name";
          }
    
          uses apply-advanced;
    
          container policy {
            description "Attach policy";
            uses apply-advanced;
    
            leaf policy-name {
              type string;
              description
                "Router Advertisement Guard policy name";
            }
    
            choice policy-type {
              leaf stateful {
                type empty;
                description
                  "Stateful router advertisement guard";
              }
              leaf stateless {
                type empty;
                description
                  "Stateless router advertisement guard";
              }
            }  // choice policy-type
          }  // container policy
    
          container mark-interface {
            description "Mark interface";
            uses apply-advanced;
    
            choice mark-intf-type {
              leaf trusted {
                junos:must "(!(".. .. policy"))";
                junos:must-message "Trusted interfaces cannot have policy attached";
                type empty;
                description
                  "Mark interface trusted";
              }
              leaf block {
                junos:must "(!(".. .. policy"))";
                junos:must-message "Blocked interfaces cannot have policy attached";
                type empty;
                description
                  "Block router-advertisement";
              }
            }  // choice mark-intf-type
          }  // container mark-interface
        }  // grouping interface-policy
    
        grouping juniper-igmp-snooping-options {
          uses apply-advanced;
    
          leaf use-p2mp-lsp {
            junos:must "(".. .. instance-type vpls")";
            junos:must-message "use-p2mp-lsp supported only on instance type vpls";
            type empty;
            description
              "P2MP will be used to forward traffic instead of PW";
          }
    
          container snoop-pseudowires {
            junos:must "(".. .. instance-type vpls")";
            junos:must-message "snoop-pseudowires supported only on instance type vpls";
            junos:must "(!(" .. use-p2mp-lsp"))";
            junos:must-message "snoop-pseudowires and use-p2mp-lsp cannot be configured together";
            presence "enable snoop-pseudowires";
            description
              "VPLS PE would send traffic selectively to PE's having interest";
            uses apply-advanced;
          }  // container snoop-pseudowires
        }  // grouping juniper-igmp-snooping-options
    
        grouping juniper-mld-snooping-options {
          uses apply-advanced;
    
          leaf use-p2mp-lsp {
            junos:must "(".. .. instance-type vpls")";
            junos:must-message "use-p2mp-lsp supported only on instance type vpls";
            type empty;
            description
              "P2MP will be used to forward traffic instead of PW";
          }
    
          container snoop-pseudowires {
            junos:must "(".. .. instance-type vpls")";
            junos:must-message "snoop-pseudowires supported only on instance type vpls";
            junos:must "(!(" .. use-p2mp-lsp"))";
            junos:must-message "snoop-pseudowires and use-p2mp-lsp cannot be configured together";
            presence "enable snoop-pseudowires";
            description
              "VPLS PE would send traffic selectively to PE's having interest";
            uses apply-advanced;
          }  // container snoop-pseudowires
        }  // grouping juniper-mld-snooping-options
    
        grouping juniper-multicast-snooping-options {
          uses apply-advanced;
    
          container options {
            description "Miscellaneous options";
            uses apply-advanced;
    
            container syslog {
              description
                "Set system logging level";
              uses apply-advanced;
    
              container level {
                description "Logging level";
                leaf emergency {
                  type empty;
                  description "Emergency level";
                }
    
                leaf alert {
                  type empty;
                  description "Alert level";
                }
    
                leaf critical {
                  type empty;
                  description "Critical level";
                }
    
                leaf error {
                  type empty;
                  description "Error level";
                }
    
                leaf warning {
                  type empty;
                  description "Warning level";
                }
    
                leaf notice {
                  type empty;
                  description "Notice level";
                }
    
                leaf info {
                  type empty;
                  description
                    "Informational level";
                }
    
                leaf debug {
                  type empty;
                  description "Debugging level";
                }
              }  // container level
    
              leaf upto {
                type enumeration {
                  enum "emergency" {
                    value 0;
                    description
                      "Emergency level";
                  }
                  enum "alert" {
                    value 1;
                    description "Alert level";
                  }
                  enum "critical" {
                    value 2;
                    description "Critical level";
                  }
                  enum "error" {
                    value 3;
                    description "Error level";
                  }
                  enum "warning" {
                    value 4;
                    description "Warning level";
                  }
                  enum "notice" {
                    value 5;
                    description "Notice level";
                  }
                  enum "info" {
                    value 6;
                    description
                      "Informational level";
                  }
                  enum "debug" {
                    value 7;
                    description
                      "Debugging level";
                  }
                }
                description
                  "Log up to a particular logging level";
              }
    
              leaf mark {
                type union {
                  type int32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                units "seconds";
                description
                  "Periodically mark the trace file";
              }
            }  // container syslog
          }  // container options
    
          container traceoptions {
            description
              "Multicast snooping 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 "parse" {
                    value 0;
                    description
                      "Trace configuration parsing";
                  }
                  enum "config-internal" {
                    value 1;
                    description
                      "Trace configuration internals";
                  }
                  enum "route" {
                    value 2;
                    description
                      "Trace routing information";
                  }
                  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 "policy" {
                    value 6;
                    description
                      "Trace policy processing";
                  }
                  enum "task" {
                    value 7;
                    description
                      "Trace routing protocol task processing";
                  }
                  enum "timer" {
                    value 8;
                    description
                      "Trace routing protocol timer processing";
                  }
                  enum "all" {
                    value 9;
                    description
                      "Trace everything";
                  }
                }
              }
    
              leaf disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container forwarding-cache {
            description
              "Multicast forwarding cache";
            uses apply-advanced;
    
            container threshold {
              description "Threshold";
              uses apply-advanced;
    
              leaf suppress {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 200000";
                  }
                }
                description "Suppress threshold";
              }
    
              leaf reuse {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 200000";
                  }
                }
                description "Reuse threshold";
              }
            }  // container threshold
          }  // container forwarding-cache
    
          leaf-list flood-groups {
            type jt:ipaddr;
            ordered-by user;
            description
              "Groups for which the traffic will be flooded";
          }
    
          container host-outbound-traffic {
            description
              "Host generated protocol packets";
            uses apply-advanced;
    
            leaf forwarding-class {
              type string {
                junos:posix-pattern "^.{1,64}$";
                junos:pattern-message "Must be string of 64 characters or less";
              }
              description
                "Forwarding class name";
            }
    
            leaf dot1p {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 7";
                }
              }
              description "Dot1p bits";
            }
          }  // container host-outbound-traffic
    
          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 restart-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 300";
                }
              }
              units "seconds";
              default "180";
              description
                "Maximum time for graceful restart to finish";
            }
          }  // container graceful-restart
    
          leaf ignore-stp-topology-change {
            type empty;
            description
              "Don't process stp topology change";
          }
    
          container multichassis-lag-replicate-state {
            presence
              "enable multichassis-lag-replicate-state";
            description
              "Enable multichassis lag replication";
            uses apply-advanced;
    
            leaf suppress-report {
              type empty;
              description
                "Enable mclag report suppression";
            }
          }  // container multichassis-lag-replicate-state
    
          container oism {
            description
              "Optimized inter subnet multicast options";
            uses apply-advanced;
    
            leaf install-star-g-routes {
              type empty;
              description
                "Install (*,G) multicast routes in data plane";
            }
          }  // container oism
    
          leaf nexthop-hold-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "milliseconds";
            description
              "Nexthop hold time in milliseconds";
          }
        }  // grouping juniper-multicast-snooping-options
    
        grouping juniper-next-hop-group-options {
          leaf name {
            type string;
            description "Next hop group name";
          }
    
          uses apply-advanced;
    
          leaf group-type {
            type enumeration {
              enum "inet" {
                value 0;
                description
                  "Group of family inet next-hops";
              }
              enum "layer-2" {
                value 1;
                description
                  "Layer-2 next-hop group";
              }
              enum "inet6" {
                value 2;
                description
                  "Group of family inet6 next-hops";
              }
            }
            default "inet";
            description "Next hop group type";
          }
    
          list interface {
            key "name";
            description
              "Interfaces through which to send sampled traffic";
            uses next_hop_group_intf_type;
          }  // list interface
    
          list next-hop-subgroup {
            key "name";
            description
              "Group of interfaces through which to send sampled traffic";
            uses juniper-next-hop-subgroup-options;
          }  // list next-hop-subgroup
        }  // grouping juniper-next-hop-group-options
    
        grouping juniper-next-hop-subgroup-options {
          leaf name {
            junos:must "(".. interface")";
            junos:must-message "At least two interfaces are required for next-hop-subgroup configuration";
            type string;
            description
              "Next-hop sub-group name";
          }
    
          uses apply-advanced;
    
          list interface {
            key "name";
            max-elements 16;
            description
              "Interface through which to send the sampled traffic";
            uses next_hop_subgroup_intf_type;
          }  // list interface
        }  // grouping juniper-next-hop-subgroup-options
    
        grouping juniper-packet-accounting-options {
          leaf name {
            type string;
            description
              "Name for accounting group";
          }
    
          uses apply-advanced;
    
          container output {
            description
              "Accounting data disposition";
            uses packet_accounting_output_type;
          }  // container output
        }  // grouping juniper-packet-accounting-options
    
        grouping juniper-packet-capture-options {
          description "Packet capture options";
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable packet-capture";
            }
          }  // choice enable-disable
    
          container file {
            description
              "Parameters for file that contains captured packets";
            leaf filename {
              type string {
                junos:posix-pattern "![/ %.]";
                junos:pattern-message "Must not contain '/', '%', '.' or a space";
                length "1 .. 900";
              }
              description "Name of file";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10000";
                }
              }
              default "10";
              description
                "Maximum number of files";
            }
    
            leaf size {
              type string;
              description "Maximum file size";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read packet-capture files";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read packet-capture files";
              }
            }  // choice world-readable-choice
          }  // container file
    
          leaf maximum-capture-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "68 .. 1520";
              }
            }
            units "bytes";
            default "68";
            description
              "Maximum packet size to capture";
          }
        }  // grouping juniper-packet-capture-options
    
        grouping juniper-port-mirror-options {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Port-mirroring trace options";
            uses sampling_traceoptions_type;
          }  // container traceoptions
    
          leaf disable {
            type empty;
            description
              "Disable the global port-mirroring instance";
          }
    
          leaf disable-all-instances {
            type empty;
            description
              "Disable the all port-mirroring instances";
          }
    
          container input {
            description
              "Settings for sampling of input packets";
            uses pm_family_input_type;
          }  // container input
    
          container family {
            description
              "Address family of packets to mirror";
            container inet {
              description "Mirror IPv4 packets";
              uses apply-advanced;
    
              container input {
                junos:must "(!(".. .. .. input"))";
                junos:must-message "input parameters under family and outside family are mutually exclusive";
                status deprecated;
                description
                  "Settings for sampling of input packets";
                uses pm_family_input_type;
              }  // container input
    
              container output {
                description
                  "One or more next hops for port-mirrored packets";
                uses inet_pm_family_output_type;
              }  // container output
            }  // container inet
    
            container mpls {
              description "Mirror MPLS packets";
              uses apply-advanced;
    
              container input {
                junos:must "(!(".. .. .. input"))";
                junos:must-message "input parameters under family and outside family are mutually exclusive";
                status deprecated;
                description
                  "Settings for sampling of input packets";
                uses pm_family_input_type;
              }  // container input
    
              container output {
                description
                  "One or more next hops for port-mirrored packets";
                uses mpls_pm_family_output_type;
              }  // container output
            }  // container mpls
    
            container any {
              description "Mirror any packets";
              uses apply-advanced;
    
              container output {
                description
                  "One or more next hops for port-mirrored packets";
                uses any_pm_family_output_type;
              }  // container output
            }  // container any
    
            container vpls {
              description
                "Mirror Layer-2 bridged/vpls packets";
              uses apply-advanced;
    
              container input {
                junos:must "(!(".. .. ..  input"))";
                junos:must-message "input parameters under family and outside family are mutually exclusive";
                status deprecated;
                description
                  "Settings for sampling of input packets";
                uses pm_family_input_type;
              }  // container input
    
              container output {
                description
                  "Destination for port-mirrored packets";
                uses layer2_pm_family_output_type;
              }  // container output
            }  // container vpls
    
            container ccc {
              description
                "Mirror layer-2 ccc packets";
              uses apply-advanced;
    
              container input {
                junos:must "(!(".. .. ..  input"))";
                junos:must-message "input parameters under family and outside family are mutually exclusive";
                status deprecated;
                description
                  "Settings for sampling of input packets";
                uses pm_family_input_type;
              }  // container input
    
              container output {
                description
                  "Destination for port-mirrored packets";
                uses layer2_pm_family_output_type;
              }  // container output
            }  // container ccc
          }  // container family
    
          list instance {
            key "name";
            ordered-by user;
            description
              "Instance of port-mirroring parameters";
            leaf name {
              type string {
                junos:posix-pattern "!^((__.*)|(.{65,}))$";
                junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                length "1 .. 63";
              }
              description
                "Name for port-mirroring instance";
            }
    
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description
                "Disable the this port-mirroring instance";
            }
    
            choice input_params_or_instance {
              container input {
                description
                  "Settings for sampling of input packets";
                uses pm_family_input_type;
              }  // container input
              leaf input-parameters-instance {
                junos:must "("forwarding-options port-mirroring instance $$")";
                junos:must-message "Referenced port-mirroring instance does not exist";
                type string;
                description
                  "Name of port-mirroring instance to use for input parameters";
              }
            }  // choice input_params_or_instance
    
            container output {
              description
                "One or more next hops for port-mirrored packets";
              uses inet_pm_output_type;
            }  // container output
    
            container family {
              description
                "Address family of packets to mirror";
              container inet {
                description
                  "Mirror IPv4 packets";
                uses apply-advanced;
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "input parameters under family and outside family are mutually exclusive";
                  status deprecated;
                  description
                    "Settings for sampling of input packets";
                  uses pm_family_input_type;
                }  // container input
    
                container output {
                  description
                    "One or more next hops for port-mirrored packets";
                  uses inet_pm_family_output_type;
                }  // container output
              }  // container inet
    
              container mpls {
                description
                  "Mirror MPLS packets";
                uses apply-advanced;
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "input parameters under family and outside family are mutually exclusive";
                  status deprecated;
                  description
                    "Settings for sampling of input packets";
                  uses pm_family_input_type;
                }  // container input
    
                container output {
                  description
                    "One or more next hops for port-mirrored packets";
                  uses mpls_pm_family_output_type;
                }  // container output
              }  // container mpls
    
              container any {
                description "Mirror any packets";
                uses apply-advanced;
    
                container output {
                  description
                    "One or more next hops for port-mirrored packets";
                  uses any_pm_family_output_type;
                }  // container output
              }  // container any
    
              container vpls {
                description
                  "Mirror Layer-2 bridged/vpls packets";
                uses apply-advanced;
    
                container input {
                  junos:must "(!(".. .. ..  input"))";
                  junos:must-message "input parameters under family and outside family are mutually exclusive";
                  status deprecated;
                  description
                    "Settings for sampling of input packets";
                  uses pm_family_input_type;
                }  // container input
    
                container output {
                  description
                    "Destination for port-mirrored packets";
                  uses layer2_pm_family_output_type;
                }  // container output
              }  // container vpls
    
              container ccc {
                description
                  "Mirror layer-2 ccc packets";
                uses apply-advanced;
    
                container input {
                  junos:must "(!(".. .. ..  input"))";
                  junos:must-message "input parameters under family and outside family are mutually exclusive";
                  status deprecated;
                  description
                    "Settings for sampling of input packets";
                  uses pm_family_input_type;
                }  // container input
    
                container output {
                  description
                    "Destination for port-mirrored packets";
                  uses layer2_pm_family_output_type;
                }  // container output
              }  // container ccc
            }  // container family
          }  // list instance
        }  // grouping juniper-port-mirror-options
    
        grouping any_pm_family_output_type {
          uses apply-advanced;
    
          choice interface-or-next-hop-index {
            list interface {
              key "name";
              description
                "Interfaces through which to send sampled traffic";
              uses any_pm_intf_type;
            }  // list interface
    
            case case_2 {
            }  // case case_2
          }  // choice interface-or-next-hop-index
    
          container hosted-service {
            description
              "Configure Hosted Service";
            uses apply-advanced;
    
            leaf server-profile {
              junos:must "("services hosted-services server-profile $$")";
              junos:must-message "Only server profiles configured under [services hosted-services server-profile] can be configured here";
              type string {
                length "3 .. 32";
              }
              description "Server profile name";
            }
          }  // container hosted-service
        }  // grouping any_pm_family_output_type
    
        grouping any_pm_intf_type {
          leaf name {
            junos:must "(!(("interfaces $$-IFL family inet" || "interfaces $$-IFL family inet6")))";
            junos:must-message "An interface configured as family inet/inet6 cannot be configured as output interface";
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface through which to send sampled traffic";
          }
    
          uses apply-advanced;
    
          list next-hop {
            key "name";
            ordered-by user;
            description
              "Address of next hop through which to send sampled traffic";
            uses inet_next_hop_type;
          }  // list next-hop
        }  // grouping any_pm_intf_type
    
        grouping inet_next_hop_type {
          description
            "Address of next hop through which to send sampled traffic";
          leaf name {
            type jt:ipv4addr;
          }
    
          uses apply-advanced;
        }  // grouping inet_next_hop_type
    
        grouping inet_pm_family_output_type {
          uses apply-advanced;
    
          choice interface-or-next-hop-index {
            list interface {
              key "name";
              description
                "Interfaces through which to send sampled traffic";
              uses inet_pm_intf_type;
            }  // list interface
    
            case case_2 {
            }  // case case_2
          }  // choice interface-or-next-hop-index
    
          leaf no-filter-check {
            type empty;
            description
              "Do not check for filters on port-mirroring interface";
          }
    
          leaf ip-address {
            type jt:ipv4addr;
            description
              "ERSPAN Destination IP Address";
          }
        }  // grouping inet_pm_family_output_type
    
        grouping inet_pm_intf_type {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface through which to send sampled traffic";
          }
    
          uses apply-advanced;
    
          list next-hop {
            key "name";
            ordered-by user;
            description
              "Address of next hop through which to send sampled traffic";
            uses inet_next_hop_type;
          }  // list next-hop
        }  // grouping inet_pm_intf_type
    
        grouping inet_pm_output_type {
          uses apply-advanced;
        }  // grouping inet_pm_output_type
    
        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-bd {
          description "Bridging configuration";
          uses apply-advanced;
    
          container mac-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC address forwarding table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container mac-table-size
    
          container mac-ip-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC+IP bindings table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings";
            }
          }  // container mac-ip-table-size
    
          container interface-mac-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC address learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses per interface";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
                enum "log" {
                  value 2;
                  description
                    "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                }
                enum "shutdown" {
                  value 3;
                  description
                    "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                }
                enum "drop-and-log" {
                  value 4;
                  description
                    "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container interface-mac-limit
    
          container interface-mac-ip-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC+IP bindings learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings per interface";
            }
          }  // container interface-mac-ip-limit
    
          container mac-notification {
            presence "enable mac-notification";
            description
              "MAC notification options";
            uses apply-advanced;
    
            leaf notification-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 60";
                }
              }
              units "seconds";
              default "30";
              description
                "Interval for sending MAC notifications";
            }
          }  // container mac-notification
    
          leaf mac-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            description
              "Delay for discarding MAC address if no updates are received";
          }
    
          leaf no-mac-learning {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Disable dynamic MAC address learning";
          }
    
          leaf no-normalization {
            type empty;
            description
              "Disable vlan id normalization for interfaces";
          }
    
          leaf mac-statistics {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Enable MAC address statistics";
          }
    
          container mib {
            presence "enable mib";
            description "Snmp mib options";
            uses apply-advanced;
    
            container dot1q-mib {
              presence "enable dot1q-mib";
              description
                "Dot1q MIB configuration options";
              uses apply-advanced;
    
              leaf port-list {
                type enumeration {
                  enum "bit-map" {
                    value 0;
                    description
                      "Port list is represented in bit-map format";
                  }
                  enum "string" {
                    value 1;
                    description
                      "Port list is represented in string format";
                  }
                }
                description
                  "Port list for staticegressports and staticuntaggedports MIB";
              }
            }  // container dot1q-mib
          }  // container mib
    
          container static-rvtep-mac {
            description
              "Configure Static MAC and remote VxLAN tunnel endpoint entries";
            uses apply-advanced;
    
            list mac {
              key "mac_addr remote-vtep";
              description "Unicast MAC address";
              leaf mac_addr {
                type jt:mac-unicast;
              }
    
              leaf remote-vtep {
                type jt:ipaddr;
                description
                  "Configure static remote VXLAN tunnel endpoints";
              }
            }  // list mac
          }  // container static-rvtep-mac
    
          list interface {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance";
            key "name";
            ordered-by user;
            description
              "Interface that connect this site to the VPN";
            leaf name {
              junos:must "(((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching vlan")) || (!(".. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))";
              junos:must-message "Interface must be part of this routing instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container interface-mac-limit {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              description
                "Maximum number of MAC addresses learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC addresses per interface";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable interface for interface-mac-limit";
              }
    
              leaf packet-action {
                type enumeration {
                  enum "none" {
                    value 0;
                    description
                      "Forward the packet";
                  }
                  enum "drop" {
                    value 1;
                    description
                      "Drop packets and do not learn. Default is forward";
                  }
                  enum "log" {
                    value 2;
                    description
                      "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "shutdown" {
                    value 3;
                    description
                      "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "drop-and-log" {
                    value 4;
                    description
                      "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                  }
                }
                description
                  "Action when MAC limit is reached";
              }
            }  // container interface-mac-limit
    
            leaf action-priority {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 8";
                }
              }
              description
                "Blocking priority of this interface on mac move detection";
            }
    
            list static-mac {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              key "name";
              ordered-by user;
              description
                "Static MAC addresses assigned to this interface";
              leaf name {
                junos:must "((!(".. .. .. .. vlan-id all") || all ".. vlan-id <*>"))";
                junos:must-message " Specify vlan-id for qualified learning ";
                type jt:mac-addr;
                description "MAC address";
              }
    
              uses apply-advanced;
    
              list vlan-id {
                junos:must "(".. .. .. .. vlan-id all")";
                junos:must-message "'vlan-id all' has to be configured for the bridging domain";
                key "name";
                ordered-by user;
                description
                  "VLAN ID of learning VLAN";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4094";
                    }
                  }
                  description "Learning VLAN";
                }
    
                uses apply-advanced;
              }  // list vlan-id
            }  // list static-mac
    
            container interface-mac-ip-limit {
              description
                "Maximum number of MAC+IP bindings learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC+IP bindings per interface";
              }
            }  // container interface-mac-ip-limit
    
            leaf no-mac-learning {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type empty;
              description
                "Disable dynamic MAC address learning";
            }
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            leaf persistent-learning {
              junos:must "(!("switch-options mac-table-aging-time "))";
              junos:must-message "Persistent learning can not co-exist with mac-table-aging-time";
              type empty;
              description
                "Enable persistent MAC learning on this interface";
            }
          }  // list interface
        }  // grouping juniper-protocols-bd
    
        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-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-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 clns-routing {
            type empty;
            description "Enable CLNS routing";
          }
    
          leaf clns-updown-compatibility {
            type empty;
            description
              "Set the Up/Down Bit in place of the I/E bit in CLNS TLVs";
          }
    
          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-l2vpn {
          description
            "Layer 2 VPN, VPLS or EVPN configuration";
          uses apply-advanced;
    
          leaf bum-hashing {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "Bum-hashing knob is only applicable for instance type vpls";
            type empty;
            description
              "Enable BUM hashing feature in the instance";
          }
    
          leaf mac-pinning {
            junos:must "((".. .. .. protocols vpls" || ".. pbb-evpn-core"))";
            junos:must-message "mac-pinning is allowed in VPLS or PBB EVPN instance";
            type empty;
            description "Enable MAC pinning";
          }
    
          container mac-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC address forwarding table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container mac-table-size
    
          container mac-ip-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC+IP bindings table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings";
            }
          }  // container mac-ip-table-size
    
          container interface-mac-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC address learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses per interface";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
                enum "log" {
                  value 2;
                  description
                    "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                }
                enum "shutdown" {
                  value 3;
                  description
                    "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                }
                enum "drop-and-log" {
                  value 4;
                  description
                    "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container interface-mac-limit
    
          container interface-mac-ip-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC+IP bindings learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings per interface";
            }
          }  // container interface-mac-ip-limit
    
          container mac-notification {
            presence "enable mac-notification";
            description
              "MAC notification options";
            uses apply-advanced;
    
            leaf notification-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 60";
                }
              }
              units "seconds";
              default "30";
              description
                "Interval for sending MAC notifications";
            }
          }  // container mac-notification
    
          leaf mac-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            description
              "Delay for discarding MAC address if no updates are received";
          }
    
          leaf no-mac-learning {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Disable dynamic MAC address learning";
          }
    
          leaf no-normalization {
            type empty;
            description
              "Disable vlan id normalization for interfaces";
          }
    
          leaf mac-statistics {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Enable MAC address statistics";
          }
    
          container mib {
            presence "enable mib";
            description "Snmp mib options";
            uses apply-advanced;
    
            container dot1q-mib {
              presence "enable dot1q-mib";
              description
                "Dot1q MIB configuration options";
              uses apply-advanced;
    
              leaf port-list {
                type enumeration {
                  enum "bit-map" {
                    value 0;
                    description
                      "Port list is represented in bit-map format";
                  }
                  enum "string" {
                    value 1;
                    description
                      "Port list is represented in string format";
                  }
                }
                description
                  "Port list for staticegressports and staticuntaggedports MIB";
              }
            }  // container dot1q-mib
          }  // container mib
    
          container static-rvtep-mac {
            description
              "Configure Static MAC and remote VxLAN tunnel endpoint entries";
            uses apply-advanced;
    
            list mac {
              key "mac_addr remote-vtep";
              description "Unicast MAC address";
              leaf mac_addr {
                type jt:mac-unicast;
              }
    
              leaf remote-vtep {
                type jt:ipaddr;
                description
                  "Configure static remote VXLAN tunnel endpoints";
              }
            }  // list mac
          }  // container static-rvtep-mac
    
          list interface {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance";
            key "name";
            ordered-by user;
            description
              "Interface that connect this site to the VPN";
            leaf name {
              junos:must "(((".. .. .. .. protocols evpn flexible-cross-connect-vlan-aware" || ".. .. .. .. interface $$") || "FALSE"))";
              junos:must-message "Interface must be part of this routing instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container interface-mac-limit {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              description
                "Maximum number of MAC addresses learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC addresses per interface";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable interface for interface-mac-limit";
              }
    
              leaf packet-action {
                type enumeration {
                  enum "none" {
                    value 0;
                    description
                      "Forward the packet";
                  }
                  enum "drop" {
                    value 1;
                    description
                      "Drop packets and do not learn. Default is forward";
                  }
                  enum "log" {
                    value 2;
                    description
                      "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "shutdown" {
                    value 3;
                    description
                      "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "drop-and-log" {
                    value 4;
                    description
                      "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                  }
                }
                description
                  "Action when MAC limit is reached";
              }
            }  // container interface-mac-limit
    
            leaf action-priority {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 8";
                }
              }
              description
                "Blocking priority of this interface on mac move detection";
            }
    
            list static-mac {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              key "name";
              ordered-by user;
              description
                "Static MAC addresses assigned to this interface";
              leaf name {
                junos:must "((!(".. .. .. .. .. vlan-id all") || all ".. vlan-id <*>"))";
                junos:must-message " Specify vlan-id for qualified learning ";
                type jt:mac-addr;
                description "MAC address";
              }
    
              uses apply-advanced;
    
              list vlan-id {
                junos:must "(".. .. .. .. .. vlan-id all")";
                junos:must-message "'vlan-id all' has to be configured for the bridging domain";
                key "name";
                ordered-by user;
                description
                  "VLAN ID of learning VLAN";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4094";
                    }
                  }
                  description "Learning VLAN";
                }
    
                uses apply-advanced;
              }  // list vlan-id
            }  // list static-mac
    
            container interface-mac-ip-limit {
              description
                "Maximum number of MAC+IP bindings learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC+IP bindings per interface";
              }
            }  // container interface-mac-ip-limit
    
            leaf no-mac-learning {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type empty;
              description
                "Disable dynamic MAC address learning";
            }
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            leaf persistent-learning {
              junos:must "(!("switch-options mac-table-aging-time "))";
              junos:must-message "Persistent learning can not co-exist with mac-table-aging-time";
              type empty;
              description
                "Enable persistent MAC learning on this interface";
            }
    
            container vpws-service-id {
              presence "enable vpws-service-id";
              description
                "Service-id for EVPN VPWS routing instance";
              uses apply-advanced;
    
              leaf local {
                junos:must "(unique ".. .. .. interface <*> vpws-service-id local $$")";
                junos:must-message "Unique Local SID can only be configured ";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Local EVPN VPWS service id";
              }
    
              leaf remote {
                junos:must "(unique ".. .. .. interface <*> vpws-service-id remote $$")";
                junos:must-message "Unique Remote SID can only be configured ";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Remote EVPN VPWS service id";
              }
            }  // container vpws-service-id
    
            leaf flow-label-transmit-static {
              junos:must "(".. .. .. .. instance-type evpn-vpws")";
              junos:must-message "Flow-Label static only supported for EVPN-VPWS";
              type empty;
              description
                "Push Flow Label on PW packets sent to remote PE";
            }
    
            leaf flow-label-receive-static {
              junos:must "(".. .. .. .. instance-type evpn-vpws")";
              junos:must-message "Flow-Label static only supported for EVPN-VPWS";
              type empty;
              description
                "Pop Flow Label from PW packets received from remote PE";
            }
    
            leaf protect-interface {
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be part of this routing instance";
              junos:must "(!("interfaces ${inter_name} esi"))";
              junos:must-message "ESI can not be configured for protect interface";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Name of protect interface";
            }
    
            leaf remote-site-id {
              junos:must "(!(".. .. .. .. .. l2vpn-id"))";
              junos:must-message "Remote site identifier is not valid for FEC 129 VPWS instances";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65534";
                }
              }
              description
                "Site identifier associated with this interface";
            }
    
            leaf target-attachment-identifier {
              junos:must "(".. .. source-attachment-identifier")";
              junos:must-message "Source attachment identifier configuration required for the containing site";
              junos:must "(unique ".. .. interface <*> target-attachment-identifier $$")";
              junos:must-message "All interface target attachment identifiers must be unique within a site";
              type string {
                junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$";
                junos:pattern-message "
    Use fec129 AII type 1 format with just <AC-ID> or
    fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where
    <Global-ID> is a value between 0..4294967295,
    <Prefix> is a value between 0..4294967295 or a valid IP address,
    <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1).
    e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2";
              }
              description
                "FEC 129 VPWS target attachment identifier";
            }
    
            leaf flow-label-transmit {
              junos:must "(".. .. source-attachment-identifier")";
              junos:must-message "Source attachment identifier configuration required for the containing site";
              type empty;
              description
                "Advertise capability to push Flow Label in transmit direction to remote PE";
            }
    
            leaf flow-label-receive {
              junos:must "(".. .. source-attachment-identifier")";
              junos:must-message "Source attachment identifier configuration required for the containing site";
              type empty;
              description
                "Advertise capability to pop Flow Label in receive direction to remote PE";
            }
    
            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 mtu {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "512 .. 65535";
                }
              }
              description
                "MTU to be advertised to the remote end";
            }
    
            leaf ignore-mtu-mismatch {
              type empty;
              description
                "Allow different MTU values on local and remote end";
            }
    
            choice cword {
              leaf control-word {
                type empty;
                description
                  "Adds control-word to the Layer 2 encapsulation";
              }
              leaf no-control-word {
                type empty;
                description
                  "Disables control-word to the Layer 2 encapsulation";
              }
            }  // choice cword
    
            leaf pseudowire-status-tlv {
              type empty;
              description
                "Send pseudowire status TLV";
            }
    
            container oam {
              description
                "OAM Configuration for VPN";
              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
    
            leaf community {
              type string;
              description
                "Community associated with this interface";
            }
    
            leaf description {
              type string;
              description "Text description";
            }
          }  // list interface
    
          list site {
            key "name";
            ordered-by user;
            description
              "Sites connected to this provider equipment";
            leaf name {
              type string;
              description
                "Name of Layer 2 VPN or VPLS site";
            }
    
            uses apply-advanced;
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            list mesh-group {
              key "name";
              ordered-by user;
              description
                "Mesh-groups that are part of this site";
              leaf name {
                junos:must "(".. .. .. mesh-group $$")";
                junos:must-message "Mesh-group must be configured to associate with a site";
                type string;
                description "Mesh-group name";
              }
    
              uses apply-advanced;
            }  // list mesh-group
    
            list interface {
              junos:must "(!(!((".. .. .. .. protocols vpls" || ".. .. .. .. protocols l2vpn"))))";
              junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance";
              key "name";
              ordered-by user;
              description
                "Interface that connect this site to the VPN";
              leaf name {
                junos:must "((".. .. .. .. .. interface $$" || any ".. .. .. .. .. bridge-domains <*> interface $$"))";
                junos:must-message "Interface must be part of this routing instance";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
    
              container interface-mac-limit {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
                junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
                description
                  "Maximum number of MAC addresses learned on the interface";
                uses apply-advanced;
    
                leaf limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Maximum number of MAC addresses per interface";
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable interface for interface-mac-limit";
                }
    
                leaf packet-action {
                  type enumeration {
                    enum "none" {
                      value 0;
                      description
                        "Forward the packet";
                    }
                    enum "drop" {
                      value 1;
                      description
                        "Drop packets and do not learn. Default is forward";
                    }
                    enum "log" {
                      value 2;
                      description
                        "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                    }
                    enum "shutdown" {
                      value 3;
                      description
                        "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                    }
                    enum "drop-and-log" {
                      value 4;
                      description
                        "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                    }
                  }
                  description
                    "Action when MAC limit is reached";
                }
              }  // container interface-mac-limit
    
              leaf action-priority {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
                junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 8";
                  }
                }
                description
                  "Blocking priority of this interface on mac move detection";
              }
    
              list static-mac {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
                junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
                key "name";
                ordered-by user;
                description
                  "Static MAC addresses assigned to this interface";
                leaf name {
                  junos:must "((!(".. .. .. .. .. .. vlan-id all") || all ".. vlan-id <*>"))";
                  junos:must-message " Specify vlan-id for qualified learning ";
                  type jt:mac-addr;
                  description "MAC address";
                }
    
                uses apply-advanced;
    
                list vlan-id {
                  junos:must "(".. .. .. .. .. .. vlan-id all")";
                  junos:must-message "'vlan-id all' has to be configured for the bridging domain";
                  key "name";
                  ordered-by user;
                  description
                    "VLAN ID of learning VLAN";
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 4094";
                      }
                    }
                    description "Learning VLAN";
                  }
    
                  uses apply-advanced;
                }  // list vlan-id
              }  // list static-mac
    
              container interface-mac-ip-limit {
                description
                  "Maximum number of MAC+IP bindings learned on the interface";
                uses apply-advanced;
    
                leaf limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32;
                  }
                  description
                    "Maximum number of MAC+IP bindings per interface";
                }
              }  // container interface-mac-ip-limit
    
              leaf no-mac-learning {
                junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
                junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
                type empty;
                description
                  "Disable dynamic MAC address learning";
              }
    
              leaf mac-pinning {
                type empty;
                description "Enable MAC pinning";
              }
    
              leaf persistent-learning {
                junos:must "(!("switch-options mac-table-aging-time "))";
                junos:must-message "Persistent learning can not co-exist with mac-table-aging-time";
                type empty;
                description
                  "Enable persistent MAC learning on this interface";
              }
    
              leaf remote-site-id {
                junos:must "(!(".. .. .. .. .. l2vpn-id"))";
                junos:must-message "Remote site identifier is not valid for FEC 129 VPWS instances";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65534";
                  }
                }
                description
                  "Site identifier associated with this interface";
              }
    
              leaf target-attachment-identifier {
                junos:must "(".. .. source-attachment-identifier")";
                junos:must-message "Source attachment identifier configuration required for the containing site";
                junos:must "(unique ".. .. interface <*> target-attachment-identifier $$")";
                junos:must-message "All interface target attachment identifiers must be unique within a site";
                type string {
                  junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$";
                  junos:pattern-message "
    Use fec129 AII type 1 format with just <AC-ID> or
    fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where
    <Global-ID> is a value between 0..4294967295,
    <Prefix> is a value between 0..4294967295 or a valid IP address,
    <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1).
    e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2";
                }
                description
                  "FEC 129 VPWS target attachment identifier";
              }
    
              leaf flow-label-transmit {
                junos:must "(".. .. source-attachment-identifier")";
                junos:must-message "Source attachment identifier configuration required for the containing site";
                type empty;
                description
                  "Advertise capability to push Flow Label in transmit direction to remote PE";
              }
    
              leaf flow-label-receive {
                junos:must "(".. .. source-attachment-identifier")";
                junos:must-message "Source attachment identifier configuration required for the containing site";
                type empty;
                description
                  "Advertise capability to pop Flow Label in receive direction to remote PE";
              }
    
              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 mtu {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "512 .. 65535";
                  }
                }
                description
                  "MTU to be advertised to the remote end";
              }
    
              leaf ignore-mtu-mismatch {
                type empty;
                description
                  "Allow different MTU values on local and remote end";
              }
    
              choice cword {
                leaf control-word {
                  type empty;
                  description
                    "Adds control-word to the Layer 2 encapsulation";
                }
                leaf no-control-word {
                  type empty;
                  description
                    "Disables control-word to the Layer 2 encapsulation";
                }
              }  // choice cword
    
              leaf pseudowire-status-tlv {
                type empty;
                description
                  "Send pseudowire status TLV";
              }
    
              container oam {
                description
                  "OAM Configuration for VPN";
                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
    
              leaf community {
                type string;
                description
                  "Community associated with this interface";
              }
    
              leaf description {
                type string;
                description "Text description";
              }
            }  // list interface
    
            choice site-identifier-mode {
              leaf site-identifier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65534";
                  }
                }
                description
                  "Layer 2 VPN or VPLS site identifier (unique in the VPN)";
              }
              container automatic-site-id {
                junos:must "(!(".. .. .. .. protocols l2vpn"))";
                junos:must-message "Automatic site ID is supported only for VPLS service";
                junos:must "(!(any ".. .. mesh-group <*> peer-as"))";
                junos:must-message "Automatic site cannot be configured with BGP mesh group";
                presence
                  "enable automatic-site-id";
                description
                  "Enable automatic assignment of site identifier";
                uses apply-advanced;
    
                leaf startup-wait-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 3600";
                    }
                  }
                  units "seconds";
                  description
                    "Time to wait at startup before claming a site identifier (seconds)";
                }
    
                leaf new-site-wait-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 3600";
                    }
                  }
                  units "seconds";
                  description
                    "Time to wait before claiming a site identifier";
                }
    
                leaf collision-detect-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 3600";
                    }
                  }
                  units "seconds";
                  description
                    "Time to wait for detecting a collision";
                }
    
                container reclaim-wait-time {
                  presence
                    "enable reclaim-wait-time";
                  description
                    "Time to wait for reclaiming a site identifier";
                  leaf minimum {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "Minimum wait time";
                  }
    
                  leaf maximum {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    units "milliseconds";
                    description
                      "Maximum wait time";
                  }
                }  // container reclaim-wait-time
              }  // container automatic-site-id
            }  // choice site-identifier-mode
    
            leaf source-attachment-identifier {
              junos:must "(".. .. .. .. l2vpn-id")";
              junos:must-message "Source attachment identifier only supported for FEC 129 VPWS instances";
              junos:must "(unique ".. .. site <*> source-attachment-identifier $$")";
              junos:must-message "All site source attachment identifiers must be unique within an instance";
              type string {
                junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$";
                junos:pattern-message "
    Use fec129 AII type 1 format with just <AC-ID> or
    fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where
    <Global-ID> is a value between 0..4294967295,
    <Prefix> is a value between 0..4294967295 or a valid IP address,
    <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1).
    e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2";
              }
              description
                "FEC 129 VPWS source attachment identifier";
            }
    
            leaf flow-label-transmit {
              junos:must "(".. .. .. .. l2vpn-id")";
              junos:must-message "Per-site Flow Label Config is only supported for FEC129 VPWS";
              type empty;
              description
                "Advertise capability to push Flow Label in transmit direction to remote PE";
            }
    
            leaf flow-label-receive {
              junos:must "(".. .. .. .. l2vpn-id")";
              junos:must-message "Per-site Flow Label Config is only supported for FEC129 VPWS";
              type empty;
              description
                "Advertise capability to push Flow Label in receive direction to remote PE";
            }
    
            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";
            }
    
            choice cword {
              leaf control-word {
                type empty;
                description
                  "Adds control-word to the Layer 2 encapsulation";
              }
              leaf no-control-word {
                type empty;
                description
                  "Disables control-word to the Layer 2 encapsulation";
              }
            }  // choice cword
    
            leaf pseudowire-status-tlv {
              type empty;
              description
                "Send pseudowire status TLV";
            }
    
            container oam {
              description
                "OAM Configuration for VPN";
              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
    
            leaf community {
              type string;
              description
                "Community associated with this site";
            }
    
            container multi-homing {
              junos:must "(!(".. automatic-site-id"))";
              junos:must-message "Multi-homing cannot be configured for automatic site";
              presence "enable multi-homing";
              description
                "Enable multi-homing functionality for this site";
              uses apply-advanced;
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 18000";
                  }
                }
                units "seconds";
                description
                  "Enable multi-homing non-designated forwarder hold time (seconds)";
              }
            }  // container multi-homing
    
            leaf site-preference {
              type string;
              description
                "Layer 2 VPN or VPLS site preference";
            }
    
            leaf hot-standby {
              junos:must "(!(".. site-preference primary"))";
              junos:must-message "primary site cannot be hot-standby";
              type empty;
              description
                "Keep backup pseudowire in continuous standby mode and ready for traffic forwarding";
            }
    
            leaf mtu {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "512 .. 65535";
                }
              }
              description
                "MTU to be advertised to the remote end";
            }
    
            leaf ignore-mtu-mismatch {
              type empty;
              description
                "Allow different MTU values on local and remote end";
            }
    
            container active-interface {
              description
                "Configure interface to designate as active";
              choice interface_name {
                leaf any {
                  type empty;
                  description
                    "One configured interface is designated active at random";
                }
                leaf primary {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Interface to designate as active if it is operational";
                }
              }  // choice interface_name
            }  // container active-interface
    
            leaf best-site {
              junos:must "(!(".. .. .. l2vpn"))";
              junos:must-message "'best-site' feature not supported for VPWS/BGP-L2VPN instances";
              junos:must "(!(".. .. vpls-id"))";
              junos:must-message "'best-site' feature not supported for LDP based VPLS instances";
              junos:must "(!(".. interface"))";
              junos:must-message "'interface' must not be defined when 'best-site' knob is activated";
              type empty;
              description
                "Activates best-site functionality for this instance";
            }
          }  // list site
    
          list neighbor {
            junos:must "(".. vpls-id")";
            junos:must-message "'vpls-id' must be defined";
            key "name";
            ordered-by user;
            description
              "Neighbor for this VPLS instance";
            leaf name {
              type jt:ipv4addr;
              description "Neighbor ID";
            }
    
            uses apply-advanced;
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            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 vpls";
              uses apply-advanced;
    
              leaf incoming-label {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]";
              }
    
              leaf outgoing-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "16 .. 1048575";
                  }
                }
                description
                  "VPLS outgoing static label";
              }
    
              choice cword {
                leaf control-word {
                  type empty;
                  description
                    "Adds control-word to the Layer 2 encapsulation";
                }
                leaf no-control-word {
                  type empty;
                  description
                    "Disables control-word to the Layer 2 encapsulation";
                }
              }  // choice cword
            }  // container static
    
            container associate-profile {
              description
                "Associate profile options for dynamic IFL";
              uses apply-advanced;
    
              leaf profile-name {
                type string {
                  length "1 .. 81";
                }
                description
                  "Associated profile name";
              }
    
              leaf profile-variable-set {
                type string {
                  length "1 .. 81";
                }
                description
                  "Associate dynamic variable set with the profile";
              }
            }  // container associate-profile
    
            leaf psn-tunnel-endpoint {
              type jt:ipv4addr;
              description
                "Endpoint of the transport tunnel on the remote PE";
            }
    
            leaf community {
              type string;
              description
                "Community associated with this neighbor";
            }
    
            leaf encapsulation-type {
              type enumeration {
                enum "ethernet-vlan" {
                  junos:must "(!(".. static"))";
                  junos:must-message "not supported for static vpls";
                  value 0;
                  description
                    "Ethernet VLAN encapsulation";
                }
                enum "ethernet" {
                  junos:must "(!(".. static"))";
                  junos:must-message "not supported for static vpls";
                  value 1;
                  description
                    "Ethernet encapsulation";
                }
              }
              description
                "Encapsulation type for VPN";
            }
    
            leaf ignore-encapsulation-mismatch {
              junos:must "(!(".. static"))";
              junos:must-message "not supported for static vpls";
              type empty;
              description
                "Allow different encapsulation types on local and remote end";
            }
    
            container pseudowire-status-tlv {
              junos:must "(!(".. static"))";
              junos:must-message "not supported for static vpls";
              presence
                "enable pseudowire-status-tlv";
              description
                "Send pseudowire status TLV";
              uses apply-advanced;
    
              leaf hot-standby-vc-on {
                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
                "Pseudowire switchover delay ";
            }
    
            container revert-time {
              presence "enable revert-time";
              description
                "Enable pseudowire redundancy reversion (seconds)";
              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 Neighbor must be static";
                presence "enable static";
                description
                  "Configuration of static vpls";
                uses apply-advanced;
    
                leaf incoming-label {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]";
                }
    
                leaf outgoing-label {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "16 .. 1048575";
                    }
                  }
                  description
                    "VPLS outgoing static label";
                }
              }  // container static
    
              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 "((!(".. .. .. control-word") && !(".. .. .. .. control-word")))";
                junos:must-message "Hot-standby cannot be configured while having control-word enabled";
                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
          }  // list neighbor
    
          list mesh-group {
            key "name";
            description
              "Mesh-group under this VPLS instance";
            leaf name {
              type string {
                junos:posix-pattern "^.{1,32}$";
                junos:pattern-message "The mesh-group name should be between 1 and 32 characters";
              }
              description "Mesh-group name";
            }
    
            uses apply-advanced;
    
            leaf local-switching {
              type empty;
              description
                "Allow local-switching within interfaces in this mesh-group";
            }
    
            list neighbor {
              junos:must "(!(".. peer-as"))";
              junos:must-message "'peer-as' and 'neighbor' must not be defined in the same mesh-group";
              junos:must "(!(".. interface"))";
              junos:must-message "'interface' and 'neighbor' must not be defined in the same mesh-group";
              junos:must "((".. vpls-id" || ".. .. vpls-id"))";
              junos:must-message "'vpls-id' must be defined";
              key "name";
              ordered-by user;
              description
                "Neighbor belonging to this mesh-group";
              leaf name {
                type jt:ipv4addr;
                description "Neighbor ID";
              }
    
              uses apply-advanced;
    
              leaf mac-pinning {
                type empty;
                description "Enable MAC pinning";
              }
    
              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 vpls";
                uses apply-advanced;
    
                leaf incoming-label {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]";
                }
    
                leaf outgoing-label {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "16 .. 1048575";
                    }
                  }
                  description
                    "VPLS outgoing static label";
                }
    
                choice cword {
                  leaf control-word {
                    type empty;
                    description
                      "Adds control-word to the Layer 2 encapsulation";
                  }
                  leaf no-control-word {
                    type empty;
                    description
                      "Disables control-word to the Layer 2 encapsulation";
                  }
                }  // choice cword
              }  // container static
    
              container associate-profile {
                description
                  "Associate profile options for dynamic IFL";
                uses apply-advanced;
    
                leaf profile-name {
                  type string {
                    length "1 .. 81";
                  }
                  description
                    "Associated profile name";
                }
    
                leaf profile-variable-set {
                  type string {
                    length "1 .. 81";
                  }
                  description
                    "Associate dynamic variable set with the profile";
                }
              }  // container associate-profile
    
              leaf psn-tunnel-endpoint {
                type jt:ipv4addr;
                description
                  "Endpoint of the transport tunnel on the remote PE";
              }
    
              leaf community {
                type string;
                description
                  "Community associated with this neighbor";
              }
    
              leaf encapsulation-type {
                type enumeration {
                  enum "ethernet-vlan" {
                    junos:must "(!(".. static"))";
                    junos:must-message "not supported for static vpls";
                    value 0;
                    description
                      "Ethernet VLAN encapsulation";
                  }
                  enum "ethernet" {
                    junos:must "(!(".. static"))";
                    junos:must-message "not supported for static vpls";
                    value 1;
                    description
                      "Ethernet encapsulation";
                  }
                }
                description
                  "Encapsulation type for VPN";
              }
    
              leaf ignore-encapsulation-mismatch {
                junos:must "(!(".. static"))";
                junos:must-message "not supported for static vpls";
                type empty;
                description
                  "Allow different encapsulation types on local and remote end";
              }
    
              container pseudowire-status-tlv {
                junos:must "(!(".. static"))";
                junos:must-message "not supported for static vpls";
                presence
                  "enable pseudowire-status-tlv";
                description
                  "Send pseudowire status TLV";
                uses apply-advanced;
    
                leaf hot-standby-vc-on {
                  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
                  "Pseudowire switchover delay ";
              }
    
              container revert-time {
                presence "enable revert-time";
                description
                  "Enable pseudowire redundancy reversion (seconds)";
                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 Neighbor must be static";
                  presence "enable static";
                  description
                    "Configuration of static vpls";
                  uses apply-advanced;
    
                  leaf incoming-label {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]";
                  }
    
                  leaf outgoing-label {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 1048575";
                      }
                    }
                    description
                      "VPLS outgoing static label";
                  }
                }  // container static
    
                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 "((!(".. .. .. control-word") && !(".. .. .. .. control-word")))";
                  junos:must-message "Hot-standby cannot be configured while having control-word enabled";
                  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
    
              leaf-list vpls-id-list {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                ordered-by user;
                description
                  "LDP VPLS Identifier list for this neighbor";
              }
            }  // list neighbor
    
            list interface {
              key "name";
              description
                "Interfaces belonging to this flood group";
              leaf name {
                junos:must "(".. .. .. .. .. interface $$")";
                junos:must-message "Interface must be part of this VPLS routing instance";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
            }  // list interface
    
            container associate-profile {
              description
                "Associate profile options for dynamic IFL";
              uses apply-advanced;
    
              leaf profile-name {
                type string {
                  length "1 .. 81";
                }
                description
                  "Associated profile name";
              }
    
              leaf profile-variable-set {
                type string {
                  length "1 .. 81";
                }
                description
                  "Associate dynamic variable set with the profile";
              }
            }  // container associate-profile
    
            choice peer-as-choice {
              container peer-as {
                description
                  "Autonomous system of the peer";
                uses apply-advanced;
    
                leaf all {
                  type empty;
                  description
                    "Include peers from all autonomous systems";
                }
              }  // container peer-as
            }  // choice peer-as-choice
    
            leaf vpls-id {
              junos:must "(!(any ".. .. mesh-group <*> route-distinguisher"))";
              junos:must-message "Does not support FEC129 and FEC128 LDP VPLS mesh-group under the same instance";
              junos:must "(!(".. interface"))";
              junos:must-message "'vpls-id' must not be defined when specifying 'interface' in a mesh-group";
              type string;
              description
                "LDP VPLS Identifier for this mesh-group";
            }
    
            container mac-flush {
              presence "enable mac-flush";
              description
                "Enables mac-flush processing";
              uses apply-advanced;
    
              leaf any-interface {
                junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))";
                junos:must-message "'any-interface' can be configured only for LDP VPLS";
                type empty;
                description
                  "Send mac-flush when any AC interface goes down";
              }
    
              leaf any-spoke {
                junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))";
                junos:must-message "'any-spoke' can be configured only for LDP VPLS";
                type empty;
                description
                  "Send mac-flush when any spoke pseudo wire goes down";
              }
    
              leaf propagate {
                junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))";
                junos:must-message "'propagate' can be configured only for LDP VPLS";
                type empty;
                description
                  "Propagate mac-flush to the core";
              }
            }  // container mac-flush
    
            container route-distinguisher {
              junos:must "(!(any ".. .. mesh-group <*> vpls-id"))";
              junos:must-message "Does not support FEC129 and FEC128 LDP VPLS mesh-group under the same instance";
              description
                "Route distinguisher for this mesh-group";
              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
          }  // list mesh-group
    
          container proxy-mac {
            junos:must "(".. .. .. instance-type evpn")";
            junos:must-message "Applicable to instance-type evpn only";
            description "Proxy MAC settings";
            uses apply-advanced;
    
            leaf irb {
              junos:must "(!(".. .. no-arp-suppression"))";
              junos:must-message "Proxy MAC is not supported with no-arp-suppression";
              junos:must "(((".. .. .. .. l3-interface" || ".. .. .. .. routing-interface") && !(".. proxy-mac-address")))";
              junos:must-message "Proxy MAC in IRB mode should have routing-interface configured";
              type empty;
              description
                "Reply with virtual-gateway MAC or IRB MAC";
            }
    
            leaf proxy-mac-address {
              junos:must "(!(".. .. no-arp-suppression"))";
              junos:must-message "Proxy MAC is not supported with no-arp-suppression";
              junos:must "((!(".. .. .. .. routing-interface") && (!(".. .. .. .. l3-interface") && !(".. irb"))))";
              junos:must-message "Proxy MAC with specified MAC should not have routing-interface configured";
              type jt:mac-unicast;
              description
                "Reply with configured MAC for all requests";
            }
          }  // container proxy-mac
    
          leaf service-type {
            type enumeration {
              enum "single" {
                value 0;
                description
                  "Only one service for the virtual-switch";
              }
            }
            description
              "Specify service type for vpls";
          }
    
          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)";
          }
    
          leaf designated-forwarder-preference-least {
            type empty;
            description
              "Use least preference in DF election";
          }
    
          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";
          }
    
          leaf default-gateway {
            type enumeration {
              enum "advertise" {
                value 0;
                description
                  "Advertise IRB MACs with default gateway community";
              }
              enum "no-gateway-community" {
                value 1;
                description
                  "Advertise IRB MACs without default gateway community";
              }
              enum "do-not-advertise" {
                value 2;
                description
                  "Do not advertise IRB MACs";
              }
            }
            description "Default gateway mode";
          }
    
          container duplicate-mac-detection {
            description
              "Duplicate MAC detection settings";
            uses apply-advanced;
    
            leaf detection-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 20";
                }
              }
              description
                "Number of moves to trigger duplicate MAC detection";
            }
    
            leaf detection-window {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 600";
                }
              }
              units "seconds";
              description
                "Time window for detection of duplicate MACs";
            }
    
            leaf auto-recovery-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 360";
                }
              }
              units "minutes";
              description
                "Automatically unblock duplicate MACs after a time delay";
            }
          }  // container duplicate-mac-detection
    
          choice extended-attributes {
            leaf-list extended-vlan-list {
              junos:must "(!((".. .. .. .. .. chassis satellite-management redundancy-groups" && !(".. mclag"))))";
              junos:must-message "Need to configure 'protocols evpn mclag' when evpn is configured with mclag.";
              junos:must "(!(".. pbb-evpn-core"))";
              junos:must-message "Extended VLAN list can't be configured in the PBB EVPN";
              junos:must "(!(".. encapsulation vxlan"))";
              junos:must-message "Extended VLAN list cannot coexist with encapsulation vxlan option";
              junos:must "(".. .. .. instance-type virtual-switch")";
              junos:must-message "Extended VLAN list can only be configured in a virtual switch instance";
              type jt:vlan-range;
              description
                "List of VLAN identifiers that are to be EVPN extended";
            }
            leaf-list extended-vni-list {
              junos:must "(!((".. .. .. .. .. chassis satellite-management redundancy-groups" && !(".. mclag"))))";
              junos:must-message "Need to configure 'protocols evpn mclag' when evpn is configured with mclag.";
              junos:must "(".. encapsulation vxlan")";
              junos:must-message "Extended VNI list can only be configured with encapsulation vxlan";
              junos:must "((".. .. .. instance-type virtual-switch" || ".. .. .. instance-type mac-vrf"))";
              junos:must-message "Extended VNI list can only be configured in a virtual switch instance";
              type string;
              description
                "List of VNI identifiers (1..16777214) or all, that are to be EVPN extended";
            }
            leaf-list extended-isid-list {
              junos:must "(".. pbb-evpn-core")";
              junos:must-message "Extended ISID list can only be configured in the PBB EVPN";
              junos:must "(".. .. .. instance-type virtual-switch")";
              junos:must-message "Extended ISID list can only be configured in a virtual switch instance";
              type string;
              description
                "Configure list of isids or all for extending to PBB EVPN";
            }
          }  // choice extended-attributes
    
          container evi-options {
            junos:must "(".. extended-isid-list")";
            junos:must-message "Extended-isid-list must be configured";
            description "EVI options";
            uses juniper-protocols-evi-options;
          }  // container evi-options
    
          leaf p2mp-bud-support {
            type empty;
            description
              "Enable EVPN to act as P2MP transit and egress PE (bud)";
          }
    
          container remote-ip-host-routes {
            junos:must "(!(".. encapsulation mpls-inet6"))";
            junos:must-message "VMTO not supported with encapsulation mpls-inet6";
            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 pbb-evpn-core {
            junos:must "(!(".. encapsulation mpls-inet6"))";
            junos:must-message "PBB not supported with encapsulation mpls-inet6";
            junos:must "(".. .. .. instance-type virtual-switch")";
            junos:must-message "pbb-evpn-core can only be configured in a virtual switch instance";
            junos:must "("chassis network-services enhanced-ip")";
            junos:must-message "PBB EVPN supported only with enhanced-ip mode";
            type empty;
            description
              "Configure PBB EVPN core";
          }
    
          leaf label-allocation {
            junos:must "(!(".. encapsulation vxlan"))";
            junos:must-message "label-allocation cannot coexist with encapsulation vxlan option";
            type enumeration {
              enum "per-instance" {
                value 0;
                description
                  "Allocate one label for the entire instance";
              }
            }
            description
              "Label allocation policy";
          }
    
          leaf evpn-etree {
            junos:must "(!(".. encapsulation mpls-inet6"))";
            junos:must-message "Not supported for encapsulation mpls-inet6";
            type empty;
            description "Evpn etree mode";
          }
    
          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
    
          container vrf-target {
            junos:must "((".. extended-isid-list" || ".. extended-vlan-list"))";
            junos:must-message "Extended-isid-list or extended-vlan-list must be configured";
            description
              "VRF 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";
            }
          }  // container vrf-target
    
          container interconnect {
            description "Interconnect";
            uses juniper-protocols-evpn-interconnect;
          }  // container interconnect
    
          leaf pmsi-tunnel-endpoint {
            junos:must "(!(".. pbb-evpn-core"))";
            junos:must-message "Not Supported for PBB EVPN";
            junos:must "(!(".. encapsulation mpls-inet6"))";
            junos:must-message "Not supported for encapsulation mpls-inet6";
            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 pmsi-tunnel-endpoint-inet6 {
            junos:must "(".. encapsulation mpls-inet6")";
            junos:must-message "Supported for mpls-inet6 encapsulation only";
            junos:must "(!(".. .. .. instance-type evpn-vpws"))";
            junos:must-message "Not Applicable for instance-type EVPN-VPWS";
            type jt:ipv6addr;
            description
              "IM IR PMSI IPv6 tunnel Endpoint for remote PE";
          }
    
          leaf normalization {
            junos:must "(!(".. encapsulation vxlan"))";
            junos:must-message "Not applicable for EVPN-VXLAN encapsulation";
            junos:must "((".. .. .. instance-type mac-vrf" && ".. .. .. service-type vlan-based"))";
            junos:must-message "Applicable for mac-vrf vlan-based service only";
            type empty;
            description
              "Enable vlan id normalization for interfaces";
          }
    
          leaf smet-etag-carry-vid {
            junos:must "((".. .. .. instance-type mac-vrf" && ".. .. .. service-type vlan-based"))";
            junos:must-message "Applicable for mac-vrf vlan-based service only";
            type empty;
            description
              "SMET Type 6,7 and 8 Routes to carry vlan id in Ethernet Tag field";
          }
    
          container irb-symmetric-routing {
            junos:must "(".. .. .. instance-type vrf")";
            junos:must-message "EVPN T-2 symmetric-routing must be configured with instance-type vrf";
            description
              "Enable EVPN T-2 symmtric routing";
            uses apply-advanced;
    
            leaf vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777214";
                }
              }
              description
                "VXLAN network identifier used for T-2 Symmetric Routing IP prefixes";
            }
          }  // container irb-symmetric-routing
    
          container ip-prefix-routes {
            junos:must "(".. .. .. instance-type vrf")";
            junos:must-message "ip-prefix-routes must be configured with instance-type vrf";
            presence "enable ip-prefix-routes";
            description
              "Advertise IP prefixes through EVPN";
            uses apply-advanced;
    
            leaf advertise {
              type enumeration {
                enum "gateway-address" {
                  junos:must "(".. gateway-interface")";
                  junos:must-message "advertise gateway-address must be configured with gateway-interface";
                  value 0;
                  description
                    "Advertise a gateway address in exported IP prefix routes";
                }
                enum "direct-nexthop" {
                  junos:must "((".. encapsulation vxlan" || ".. .. .. .. vrf-table-label"))";
                  junos:must-message "vrf-table-label must be used unless encapsulation vxlan is configured";
                  value 1;
                  description
                    "Advertise a direct nexthop in exported IP prefix routes";
                }
              }
              description
                "Advertisement attributes for IP prefixes";
            }
    
            leaf gateway-interface {
              junos:must "(".. advertise gateway-address")";
              junos:must-message "gateway-interface must be configured with advertise gateway-address";
              junos:must "(".. .. .. .. interface $$")";
              junos:must-message "Interface must configured in this routing instance";
              junos:must "("interfaces $$ family inet")";
              junos:must-message "Family inet must be defined";
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be defined";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Gateway interface used when gateway address is advertised";
            }
    
            leaf encapsulation {
              type enumeration {
                enum "mpls" {
                  junos:must "(".. advertise direct-nexthop")";
                  junos:must-message "encapsulation must be configured with advertise direct-nexthop";
                  value 0;
                  description
                    "MPLS encapsulation";
                }
                enum "vxlan" {
                  junos:must "(".. vni")";
                  junos:must-message "encapsulation vxlan must be configured with vni";
                  junos:must "((".. advertise direct-nexthop" || ".. .. irb-symmetric-routing"))";
                  junos:must-message "encapsulation must be configured with advertise direct-nexthop or irb-symmetric-routing";
                  value 1;
                  description
                    "VXLAN encapsulation";
                }
              }
              description
                "Encapsulation used for IP prefixes";
            }
    
            leaf vni {
              junos:must "(".. encapsulation vxlan")";
              junos:must-message "vni must be configured with encapsulation vxlan";
              junos:must "((".. advertise direct-nexthop" || ".. .. irb-symmetric-routing"))";
              junos:must-message "vni must be configured with advertise direct-nexthop or irb-symmetric-routing";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777214";
                }
              }
              description
                "VXLAN network identifier used for IP prefixes";
            }
    
            leaf-list import {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Policy to control import of IP prefixes from EVPN";
            }
    
            leaf-list export {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Policy to control export of IP prefixes through EVPN";
            }
    
            container route-attributes {
              description
                "Route Attribute Import Export Option";
              uses apply-advanced;
    
              container as-path {
                description "AS-PATH Attribute";
                uses apply-advanced;
    
                leaf import-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit as-path from EVPN routes to IP routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inehrit as-path from EVPN routes to IP routes";
                    }
                  }
                  description
                    "AS-PATH Attribute Inherit Option on Import";
                }
    
                leaf export-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit as-path from IP routes to EVPN routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inherit as-path from IP routes to EVPN routes";
                    }
                  }
                  description
                    "AS-PATH Attribute Inherit Option on Export";
                }
              }  // container as-path
    
              container preference {
                description
                  "Preference Attribute";
                uses apply-advanced;
    
                leaf import-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit preference from EVPN routes to IP routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inherit preference from EVPN routes to EVPN routes";
                    }
                  }
                  description
                    "Preference Attribute Inerit Option on Import";
                }
    
                leaf export-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit preference from IP routes to EVPN routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inherit preference from IP routes to EVPN routes";
                    }
                  }
                  description
                    "Preference Attribute Inherit Option on Export";
                }
              }  // container preference
    
              container community {
                description
                  "Community Attribute";
                uses apply-advanced;
    
                leaf import-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit community from EVPN routes to IP routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inherit community from EVPN routes to IP routes";
                    }
                  }
                  description
                    "Community Attribute Inherit Option on Import";
                }
    
                leaf export-action {
                  type enumeration {
                    enum "allow" {
                      value 0;
                      description
                        "Inherit community from IP routes to EVPN routes";
                    }
                    enum "skip" {
                      value 1;
                      description
                        "Donot inherit community from IP route to EVPN routes";
                    }
                  }
                  description
                    "Community Attribute Inherit Option on Export";
                }
              }  // container community
            }  // container route-attributes
          }  // container ip-prefix-routes
    
          leaf igmp-id {
            junos:must "(!(".. encapsulation mpls-inet6"))";
            junos:must-message "IGMP snooping not supported with encapsulation mpls-inet6";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "EVPN IGMP Identifier value";
          }
    
          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 oism {
            junos:must "(".. oism supplemental-bridge-domain-irb")";
            junos:must-message "OISM must be configured with Supplemental Bridge Domain";
            junos:must "(".. .. .. instance-type vrf")";
            junos:must-message "oism must be configured with instance-type vrf";
            description
              "EVPN Multicast OISM features";
            uses apply-advanced;
    
            leaf supplemental-bridge-domain-irb {
              junos:must "(".. .. .. .. interface $$")";
              junos:must-message "Interface must configured in this routing instance";
              junos:must "("interfaces $$")";
              junos:must-message "Interface must be defined";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "OISM SBD irb interface address";
            }
    
            leaf originate-smet-on-revenue-vlan-too {
              type empty;
              description
                "Originate smet route on revenue vlan too";
            }
    
            container pim-evpn-gateway {
              presence "enable pim-evpn-gateway";
              description
                "Configure PIM EVPN Gateway PEG parameters";
              uses apply-advanced;
    
              list external-irb {
                key "name";
                ordered-by user;
                description
                  "List of IRBs for external connectivity";
                leaf name {
                  junos:must "(".. .. .. .. .. .. interface $$")";
                  junos:must-message "Interface must be configured in this instance";
                  junos:must "("interfaces $$")";
                  junos:must-message "Interface must be defined";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "External vlan interface name";
                }
    
                uses apply-advanced;
              }  // list external-irb
            }  // container pim-evpn-gateway
          }  // container oism
    
          choice flexible-cross-connect-type {
            leaf flexible-cross-connect-vlan-aware {
              junos:must "(!(".. encapsulation mpls-inet6"))";
              junos:must-message "EVPN flexible cross-connect not supported with encapsulation mpls-inet6";
              junos:must "(!(".. flexible-cross-connect-vlan-unaware"))";
              junos:must-message "VPWS Instance can support either vlan aware or unaware service";
              junos:must "(".. .. .. instance-type evpn-vpws")";
              junos:must-message "instance-type evpn-vpws must be configured";
              type empty;
              description
                "Enable EVPN flexible cross-connect VLAN aware Service";
            }
            leaf flexible-cross-connect-vlan-unaware {
              junos:must "(!(".. flexible-cross-connect-vlan-aware"))";
              junos:must-message "VPWS Instance can support either vlan aware or unaware service";
              junos:must "(!(".. encapsulation mpls-inet6"))";
              junos:must-message "EVPN flexible cross-connect not supported with encapsulation mpls-inet6";
              junos:must "(".. .. .. instance-type evpn-vpws")";
              junos:must-message "instance-type evpn-vpws must be configured";
              type empty;
              description
                "Enable EVPN flexible cross-connect VLAN unaware Service";
            }
          }  // choice flexible-cross-connect-type
    
          leaf auto-service-id {
            junos:must "(".. flexible-cross-connect-vlan-aware")";
            junos:must-message "flexible-cross-connect-vlan-aware must be configured";
            junos:must "(".. .. .. instance-type evpn-vpws")";
            junos:must-message "instance-type evpn-vpws must be configured";
            type empty;
            description
              "Enable auto-derivation of VPWS service instance identifier";
          }
    
          leaf hot-standby-on {
            junos:must "(".. .. .. instance-type evpn-vpws")";
            junos:must-message "instance-type evpn-vpws must be configured";
            type empty;
            description
              "Activate evpn vpws upon becoming DF";
          }
    
          list group {
            junos:must "(".. flexible-cross-connect-vlan-unaware")";
            junos:must-message "flexible-cross-connect-vlan-unaware must be configured";
            junos:must "(".. .. .. instance-type evpn-vpws")";
            junos:must-message "instance-type evpn-vpws must be configured";
            key "name";
            ordered-by user;
            description
              "Enable EVPN flexible cross-connect VLAN unaware Service";
            leaf name {
              type string;
              description
                "Group name to group vlan unaware cross connects";
            }
    
            uses apply-advanced;
    
            container esi {
              presence "enable esi";
              description
                "ESI configuration to group vlan unaware cross connects";
              uses apply-advanced;
    
              leaf identifier {
                type jt:esi;
                description
                  "ESI value for grouping of vlan unaware cross connects";
              }
            }  // container esi
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Name of the  interface part of vlan unaware fxc";
              leaf name {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Interface name";
              }
    
              uses apply-advanced;
            }  // list interface
    
            container service-id {
              presence "enable service-id";
              description
                "Service-id for vlan unaware cross connects for  EVPN VPWS";
              uses apply-advanced;
    
              leaf local {
                junos:must "(unique ".. .. group <*> service-id local $$")";
                junos:must-message "Unique Local SID can only be configured ";
                junos:must "(unique ".. .. interface <*> vpws-service-id local $$")";
                junos:must-message "Unique Local SID can only be configured ";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Local service id for vlan unaware service";
              }
    
              leaf remote {
                junos:must "(unique ".. .. group <*> service-id remote $$")";
                junos:must-message "Unique Remote SID can only be configured ";
                junos:must "(unique ".. .. interface <*> vpws-service-id remote $$")";
                junos:must-message "Unique Remote SID can only be configured ";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16777215";
                  }
                }
                description
                  "Remote service id for vlan unaware service";
              }
            }  // container service-id
          }  // list group
    
          container vni-options {
            junos:must "(".. .. .. vrf-target")";
            junos:must-message "vrf-target must be configured";
            junos:must "((".. extended-vni-list" || ".. .. .. instance-type mac-vrf"))";
            junos:must-message "Extended-vni-list must be configured for non mac-vrf instance";
            junos:must "(".. encapsulation vxlan")";
            junos:must-message "encapsulation vxlan must be configured";
            description "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
          }  // container vni-options
    
          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 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 control-word {
            type empty;
            description
              "Add control word to the Layer 2 encapsulation";
          }
    
          leaf no-control-word {
            type empty;
            description
              "Disables control word on the Layer 2 encapsulation";
          }
    
          leaf site-range {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65534";
              }
            }
            description
              "Maximum site identifier in this VPLS domain";
          }
    
          leaf label-block-size {
            type enumeration {
              enum "2" {
                value 0;
                description
                  "Label block size of 2";
              }
              enum "4" {
                value 1;
                description
                  "Label block size of 4";
              }
              enum "8" {
                value 2;
                description
                  "Label block size of 8";
              }
              enum "16" {
                value 3;
                description
                  "Label block size of 16";
              }
            }
            description
              "Label block size for this VPLS instance";
          }
    
          choice tunnel-services-choice {
            container tunnel-services {
              description
                "Use tunnel services for this VPLS instance";
              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 this VPLS instance";
              }
    
              leaf primary {
                type union {
                  type jt:interface-device;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Primary tunnel services device to use for VPLS instance";
              }
            }  // container tunnel-services
            leaf no-tunnel-services {
              type empty;
              description
                "Do not use tunnel services for this VPLS instance";
            }
          }  // choice tunnel-services-choice
    
          leaf community {
            type string;
            description
              "Community associated with this VPLS instance";
          }
    
          leaf vpls-id {
            type string;
            description
              "Identifier for this VPLS instance";
          }
    
          leaf mtu {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "512 .. 65535";
              }
            }
            description
              "MTU to be advertised to the remote end";
          }
    
          leaf ignore-mtu-mismatch {
            type empty;
            description
              "Allow different MTU values on local and remote end";
          }
    
          container mac-flush {
            presence "enable mac-flush";
            description
              "Enables mac-flush processing";
            uses apply-advanced;
    
            leaf any-interface {
              junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))";
              junos:must-message "'any-interface' can be configured only for LDP VPLS";
              type empty;
              description
                "Send mac-flush when any AC interface goes down";
            }
    
            leaf any-spoke {
              junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))";
              junos:must-message "'any-spoke' can be configured only for LDP VPLS";
              type empty;
              description
                "Send mac-flush when any spoke pseudo wire goes down";
            }
    
            leaf propagate {
              junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))";
              junos:must-message "'propagate' can be configured only for LDP VPLS";
              type empty;
              description
                "Propagate mac-flush to the core";
            }
          }  // container mac-flush
    
          leaf ignore-encapsulation-mismatch {
            type empty;
            description
              "Allow different encapsulation types on local and remote end";
          }
    
          leaf pseudowire-status-tlv {
            type empty;
            description
              "Send pseudowire status TLV";
          }
    
          leaf flow-label-transmit {
            type empty;
            description
              "Advertise capability to push Flow Label in transmit direction to remote PE";
          }
    
          leaf flow-label-receive {
            type empty;
            description
              "Advertise capability to pop Flow Label in receive direction to remote PE";
          }
    
          leaf flow-label-transmit-static {
            junos:must "((".. vpls-id" || (".. .. .. l2vpn-id" || (".. .. .. instance-type evpn-vpws" || (".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))))";
            junos:must-message "Flow-Label static only supported for FEC128 or FEC129 VPLS, EVPN, Virtual-switch or VPWS";
            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-static {
            junos:must "((".. vpls-id" || (".. .. .. l2vpn-id" || (".. .. .. instance-type evpn-vpws" || (".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))))";
            junos:must-message "Flow-Label static only supported for FEC128 or FEC129 VPLS, EVPN, Virtual-switch or VPWS";
            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";
          }
    
          container associate-profile {
            description
              "Associate profile options for dynamic IFL";
            uses apply-advanced;
    
            leaf profile-name {
              type string {
                length "1 .. 81";
              }
              description
                "Associated profile name";
            }
    
            leaf profile-variable-set {
              type string {
                length "1 .. 81";
              }
              description
                "Associate dynamic variable set with the profile";
            }
          }  // container associate-profile
    
          leaf connectivity-type {
            type enumeration {
              enum "ce" {
                value 0;
                description
                  "CE interface is required";
              }
              enum "irb" {
                value 1;
                description
                  "IRB interface is sufficient";
              }
              enum "permanent" {
                value 2;
                description
                  "Pseudowire permanently up";
              }
            }
            description
              "Specify type of interface sufficient to bring vpls connection up";
          }
    
          list import-labeled-routes {
            junos:must "(!(".. neighbor"))";
            junos:must-message "not supported for static vpls";
            key "name";
            ordered-by user;
            description
              "Import ingress label route to instance.mpls.0 from mpls.0";
            leaf name {
              junos:must "("routing-instances $$ protocols mpls")";
              junos:must-message "protocols MPLS must be configured on routing-instance to import the labeled routes";
              junos:must "("routing-instances $$ instance-type virtual-router")";
              junos:must-message "Ingress labelled route can be imported only to routing-instance type virtual-router";
              junos:must "("routing-instances $$")";
              junos:must-message "Referenced routing instance must be defined";
              type string;
              description
                "Routing instance name where label route has to be imported";
            }
          }  // list import-labeled-routes
    
          container multi-homing {
            description
              "Multi-homing configuration for FEC129 VPLS";
            uses apply-advanced;
    
            leaf peer-active {
              type empty;
              description
                "Keep CE interfaces in up state when all BGP peers go down";
            }
    
            list site {
              key "name";
              description
                "Sites connected to this provider equipment";
              leaf name {
                type string;
                description
                  "Name of Layer 2 VPN or VPLS site";
              }
    
              uses apply-advanced;
    
              leaf identifier {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65534";
                  }
                }
                description
                  "Layer 2 VPN or VPLS multi-homing identifier";
              }
    
              leaf preference {
                type string;
                description
                  "Layer 2 VPN or VPLS multi-homing preference";
              }
    
              container active-interface {
                description
                  "Configure interface to designate as active";
                uses apply-advanced;
    
                choice interface_name {
                  leaf any {
                    type empty;
                    description
                      "One configured interface is designated active at random";
                  }
                  leaf primary {
                    junos:must "(".. .. .. .. .. .. interface $$")";
                    junos:must-message "Interface must be part of this VPLS routing instance";
                    type union {
                      type jt:interface-name;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Interface to designate as active if it is operational";
                  }
                }  // choice interface_name
              }  // container active-interface
    
              list interface {
                key "name";
                ordered-by user;
                description
                  "Interface that connects this site to the VPN";
                leaf name {
                  junos:must "(".. .. .. .. .. .. interface $$")";
                  junos:must-message "Interface must be part of this VPLS routing instance";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                leaf preference {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Layer 2 VPN or VPLS multi-homing preference for the interface";
                }
              }  // list interface
    
              leaf peer-active {
                type empty;
                description
                  "Keep CE interfaces in up state when all BGP peers go down";
              }
            }  // list site
          }  // container multi-homing
        }  // grouping juniper-protocols-l2vpn
    
        grouping juniper-protocols-evi-options {
          uses apply-advanced;
    
          list isid {
            key "name";
            description "Per-evi options";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type int32 {
                  range "256 .. 16777214";
                }
              }
            }
    
            uses apply-advanced;
    
            container vrf-target {
              description
                "VRF 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";
              }
            }  // container vrf-target
          }  // list isid
        }  // grouping juniper-protocols-evi-options
    
        grouping juniper-protocols-evpn-interconnect {
          description
            "Interconnect configuration for the routing instance";
          uses apply-advanced;
    
          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-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-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 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 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 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 .. 64";
                }
              }
            }
    
            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-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-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
          }  // 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-pim-snooping {
          description "PIM snooping options";
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for PIM 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 PIM packets";
                  }
                  enum "hello" {
                    value 1;
                    description
                      "Trace hello packets";
                  }
                  enum "join" {
                    value 2;
                    description
                      "Trace join messages";
                  }
                  enum "prune" {
                    value 3;
                    description
                      "Trace prune messages";
                  }
                  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 no-dr-flood {
            type empty;
            description
              "Disable default flooding of multicast data on the PIM designated router port";
          }
    
          list vlan {
            key "name";
            ordered-by user;
            description "Vlan options";
            leaf name {
              junos:must "(".. .. .. .. 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 no-dr-flood {
              type empty;
              description
                "Disable default flooding of multicast data on the PIM DR port";
            }
          }  // list vlan
        }  // grouping juniper-protocols-pim-snooping
    
        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-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 juniper-ri-protocols-bfd {
          uses apply-advanced;
    
          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
        }  // grouping juniper-ri-protocols-bfd
    
        grouping juniper-ri-protocols-igmp-snooping {
          description "IGMP snooping options";
          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 "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: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 learn-pim-router {
            type empty;
            description
              "Learn PIM router interfaces from PIM hellos";
          }
    
          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 {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "With qualified-learning source-address should be configured under Vlan options";
              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 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 "(".. .. .. .. interface $$")";
              junos:must-message "interface options can be specified for the interfaces in the routing-instance";
              junos:must "(!(".. .. .. .. 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 {
              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
    
          list pseudowire-remote-address {
            junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
            junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
            key "name";
            ordered-by user;
            description
              "Pseudowire interface options for IGMP";
            leaf name {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan";
              type jt:ipv4addr;
              description
                "Pseudowire endpoint address";
            }
    
            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";
            }
          }  // list pseudowire-remote-address
    
          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";
            }
    
            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 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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for IGMP";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
          }  // list qualified-vlan
    
          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";
              type string {
                length "1 .. 64";
              }
              description "VLAN name";
            }
    
            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";
            }
    
            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 {
                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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for IGMP";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
    
            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";
              }
    
              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 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
    
              list pseudowire-remote-address {
                junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))";
                junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
                key "name";
                ordered-by user;
                description
                  "Pseudowire interface options for IGMP";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Pseudowire endpoint address";
                }
    
                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";
                }
              }  // list pseudowire-remote-address
            }  // list qualified-vlan
          }  // list vlan
        }  // grouping juniper-ri-protocols-igmp-snooping
    
        grouping juniper-ri-protocols-mld-snooping {
          description "MLD snooping options";
          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 (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";
          }
    
          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";
          }
    
          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 {
              junos:must "(!(".. .. .. .. 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";
            }
    
            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 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 "(".. .. .. .. interface $$")";
              junos:must-message "interface options can be specified for the interfaces in the routing-instance";
              junos:must "(!(".. .. .. .. 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 {
              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
    
          list pseudowire-remote-address {
            junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
            junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
            key "name";
            ordered-by user;
            description
              "Pseudowire interface options for MLD";
            leaf name {
              junos:must "(!(".. .. .. .. vlan-id all"))";
              junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan";
              type jt:ipv4addr;
              description
                "Pseudowire endpoint address";
            }
    
            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";
            }
          }  // list pseudowire-remote-address
    
          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";
            }
    
            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 {
                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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for MLD";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
          }  // list qualified-vlan
    
          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";
              type string {
                length "1 .. 64";
              }
              description
                "Vlan of the bridge-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";
            }
    
            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 {
                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
    
            list pseudowire-remote-address {
              junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
              junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
              key "name";
              ordered-by user;
              description
                "Pseudowire interface options for MLD";
              leaf name {
                type jt:ipv4addr;
                description
                  "Pseudowire endpoint address";
              }
    
              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";
              }
            }  // list pseudowire-remote-address
    
            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";
              }
    
              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 {
                  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
    
              list pseudowire-remote-address {
                junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))";
                junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config";
                key "name";
                ordered-by user;
                description
                  "Pseudowire interface options for MLD";
                leaf name {
                  type jt:ipv4addr;
                  description
                    "Pseudowire endpoint address";
                }
    
                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";
                }
              }  // list pseudowire-remote-address
            }  // list qualified-vlan
          }  // list vlan
        }  // grouping juniper-ri-protocols-mld-snooping
    
        grouping juniper-routing-instance-pbb-options {
          description
            "PBB options for the routing instance";
          uses apply-advanced;
    
          leaf peer-instance {
            junos:must "((!("routing-instances $$ protocols evpn pbb-evpn-core") || !(any ".. .. service-groups <*> pbb-service-options mac-address")))";
            junos:must-message "mac-address should not be configured under service-groups pbb-service-options for PBB EVPN";
            junos:must "(!(any ".. vlan-id <*> isid-list <*>"))";
            junos:must-message "vlan-id isid-list mapping & peer-instance can not exist in same routing-instance";
            junos:must "("routing-instances $$")";
            junos:must-message "pbbn-peer routing instance must be configured";
            type string;
            description
              "Set the peer-pbbn routing instance";
          }
    
          list vlan-id {
            junos:must "(!(any ".. peer-instance <*>"))";
            junos:must-message "vlan-id isid-list mapping & peer-instance can not exist in same routing-instance";
            junos:must "(!(any ".. .. service-groups <*>"))";
            junos:must-message "vlan-id isid-list mapping & service-groups can not exist in same routing-instance";
            key "name";
            ordered-by user;
            description
              "Set B-VLAN to ISID mapping";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4094";
                }
              }
              description "Configure B-Vlan";
            }
    
            leaf-list isid-list {
              type string;
              ordered-by user;
              description
                "Configure ISID(Valid Range:256..16777214) for the B-VLAN";
            }
          }  // list vlan-id
    
          leaf default-bvlan {
            junos:must "(!(any ".. peer-instance <*>"))";
            junos:must-message "default-bvlan & peer-instance can not exist in same routing-instance";
            junos:must "(!(any ".. .. service-groups <*>"))";
            junos:must-message "default-bvlan mapping & service-groups can not exist in same routing-instance";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4094";
              }
            }
            description
              "Default B-VLAN for all un-mapped ISIDs";
          }
        }  // grouping juniper-routing-instance-pbb-options
    
        grouping juniper-routing-instance-service-groups {
          description
            "Service-groups configuration";
          leaf name {
            junos:must "(any ".. .. pbb-options peer-instance <*>")";
            junos:must-message "peer pbbn instance must be there for service-groups configuration";
            type string;
            description "Service-group name";
          }
    
          uses apply-advanced;
    
          leaf service-type {
            type enumeration {
              enum "eline" {
                junos:must "(!(any ".. .. service-groups <*> service-type elan"))";
                junos:must-message "Elan and eline services can not exist in same routing instance";
                value 0;
                description
                  "Ethernet point-to-point";
              }
              enum "elan" {
                junos:must "(!(any ".. .. service-groups <*> service-type eline"))";
                junos:must-message "Elan and eline services can not exist in same routing instance";
                value 1;
                description
                  "Ethernet LAN service";
              }
            }
            description
              "Service type as ethernet LAN or point-to-point";
          }
    
          container pbb-service-options {
            presence
              "enable pbb-service-options";
            description
              "Provider backbone instance service options";
            uses apply-advanced;
    
            list isid {
              junos:must "(!(any ".. .. .. pbb-options vlan-id <*> isid-list <*>"))";
              junos:must-message "vlan-id to isid-list mapping is not allowed in PBN routing-instance";
              key "name";
              ordered-by user;
              description
                "ISID to S-VLAN configuration";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "256 .. 16777214";
                  }
                }
                description "Configure ISID";
              }
    
              choice service-data {
                leaf-list vlan-id-list {
                  junos:must "(!(".. .. .. service-type eline"))";
                  junos:must-message "Vlan-id-list cannot be specified for eline service";
                  junos:must "(any ".. .. .. service-type <*>")";
                  junos:must-message "service-type must be specified";
                  type jt:vlan-range;
                  description "List of S-VLANs";
                }
                leaf interface {
                  junos:must "(!(".. .. .. service-type elan"))";
                  junos:must-message "Interface cannot be specified for elan service";
                  junos:must "(!(any ".. .. .. .. bridge-domains <*> interface $$"))";
                  junos:must-message "Sub interface is not allowed for PBB configuration";
                  junos:must "(any ".. .. .. service-type <*>")";
                  junos:must-message "service-type must be specified";
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Point to point interface name";
                }
              }  // choice service-data
            }  // list isid
    
            leaf default-isid {
              junos:must "(!(any ".. isid <*> vlan-id-list <*>"))";
              junos:must-message "Default isid & explicit isid services not allowed in the same service-group";
              junos:must "(!(".. .. service-type eline"))";
              junos:must-message "Default-isid not valid for service-type eline";
              junos:must "(any ".. .. service-type <*>")";
              junos:must-message "service-type must be specified";
              junos:must "(!(any ".. .. .. pbb-options vlan-id <*> isid-list <*>"))";
              junos:must-message "vlan-id to isid-list mapping is not allowed in PBN routing-instance";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "256 .. 16777214";
                }
              }
              description
                "Default ISID for all un-mapped S-VLANs";
            }
    
            leaf mac-address {
              type jt:mac-addr;
              description
                "Unicast or multicast mac address";
            }
    
            leaf source-bmac {
              type jt:mac-addr;
              description
                "Unicast Source B Mac address";
            }
          }  // container pbb-service-options
        }  // grouping juniper-routing-instance-service-groups
    
        grouping juniper-routing-instance-switch-options {
          description
            "Bridge options for the routing instance";
          uses apply-advanced;
    
          container mac-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC address forwarding table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container mac-table-size
    
          container mac-ip-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC+IP bindings table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings";
            }
          }  // container mac-ip-table-size
    
          container interface-mac-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC address learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses per interface";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
                enum "log" {
                  value 2;
                  description
                    "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                }
                enum "shutdown" {
                  value 3;
                  description
                    "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                }
                enum "drop-and-log" {
                  value 4;
                  description
                    "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container interface-mac-limit
    
          container interface-mac-ip-limit {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC+IP bindings learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings per interface";
            }
          }  // container interface-mac-ip-limit
    
          container mac-notification {
            presence "enable mac-notification";
            description
              "MAC notification options";
            uses apply-advanced;
    
            leaf notification-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 60";
                }
              }
              units "seconds";
              default "30";
              description
                "Interval for sending MAC notifications";
            }
          }  // container mac-notification
    
          leaf mac-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            description
              "Delay for discarding MAC address if no updates are received";
          }
    
          leaf no-mac-learning {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Disable dynamic MAC address learning";
          }
    
          leaf no-normalization {
            type empty;
            description
              "Disable vlan id normalization for interfaces";
          }
    
          leaf mac-statistics {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Enable MAC address statistics";
          }
    
          container mib {
            presence "enable mib";
            description "Snmp mib options";
            uses apply-advanced;
    
            container dot1q-mib {
              presence "enable dot1q-mib";
              description
                "Dot1q MIB configuration options";
              uses apply-advanced;
    
              leaf port-list {
                type enumeration {
                  enum "bit-map" {
                    value 0;
                    description
                      "Port list is represented in bit-map format";
                  }
                  enum "string" {
                    value 1;
                    description
                      "Port list is represented in string format";
                  }
                }
                description
                  "Port list for staticegressports and staticuntaggedports MIB";
              }
            }  // container dot1q-mib
          }  // container mib
    
          container static-rvtep-mac {
            description
              "Configure Static MAC and remote VxLAN tunnel endpoint entries";
            uses apply-advanced;
    
            list mac {
              key "mac_addr remote-vtep";
              description "Unicast MAC address";
              leaf mac_addr {
                type jt:mac-unicast;
              }
    
              leaf remote-vtep {
                type jt:ipaddr;
                description
                  "Configure static remote VXLAN tunnel endpoints";
              }
            }  // list mac
          }  // container static-rvtep-mac
    
          leaf service-id {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Service ID required if multi-chassis AE is part of a bridge-domain";
          }
    
          leaf ovsdb-managed {
            junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))";
            junos:must-message "Not valid with protocols evpn encapsulation vxlan";
            type empty;
            description
              "All vxlan bridge domains in routing instance are remote managed";
          }
    
          list interface {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance";
            key "name";
            ordered-by user;
            description
              "Interface that connect this site to the VPN";
            leaf name {
              junos:must "((".. .. .. interface $$" || "FALSE"))";
              junos:must-message "Interface must be part of this routing instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container interface-mac-limit {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              description
                "Maximum number of MAC addresses learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC addresses per interface";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable interface for interface-mac-limit";
              }
    
              leaf packet-action {
                type enumeration {
                  enum "none" {
                    value 0;
                    description
                      "Forward the packet";
                  }
                  enum "drop" {
                    value 1;
                    description
                      "Drop packets and do not learn. Default is forward";
                  }
                  enum "log" {
                    value 2;
                    description
                      "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "shutdown" {
                    value 3;
                    description
                      "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "drop-and-log" {
                    value 4;
                    description
                      "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                  }
                }
                description
                  "Action when MAC limit is reached";
              }
            }  // container interface-mac-limit
    
            leaf action-priority {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 8";
                }
              }
              description
                "Blocking priority of this interface on mac move detection";
            }
    
            list static-mac {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              key "name";
              ordered-by user;
              description
                "Static MAC addresses assigned to this interface";
              leaf name {
                junos:must "((!("FALSE") || all ".. vlan-id <*>"))";
                junos:must-message " Specify vlan-id for qualified learning ";
                type jt:mac-addr;
                description "MAC address";
              }
    
              uses apply-advanced;
    
              list vlan-id {
                junos:must "("FALSE")";
                junos:must-message "'vlan-id all' has to be configured for the bridging domain";
                key "name";
                ordered-by user;
                description
                  "VLAN ID of learning VLAN";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4094";
                    }
                  }
                  description "Learning VLAN";
                }
    
                uses apply-advanced;
              }  // list vlan-id
            }  // list static-mac
    
            container interface-mac-ip-limit {
              description
                "Maximum number of MAC+IP bindings learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC+IP bindings per interface";
              }
            }  // container interface-mac-ip-limit
    
            leaf no-mac-learning {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type empty;
              description
                "Disable dynamic MAC address learning";
            }
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            leaf persistent-learning {
              junos:must "(!("switch-options mac-table-aging-time "))";
              junos:must-message "Persistent learning can not co-exist with mac-table-aging-time";
              type empty;
              description
                "Enable persistent MAC learning on this interface";
            }
          }  // list interface
    
          container traceoptions {
            description
              "Layer 2 trace options for this routing instance";
            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 "bridge-interface" {
                    value 6;
                    description
                      "Interface bridge operations";
                  }
                  enum "learning-domain" {
                    value 7;
                    description
                      "Learning domain operations";
                  }
                  enum "ipc" {
                    value 8;
                    description
                      "Inter-process communications operations";
                  }
                  enum "mac-learning" {
                    value 9;
                    description
                      "MAC address learning operations";
                  }
                  enum "initialization" {
                    value 10;
                    description
                      "Initialization operations";
                  }
                  enum "flood-next-hop" {
                    value 11;
                    description
                      "Flood next hop operations";
                  }
                  enum "irb" {
                    value 12;
                    description
                      "Integrated routing and bridging operations";
                  }
                  enum "vpls-ping" {
                    value 13;
                    description
                      "VPLS ping operations";
                  }
                  enum "vpls-loop-prev" {
                    value 14;
                    description
                      "VPLS loop prevention";
                  }
                  enum "storm-control" {
                    value 15;
                    description "Storm-control";
                  }
                  enum
                    "unknown-unicast-forwarding" {
                    value 16;
                    description
                      "Trace unknown unicast forwarding events";
                  }
                  enum "vxlan" {
                    value 17;
                    description "VXLAN";
                  }
                  enum "all" {
                    value 18;
                    description "All operations";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          container voip {
            description
              "Voice-over-IP configuration";
            uses apply-advanced;
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Enable voice over IP on this port";
              leaf name {
                type string;
              }
    
              uses apply-advanced;
    
              leaf vlan {
                junos:must "(!("vlans $$ vlan-range "))";
                junos:must-message "Ranged vlan cannot be used by Voice-over-IP";
                type string;
                description
                  "VLAN for voice over IP";
              }
    
              leaf forwarding-class {
                type string {
                  junos:posix-pattern "^.{1,64}$";
                  junos:pattern-message "Must be string of 64 characters or less";
                }
                description "Forwarding class";
              }
            }  // list interface
          }  // container voip
    
          container unknown-unicast-forwarding {
            description
              "Set interface for forwarding of unknown unicast packets";
            uses apply-advanced;
    
            list vlan {
              key "name";
              description
                "VLAN for the unknown unicast packets";
              leaf name {
                type string;
                description
                  "VLAN name or VLAN Tag (1..4095)";
              }
    
              uses apply-advanced;
    
              leaf interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Interface to send unknown unicast packets for the VLAN";
              }
            }  // list vlan
          }  // container unknown-unicast-forwarding
        }  // grouping juniper-routing-instance-switch-options
    
        grouping juniper-routing-options {
          uses apply-advanced;
    
          container logical-system-mux {
            description
              "Logical system control daemon information";
            uses apply-advanced;
    
            container traceoptions {
              description "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 "debug" {
                      value 0;
                      description
                        "Trace debug-level lrmuxd activities";
                    }
                    enum "parse" {
                      value 1;
                      description
                        "Trace configuration parsing";
                    }
                    enum "route" {
                      value 2;
                      description
                        "Trace routing information";
                    }
                    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 "policy" {
                      value 6;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 7;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 8;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 9;
                      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 logical-system-mux
    
          container auto-bandwidth {
            presence "enable auto-bandwidth";
            description "Auto bandwidth";
            uses apply-advanced;
    
            list template {
              key "name";
              ordered-by user;
              description
                "Auto bandwidth template";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Auto bandwidth template name (Maximum length 64)";
              }
    
              uses apply-advanced;
    
              leaf adjust-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 3600";
                  }
                }
                description "Adjust interval";
              }
    
              leaf adjust-threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                description
                  "Percentage threshhold";
              }
    
              leaf statistic-collection-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 300";
                  }
                }
                description
                  "Collection interval";
              }
    
              leaf auto-bandwidth-subscription {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 200";
                  }
                }
                description
                  "Percentage threshhold for subscription";
              }
            }  // list template
    
            container traceoptions {
              description
                "Trace options for sr stats";
              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 All";
                    }
                    enum "timer" {
                      value 1;
                      description
                        "Trace traffic recv by periodic timer";
                    }
                    enum "state" {
                      value 2;
                      description
                        "Trace state of sensor";
                    }
                  }
                }
    
                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 auto-bandwidth
    
          container backup-selection {
            presence "enable backup-selection";
            description
              "Backup selection options";
            uses apply-advanced;
    
            list destination {
              key "name";
              description
                "IP/IPv6 prefix for which backup selection policy is configured";
              leaf name {
                type jt:ipprefix-mandatory;
                description
                  "IP/IPv6 address (and optional prefix length)";
              }
    
              uses apply-advanced;
    
              list interface {
                key "name";
                description
                  "Primary nexthop interface for which backup selection policy is configured";
                leaf name {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Interface name";
                }
    
                uses apply-advanced;
    
                container admin-group {
                  description
                    "Administrative group policies for backup-selection";
                  uses apply-advanced;
    
                  leaf-list exclude {
                    type string;
                    description
                      "Do not use interface if any admin group available";
                  }
    
                  leaf-list include-all {
                    type string;
                    description
                      "Use interface if admin groups available entirely";
                  }
    
                  leaf-list include-any {
                    type string;
                    description
                      "Use interface if any admin group is available";
                  }
    
                  leaf-list preference {
                    type string;
                    ordered-by user;
                    description
                      "Administrative groups in descending preference order";
                  }
                }  // container admin-group
    
                leaf srlg {
                  type enumeration {
                    enum "loose" {
                      value 0;
                      description "Loose SRLG";
                    }
                    enum "strict" {
                      value 1;
                      description "Strict SRLG";
                    }
                  }
                  default "loose";
                  description
                    "Evaluate Shared Risk Link Group(SRLG) characteristics for backup selection";
                }
    
                leaf protection-type {
                  type enumeration {
                    enum "link" {
                      value 0;
                      description
                        "Protect the primary interface from link faults only";
                    }
                    enum "node" {
                      value 1;
                      description
                        "Protect the primary interface from node faults only";
                    }
                    enum "node-link" {
                      value 2;
                      description
                        "Protect the primary interface from either link or node faults; prefer node protection";
                    }
                  }
                  description
                    "Type of protection to be considered";
                }
    
                leaf downstream-paths-only {
                  type empty;
                  description
                    "Choose only the downstream nodes for backup";
                }
    
                leaf bandwidth-greater-equal-primary {
                  type empty;
                  description
                    "Use backup nexthop only if bandwidth is >= bandwidth of primary nexthop";
                }
    
                container backup-neighbor {
                  description
                    "Backup Neighbor ID based policies for backup selection";
                  uses apply-advanced;
    
                  leaf-list exclude {
                    type jt:ipv4addr;
                    description
                      "List of backup neighbors to be excluded";
                  }
    
                  leaf-list preference {
                    type jt:ipv4addr;
                    ordered-by user;
                    description
                      "List of backup neighbors in descending order preference";
                  }
                }  // container backup-neighbor
    
                container node {
                  description
                    "Node ID based policies for backup selection";
                  uses apply-advanced;
    
                  leaf-list exclude {
                    type jt:ipv4addr;
                    description
                      "List of nodes to be excluded";
                  }
    
                  leaf-list preference {
                    type jt:ipv4addr;
                    ordered-by user;
                    description
                      "List of nodes in the descending order of preference";
                  }
                }  // container node
    
                container node-tag {
                  description
                    "Node  tag policies";
                  uses apply-advanced;
    
                  leaf-list exclude {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "The set of node tags to be excluded";
                  }
    
                  leaf-list preference {
                    type union {
                      type uint32;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "The set of node tags in the descending order of preference";
                  }
                }  // container node-tag
    
                leaf root-metric {
                  type enumeration {
                    enum "lowest" {
                      value 0;
                      description
                        "Choose lowest root metric";
                    }
                    enum "highest" {
                      value 1;
                      description
                        "Choose highest root metric";
                    }
                  }
                  description "Root metric";
                }
    
                leaf dest-metric {
                  type enumeration {
                    enum "lowest" {
                      value 0;
                      description
                        "Choose lowest destination metric";
                    }
                    enum "highest" {
                      value 1;
                      description
                        "Choose highest destination metric";
                    }
                  }
                  description
                    "Destination metric";
                }
    
                leaf-list metric-order {
                  type enumeration {
                    enum "root" {
                      value 0;
                    }
                    enum "dest" {
                      value 1;
                    }
                  }
                  max-elements 2;
                  ordered-by user;
                  description
                    "Metric evaluation order";
                }
    
                leaf-list evaluation-order {
                  type enumeration {
                    enum "admin-group" {
                      value 0;
                      description
                        "Administrative Group/Link Color";
                    }
                    enum "srlg" {
                      value 1;
                      description "SRLG";
                    }
                    enum "bandwidth" {
                      value 2;
                      description "Bandwidth";
                    }
                    enum "protection-type" {
                      value 3;
                      description
                        "Type of protection";
                    }
                    enum "backup-neighbor" {
                      value 4;
                      description
                        "Backup Neighbor";
                    }
                    enum "node" {
                      value 5;
                      description "Node";
                    }
                    enum "node-tag" {
                      value 6;
                      description "Node tag";
                    }
                    enum "metric" {
                      value 7;
                      description
                        "Metric related parameters";
                    }
                  }
                  ordered-by user;
                  description
                    "Interface policy criteria evaluation order";
                }
              }  // list interface
            }  // list destination
          }  // container backup-selection
    
          list flex-algorithm {
            key "name";
            description
              "Configure flex-algorithms supported by this node.";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "128 .. 255";
                }
              }
              description "Algorithm id";
            }
    
            uses apply-advanced;
    
            container definition {
              description
                "Configure flex-algorithm definition.";
              uses apply-advanced;
    
              leaf metric-type {
                type enumeration {
                  enum "igp-metric" {
                    value 0;
                    description
                      "Metric configured to be used for IGP";
                  }
                  enum "te-metric" {
                    value 1;
                    description
                      "Traffic-engineering metric";
                  }
                  enum "delay-metric" {
                    value 2;
                    description
                      "Min unidirectional link delay metric";
                  }
                }
              }
    
              choice calculation-type {
                leaf spf {
                  type empty;
                  description
                    "Normal SPF of type 0";
                }
                leaf strict-spf {
                  type empty;
                  description "Strict SPF";
                }
              }  // choice calculation-type
    
              leaf use-flex-algorithm-prefix-metric {
                type empty;
                description
                  "Set M flag in the flex-algorithm definition flags";
              }
    
              leaf priority {
                junos:must "(!(".. no-advertise"))";
                junos:must-message "Priority is relevant only if fad is advertised.";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Priority of the flex-algorithm advertisement.";
              }
    
              container admin-group {
                description
                  "Administrative group policy";
                uses admin_group_include_exclude;
              }  // container admin-group
            }  // container definition
    
            leaf color {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Color to be associated with this flex-algorithm";
            }
    
            leaf use-transport-class {
              junos:must "("routing-options transport-class auto-create")";
              junos:must-message "Please enable auto-create under routing-options transport-class hierarchy";
              type empty;
              description
                "Install ingress routes via transport class RIBs";
            }
          }  // list flex-algorithm
    
          container source-packet-routing {
            description
              "Source packet routing (SPRING)";
            uses apply-advanced;
    
            list mapping-server-entry {
              key "name";
              ordered-by user;
              description "Mapping server entry";
              leaf name {
                type string {
                  length "1 .. 64";
                }
                description
                  "Mapping server entry name";
              }
    
              uses apply-advanced;
    
              list prefix-segment {
                key "name";
                max-elements 64;
                ordered-by user;
                description "Prefix segment";
                leaf name {
                  type jt:ipprefix;
                  description
                    "Prefix segment prefix";
                }
    
                uses apply-advanced;
    
                leaf index {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 199999";
                    }
                  }
                  description
                    "Prefix segment index";
                }
    
                leaf attached {
                  type empty;
                  description
                    "Set attached flag in IS-IS mapping server advertisement";
                }
    
                leaf domain-wide-flooding {
                  type empty;
                  description
                    "Set S-flag in IS-IS mapping server advertisement";
                }
    
                leaf no-node-segment {
                  type empty;
                  description
                    "Clear node segment flag in mapping server prefix segment";
                }
              }  // list prefix-segment
    
              list prefix-segment-range {
                key "name";
                max-elements 64;
                ordered-by user;
                description
                  "Prefix segment range";
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Prefix segment range name";
                }
    
                uses apply-advanced;
    
                leaf start-prefix {
                  type jt:ipprefix;
                  description "Start prefix";
                }
    
                leaf start-index {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 199999";
                    }
                  }
                  description "Start index";
                }
    
                leaf size {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1024";
                    }
                  }
                  description
                    "Size of prefix segment range";
                }
    
                leaf attached {
                  type empty;
                  description
                    "Set attached flag in IS-IS mapping server advertisement";
                }
    
                leaf domain-wide-flooding {
                  type empty;
                  description
                    "Set S-flag in IS-IS mapping server advertisement";
                }
    
                leaf no-node-segment {
                  type empty;
                  description
                    "Clear node segment flag in mapping server prefix segment";
                }
              }  // list prefix-segment-range
            }  // list mapping-server-entry
    
            container srv6 {
              description
                "SRv6 source-packet-routing";
              uses apply-advanced;
    
              list locator {
                key "name";
                ordered-by user;
                leaf name {
                  type string {
                    length "1 .. 64";
                  }
                  description
                    "Locator entry name";
                }
    
                uses apply-advanced;
    
                leaf algorithm {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "Algorithm associated with this locator";
                }
    
                leaf address {
                  type jt:ipv6prefix;
                  description
                    "Configure Locator Service for SRv6";
                }
              }  // list locator
    
              leaf no-reduced-srh {
                type empty;
                description
                  "SRv6 Encapsulation mode non reduced SRH";
              }
    
              leaf transit-srh-insert {
                type empty;
                description
                  "SRv6 SRH insert mode on transit";
              }
            }  // container srv6
          }  // container source-packet-routing
    
          leaf route-distinguisher-id {
            type jt:ipv4addr;
            description
              "Identifier used in route distinguishers for routing instances";
          }
    
          list rib {
            key "name";
            ordered-by user;
            description "Routing table options";
            leaf name {
              type string;
              description "Routing table name";
            }
    
            uses apply-advanced;
    
            container static {
              description "Static routes";
              uses apply-advanced;
    
              leaf rib-group {
                type string;
                description
                  "Routing table group";
              }
    
              container defaults {
                description
                  "Global route options";
                uses apply-advanced;
    
                choice retain-choice {
                  leaf retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Always keep route in forwarding table";
                  }
                  leaf no-retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Don't always keep route in forwarding table";
                  }
                }  // choice retain-choice
    
                choice install-choice {
                  leaf install {
                    type empty;
                    description
                      "Install route into forwarding table";
                  }
                  leaf no-install {
                    type empty;
                    description
                      "Don't install route into forwarding table";
                  }
                }  // choice install-choice
    
                choice readvertise-choice {
                  leaf readvertise {
                    type empty;
                    description
                      "Mark route as eligible to be readvertised";
                  }
                  leaf no-readvertise {
                    type empty;
                    description
                      "Don't mark route as eligible to be readvertised";
                  }
                }  // choice readvertise-choice
    
                choice resolve-choice {
                  leaf resolve {
                    type empty;
                    description
                      "Allow resolution of indirectly connected next hops";
                  }
                  leaf no-resolve {
                    type empty;
                    description
                      "Don't allow resolution of indirectly connected next hops";
                  }
                }  // choice resolve-choice
    
                choice longest-match-choice {
                  leaf longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Always use longest prefix match to resolve next hops";
                  }
                  leaf no-longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Don't always use longest prefix match to resolve next hops";
                  }
                }  // choice longest-match-choice
    
                choice passive_flag {
                  leaf active {
                    type empty;
                    description
                      "Remove inactive route from forwarding table";
                  }
                  leaf passive {
                    type empty;
                    description
                      "Retain inactive route in forwarding table";
                  }
                }  // choice passive_flag
    
                container metric {
                  presence "enable metric";
                  description "Metric value";
                  uses rib_static_metric_type;
                }  // container metric
    
                container metric2 {
                  presence "enable metric2";
                  description "Metric value 2";
                  uses rib_static_metric_type;
                }  // container metric2
    
                container metric3 {
                  presence "enable metric3";
                  description "Metric value 3";
                  uses rib_static_metric_type;
                }  // container metric3
    
                container metric4 {
                  presence "enable metric4";
                  description "Metric value 4";
                  uses rib_static_metric_type;
                }  // container metric4
    
                container tag {
                  presence "enable tag";
                  description "Tag string";
                  uses rib_static_metric_type;
                }  // container tag
    
                container tag2 {
                  presence "enable tag2";
                  description "Tag string 2";
                  uses rib_static_metric_type;
                }  // container tag2
    
                container preference {
                  presence "enable preference";
                  description "Preference value";
                  uses rib_static_metric_type;
                }  // container preference
    
                container preference2 {
                  presence "enable preference2";
                  description
                    "Preference value 2";
                  uses rib_static_metric_type;
                }  // container preference2
    
                container color {
                  presence "enable color";
                  description
                    "Color (preference) value";
                  uses rib_static_metric_type;
                }  // container color
    
                container color2 {
                  presence "enable color2";
                  description
                    "Color (preference) value 2";
                  uses rib_static_metric_type;
                }  // container color2
    
                leaf-list community {
                  type jt:community;
                  ordered-by user;
                  description
                    "BGP community identifier";
                }
    
                container as-path {
                  description
                    "Autonomous system path";
                  uses apply-advanced;
    
                  leaf path {
                    type string;
                    description
                      "Autonomous system path";
                  }
    
                  leaf origin {
                    type enumeration {
                      enum "igp" {
                        value 0;
                        description
                          "Path originated in the local IGP";
                      }
                      enum "egp" {
                        value 1;
                        description
                          "Path originated in another AS";
                      }
                      enum "incomplete" {
                        value 2;
                        description
                          "Path was learned by some other means";
                      }
                    }
                  }
    
                  leaf atomic-aggregate {
                    type empty;
                    description
                      "Add ATOMIC_AGGREGATE path attribute to route";
                  }
    
                  container aggregator {
                    presence "enable aggregator";
                    description
                      "Add AGGREGATOR path attribute to route";
                  }  // container aggregator
    
                  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 address {
                    type jt:ipv4addr;
                    description
                      "Address of BGP system that formed the route";
                  }
                }  // container as-path
              }  // container defaults
    
              list route {
                key "name";
                ordered-by user;
                description "Static route";
                leaf name {
                  type jt:ipprefix;
                }
    
                uses apply-advanced;
    
                choice next_hop {
                  leaf-list next-hop {
                    type union {
                      type jt:ipaddr-or-interface;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Next hop to destination";
                  }
                  leaf reject {
                    type empty;
                    description
                      "Drop packets to destination; send ICMP unreachables";
                  }
                  leaf discard {
                    type empty;
                    description
                      "Drop packets to destination; send no ICMP unreachables";
                  }
                  leaf receive {
                    type empty;
                    description
                      "Install a receive route for the destination";
                  }
                  leaf next-table {
                    type string {
                      junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$";
                      junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>";
                    }
                    description
                      "Next hop to another table";
                  }
                }  // choice next_hop
    
                list qualified-next-hop {
                  key "name";
                  ordered-by user;
                  description
                    "Next hop with qualifiers";
                  uses qualified_nh_obj;
                }  // list qualified-next-hop
    
                leaf backup-pe-group {
                  junos:must "(".. p2mp-lsp-next-hop")";
                  junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop";
                  type string;
                  description
                    "Multicast source redundancy group";
                }
    
                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 neighbor {
                    type jt:ipaddr;
                    description
                      "BFD neighbor address";
                  }
    
                  leaf local-address {
                    type jt:ipaddr;
                    description
                      "BFD local address (for multihop only)";
                  }
    
                  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";
                  }
    
                  leaf minimum-receive-ttl {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Minimum receive TTL below which to drop";
                  }
                }  // container bfd-liveness-detection
    
                choice retain-choice {
                  leaf retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Always keep route in forwarding table";
                  }
                  leaf no-retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Don't always keep route in forwarding table";
                  }
                }  // choice retain-choice
    
                choice install-choice {
                  leaf install {
                    type empty;
                    description
                      "Install route into forwarding table";
                  }
                  leaf no-install {
                    type empty;
                    description
                      "Don't install route into forwarding table";
                  }
                }  // choice install-choice
    
                choice readvertise-choice {
                  leaf readvertise {
                    type empty;
                    description
                      "Mark route as eligible to be readvertised";
                  }
                  leaf no-readvertise {
                    type empty;
                    description
                      "Don't mark route as eligible to be readvertised";
                  }
                }  // choice readvertise-choice
    
                choice resolve-choice {
                  leaf resolve {
                    type empty;
                    description
                      "Allow resolution of indirectly connected next hops";
                  }
                  leaf no-resolve {
                    type empty;
                    description
                      "Don't allow resolution of indirectly connected next hops";
                  }
                }  // choice resolve-choice
    
                choice longest-match-choice {
                  leaf longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Always use longest prefix match to resolve next hops";
                  }
                  leaf no-longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Don't always use longest prefix match to resolve next hops";
                  }
                }  // choice longest-match-choice
    
                choice passive_flag {
                  leaf active {
                    type empty;
                    description
                      "Remove inactive route from forwarding table";
                  }
                  leaf passive {
                    type empty;
                    description
                      "Retain inactive route in forwarding table";
                  }
                }  // choice passive_flag
    
                container metric {
                  presence "enable metric";
                  description "Metric value";
                  uses rib_static_metric_type;
                }  // container metric
    
                container metric2 {
                  presence "enable metric2";
                  description "Metric value 2";
                  uses rib_static_metric_type;
                }  // container metric2
    
                container metric3 {
                  presence "enable metric3";
                  description "Metric value 3";
                  uses rib_static_metric_type;
                }  // container metric3
    
                container metric4 {
                  presence "enable metric4";
                  description "Metric value 4";
                  uses rib_static_metric_type;
                }  // container metric4
    
                container tag {
                  presence "enable tag";
                  description "Tag string";
                  uses rib_static_metric_type;
                }  // container tag
    
                container tag2 {
                  presence "enable tag2";
                  description "Tag string 2";
                  uses rib_static_metric_type;
                }  // container tag2
    
                container preference {
                  presence "enable preference";
                  description "Preference value";
                  uses rib_static_metric_type;
                }  // container preference
    
                container preference2 {
                  presence "enable preference2";
                  description
                    "Preference value 2";
                  uses rib_static_metric_type;
                }  // container preference2
    
                container color {
                  presence "enable color";
                  description
                    "Color (preference) value";
                  uses rib_static_metric_type;
                }  // container color
    
                container color2 {
                  presence "enable color2";
                  description
                    "Color (preference) value 2";
                  uses rib_static_metric_type;
                }  // container color2
    
                leaf-list community {
                  type jt:community;
                  ordered-by user;
                  description
                    "BGP community identifier";
                }
    
                container as-path {
                  description
                    "Autonomous system path";
                  uses apply-advanced;
    
                  leaf path {
                    type string;
                    description
                      "Autonomous system path";
                  }
    
                  leaf origin {
                    type enumeration {
                      enum "igp" {
                        value 0;
                        description
                          "Path originated in the local IGP";
                      }
                      enum "egp" {
                        value 1;
                        description
                          "Path originated in another AS";
                      }
                      enum "incomplete" {
                        value 2;
                        description
                          "Path was learned by some other means";
                      }
                    }
                  }
    
                  leaf atomic-aggregate {
                    type empty;
                    description
                      "Add ATOMIC_AGGREGATE path attribute to route";
                  }
    
                  container aggregator {
                    presence "enable aggregator";
                    description
                      "Add AGGREGATOR path attribute to route";
                  }  // container aggregator
    
                  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 address {
                    type jt:ipv4addr;
                    description
                      "Address of BGP system that formed the route";
                  }
                }  // container as-path
    
                list lsp-next-hop {
                  key "name";
                  ordered-by user;
                  description "LSP next hop";
                  uses lsp_nh_obj;
                }  // list lsp-next-hop
    
                list p2mp-lsp-next-hop {
                  key "name";
                  max-elements 1;
                  ordered-by user;
                  description
                    "Point-to-multipoint LSP next hop";
                  uses lsp_nh_obj;
                }  // list p2mp-lsp-next-hop
    
                container spring-te-lsp-next-hop {
                  junos:must "("protocols source-packet-routing tunnel-tracking")";
                  junos:must-message "Please enable the tunnel-tracking  under 'protocols source-packet-routing' hierarchy";
                  description
                    "SPRING-TE LSP next hop";
                  uses springte_lsp_nh_obj;
                }  // container spring-te-lsp-next-hop
    
                container p2mp-ldp-next-hop {
                  description
                    "Point-to-multipoint LDP LSP next hop";
                  uses p2mp_ldp_lsp_nh_obj;
                }  // container p2mp-ldp-next-hop
    
                list static-lsp-next-hop {
                  key "name";
                  ordered-by user;
                  description
                    "Static LSP next hop";
                  uses lsp_nh_obj;
                }  // list static-lsp-next-hop
              }  // list route
    
              container static-route {
                description
                  "Static route Status";
                leaf bfd-admin-down {
                  type enumeration {
                    enum "active" {
                      value 0;
                      description
                        "Static route will be inactive on bfd-admin-down";
                    }
                    enum "passive" {
                      value 1;
                      description
                        "Static route will remain active on bfd-admin-down";
                    }
                  }
                  description
                    "Static route State on BFD ADMIN DOWN";
                }
              }  // container static-route
    
              list iso-route {
                key "name";
                ordered-by user;
                description
                  "ISO family static route";
                leaf name {
                  type jt:isoprefix;
                }
    
                uses apply-advanced;
    
                choice next_hop {
                  leaf-list next-hop {
                    type union {
                      type jt:ipaddr-or-interface;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    ordered-by user;
                    description
                      "Next hop to destination";
                  }
                  leaf reject {
                    type empty;
                    description
                      "Drop packets to destination; send ICMP unreachables";
                  }
                  leaf discard {
                    type empty;
                    description
                      "Drop packets to destination; send no ICMP unreachables";
                  }
                  leaf receive {
                    type empty;
                    description
                      "Install a receive route for the destination";
                  }
                  leaf next-table {
                    type string {
                      junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$";
                      junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>";
                    }
                    description
                      "Next hop to another table";
                  }
                }  // choice next_hop
    
                list qualified-next-hop {
                  key "name";
                  ordered-by user;
                  description
                    "Next hop with qualifiers";
                  uses qualified_nh_obj;
                }  // list qualified-next-hop
    
                leaf backup-pe-group {
                  junos:must "(".. p2mp-lsp-next-hop")";
                  junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop";
                  type string;
                  description
                    "Multicast source redundancy group";
                }
    
                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 neighbor {
                    type jt:ipaddr;
                    description
                      "BFD neighbor address";
                  }
    
                  leaf local-address {
                    type jt:ipaddr;
                    description
                      "BFD local address (for multihop only)";
                  }
    
                  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";
                  }
    
                  leaf minimum-receive-ttl {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint8 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Minimum receive TTL below which to drop";
                  }
                }  // container bfd-liveness-detection
    
                choice retain-choice {
                  leaf retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Always keep route in forwarding table";
                  }
                  leaf no-retain {
                    junos:must "(!(".. resolve"))";
                    junos:must-message "Must not specify resolve with retain";
                    type empty;
                    description
                      "Don't always keep route in forwarding table";
                  }
                }  // choice retain-choice
    
                choice install-choice {
                  leaf install {
                    type empty;
                    description
                      "Install route into forwarding table";
                  }
                  leaf no-install {
                    type empty;
                    description
                      "Don't install route into forwarding table";
                  }
                }  // choice install-choice
    
                choice readvertise-choice {
                  leaf readvertise {
                    type empty;
                    description
                      "Mark route as eligible to be readvertised";
                  }
                  leaf no-readvertise {
                    type empty;
                    description
                      "Don't mark route as eligible to be readvertised";
                  }
                }  // choice readvertise-choice
    
                choice resolve-choice {
                  leaf resolve {
                    type empty;
                    description
                      "Allow resolution of indirectly connected next hops";
                  }
                  leaf no-resolve {
                    type empty;
                    description
                      "Don't allow resolution of indirectly connected next hops";
                  }
                }  // choice resolve-choice
    
                choice longest-match-choice {
                  leaf longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Always use longest prefix match to resolve next hops";
                  }
                  leaf no-longest-match {
                    junos:must "(".. resolve")";
                    junos:must-message "Requires resolve to be configured";
                    type empty;
                    description
                      "Don't always use longest prefix match to resolve next hops";
                  }
                }  // choice longest-match-choice
    
                choice passive_flag {
                  leaf active {
                    type empty;
                    description
                      "Remove inactive route from forwarding table";
                  }
                  leaf passive {
                    type empty;
                    description
                      "Retain inactive route in forwarding table";
                  }
                }  // choice passive_flag
    
                container metric {
                  presence "enable metric";
                  description "Metric value";
                  uses rib_static_metric_type;
                }  // container metric
    
                container metric2 {
                  presence "enable metric2";
                  description "Metric value 2";
                  uses rib_static_metric_type;
                }  // container metric2
    
                container metric3 {
                  presence "enable metric3";
                  description "Metric value 3";
                  uses rib_static_metric_type;
                }  // container metric3
    
                container metric4 {
                  presence "enable metric4";
                  description "Metric value 4";
                  uses rib_static_metric_type;
                }  // container metric4
    
                container tag {
                  presence "enable tag";
                  description "Tag string";
                  uses rib_static_metric_type;
                }  // container tag
    
                container tag2 {
                  presence "enable tag2";
                  description "Tag string 2";
                  uses rib_static_metric_type;
                }  // container tag2
    
                container preference {
                  presence "enable preference";
                  description "Preference value";
                  uses rib_static_metric_type;
                }  // container preference
    
                container preference2 {
                  presence "enable preference2";
                  description
                    "Preference value 2";
                  uses rib_static_metric_type;
                }  // container preference2
    
                container color {
                  presence "enable color";
                  description
                    "Color (preference) value";
                  uses rib_static_metric_type;
                }  // container color
    
                container color2 {
                  presence "enable color2";
                  description
                    "Color (preference) value 2";
                  uses rib_static_metric_type;
                }  // container color2
    
                leaf-list community {
                  type jt:community;
                  ordered-by user;
                  description
                    "BGP community identifier";
                }
    
                container as-path {
                  description
                    "Autonomous system path";
                  uses apply-advanced;
    
                  leaf path {
                    type string;
                    description
                      "Autonomous system path";
                  }
    
                  leaf origin {
                    type enumeration {
                      enum "igp" {
                        value 0;
                        description
                          "Path originated in the local IGP";
                      }
                      enum "egp" {
                        value 1;
                        description
                          "Path originated in another AS";
                      }
                      enum "incomplete" {
                        value 2;
                        description
                          "Path was learned by some other means";
                      }
                    }
                  }
    
                  leaf atomic-aggregate {
                    type empty;
                    description
                      "Add ATOMIC_AGGREGATE path attribute to route";
                  }
    
                  container aggregator {
                    presence "enable aggregator";
                    description
                      "Add AGGREGATOR path attribute to route";
                  }  // container aggregator
    
                  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 address {
                    type jt:ipv4addr;
                    description
                      "Address of BGP system that formed the route";
                  }
                }  // container as-path
    
                list lsp-next-hop {
                  key "name";
                  ordered-by user;
                  description "LSP next hop";
                  uses lsp_nh_obj;
                }  // list lsp-next-hop
    
                list p2mp-lsp-next-hop {
                  key "name";
                  max-elements 1;
                  ordered-by user;
                  description
                    "Point-to-multipoint LSP next hop";
                  uses lsp_nh_obj;
                }  // list p2mp-lsp-next-hop
    
                container spring-te-lsp-next-hop {
                  junos:must "("protocols source-packet-routing tunnel-tracking")";
                  junos:must-message "Please enable the tunnel-tracking  under 'protocols source-packet-routing' hierarchy";
                  description
                    "SPRING-TE LSP next hop";
                  uses springte_lsp_nh_obj;
                }  // container spring-te-lsp-next-hop
    
                container p2mp-ldp-next-hop {
                  description
                    "Point-to-multipoint LDP LSP next hop";
                  uses p2mp_ldp_lsp_nh_obj;
                }  // container p2mp-ldp-next-hop
              }  // list iso-route
    
              list route-target-filter {
                key "name";
                ordered-by user;
                description
                  "Route-target-filter route";
                leaf name {
                  type string {
                    junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$";
                    junos:pattern-message "Use format 'x:y/len' 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 and len is a prefix length from 0 to 64";
                    length "1 .. 47";
                  }
                }
    
                uses apply-advanced;
    
                leaf-list neighbor {
                  type jt:ipaddr-scoped;
                  ordered-by user;
                  description
                    "BGP peers for filter";
                }
    
                leaf-list group {
                  type string;
                  ordered-by user;
                  description
                    "BGP groups for filter";
                }
    
                leaf local {
                  type empty;
                  description
                    "Locally originated filter";
                }
              }  // list route-target-filter
            }  // container static
    
            list martians {
              key "address choice-ident choice-value";
              ordered-by user;
              description "Invalid routes";
              uses martian_type;
            }  // list martians
    
            container aggregate {
              description "Coalesced routes";
              uses rib_aggregate_type;
            }  // container aggregate
    
            container generate {
              description "Route of last resort";
              uses rib_aggregate_type;
            }  // container generate
    
            choice maximum-paths-type {
              container maximum-routes {
                status deprecated;
                description
                  "Maximum number of routes";
                leaf limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Maximum number of routes";
                }
    
                choice log_type {
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Percentage of limit at which to start generating warnings";
                  }
                  leaf log-only {
                    type empty;
                    description
                      "Generate warning messages only";
                  }
                }  // choice log_type
    
                leaf log-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "5 .. 86400";
                    }
                  }
                  units "seconds";
                  description
                    "Minimum interval between log messages";
                }
              }  // container maximum-routes
              container maximum-paths {
                description
                  "Maximum number of paths";
                leaf limit {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 4294967295";
                    }
                  }
                  description
                    "Maximum number of paths";
                }
    
                choice log_type {
                  leaf threshold {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Percentage of limit at which to start generating warnings";
                  }
                  leaf log-only {
                    type empty;
                    description
                      "Generate warning messages only";
                  }
                }  // choice log_type
    
                leaf log-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "5 .. 86400";
                    }
                  }
                  units "seconds";
                  description
                    "Minimum interval between log messages";
                }
              }  // container maximum-paths
            }  // choice maximum-paths-type
    
            container maximum-prefixes {
              description
                "Maximum number of prefixes";
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Maximum number of prefixes";
              }
    
              choice log_type {
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of limit at which to start generating warnings";
                }
                leaf log-only {
                  type empty;
                  description
                    "Generate warning messages only";
                }
              }  // choice log_type
    
              leaf log-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "5 .. 86400";
                  }
                }
                units "seconds";
                description
                  "Minimum interval between log messages";
              }
            }  // container maximum-prefixes
    
            container multipath {
              presence "enable multipath";
              description
                "Protocol-independent load balancing";
              uses apply-advanced;
    
              container vpn-unequal-cost {
                presence
                  "enable vpn-unequal-cost";
                description
                  "Include VPN routes with unequal IGP metrics";
                leaf equal-external-internal {
                  type empty;
                  description
                    "Include external and internal VPN routes";
                }
              }  // container vpn-unequal-cost
    
              leaf as-path-compare {
                type empty;
                description
                  "Compare AS path sequences in addition to AS path length";
              }
    
              leaf preserve-nexthop-hierarchy {
                type empty;
                description
                  "Force multipath to create List nexthop";
              }
            }  // container multipath
    
            container policy-multipath {
              description
                "Policy based multipath";
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy to create policy based multipath";
              }
    
              container traceoptions {
                description "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 "route" {
                        value 0;
                        description
                          "Policy-multipath route tracing.";
                      }
                    }
                  }
    
                  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 policy-multipath
    
            container protect {
              description
                "Protocol-independent protection";
              leaf core {
                type empty;
                description
                  "Protect against unreachability to service-edge router";
              }
            }  // container protect
    
            container access {
              description "Access routes";
              uses apply-advanced;
    
              list route {
                key "name";
                ordered-by user;
                description "Access route";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP address of destination";
                }
    
                uses apply-advanced;
    
                leaf-list next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "Next hop to destination";
                }
    
                list qualified-next-hop {
                  key "name";
                  ordered-by user;
                  description
                    "Next hop with qualifiers";
                  uses qualified_nh_obj;
                }  // list qualified-next-hop
    
                leaf metric {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description "Metric value";
                }
    
                leaf preference {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Preference value";
                }
    
                leaf tag {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Tag string";
                }
    
                leaf tag2 {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description "Tag2 string";
                }
              }  // list route
            }  // container access
    
            container access-internal {
              description
                "Access-internal routes";
              uses apply-advanced;
    
              list route {
                key "name";
                ordered-by user;
                description
                  "Access-internal route";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP address and optional prefix length of destination";
                }
    
                uses apply-advanced;
    
                leaf-list next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "Next hop to destination";
                }
    
                list qualified-next-hop {
                  key "name";
                  ordered-by user;
                  description
                    "Next hop with qualifiers";
                  uses qualified_nh_obj;
                }  // list qualified-next-hop
              }  // list route
            }  // container access-internal
    
            container bgp-static {
              description
                "Routes for BGP static advertisements";
              uses apply-advanced;
    
              list route {
                key "name";
                ordered-by user;
                description "BGP-static route";
                leaf name {
                  type jt:ipprefix;
                  description
                    "IP address and optional prefix length of destination";
                }
    
                uses apply-advanced;
    
                container metric {
                  presence "enable metric";
                  description "Metric value";
                  uses rib_static_metric_type;
                }  // container metric
    
                container metric2 {
                  presence "enable metric2";
                  description "Metric value 2";
                  uses rib_static_metric_type;
                }  // container metric2
    
                container metric3 {
                  presence "enable metric3";
                  description "Metric value 3";
                  uses rib_static_metric_type;
                }  // container metric3
    
                container metric4 {
                  presence "enable metric4";
                  description "Metric value 4";
                  uses rib_static_metric_type;
                }  // container metric4
    
                container tag {
                  presence "enable tag";
                  description "Tag string";
                  uses rib_static_metric_type;
                }  // container tag
    
                container tag2 {
                  presence "enable tag2";
                  description "Tag string 2";
                  uses rib_static_metric_type;
                }  // container tag2
    
                container preference {
                  presence "enable preference";
                  description "Preference value";
                  uses rib_static_metric_type;
                }  // container preference
    
                container preference2 {
                  presence "enable preference2";
                  description
                    "Preference value 2";
                  uses rib_static_metric_type;
                }  // container preference2
    
                container color {
                  presence "enable color";
                  description
                    "Color (preference) value";
                  uses rib_static_metric_type;
                }  // container color
    
                container color2 {
                  presence "enable color2";
                  description
                    "Color (preference) value 2";
                  uses rib_static_metric_type;
                }  // container color2
    
                leaf-list community {
                  type jt:community;
                  ordered-by user;
                  description
                    "BGP community identifier";
                }
    
                container as-path {
                  description
                    "Autonomous system path";
                  uses apply-advanced;
    
                  leaf path {
                    type string;
                    description
                      "Autonomous system path";
                  }
    
                  leaf origin {
                    type enumeration {
                      enum "igp" {
                        value 0;
                        description
                          "Path originated in the local IGP";
                      }
                      enum "egp" {
                        value 1;
                        description
                          "Path originated in another AS";
                      }
                      enum "incomplete" {
                        value 2;
                        description
                          "Path was learned by some other means";
                      }
                    }
                  }
    
                  leaf atomic-aggregate {
                    type empty;
                    description
                      "Add ATOMIC_AGGREGATE path attribute to route";
                  }
    
                  container aggregator {
                    presence "enable aggregator";
                    description
                      "Add AGGREGATOR path attribute to route";
                  }  // container aggregator
    
                  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 address {
                    type jt:ipv4addr;
                    description
                      "Address of BGP system that formed the route";
                  }
                }  // container as-path
              }  // list route
            }  // container bgp-static
    
            container flow {
              description
                "Locally defined flow routing information";
              uses apply-advanced;
    
              container validation {
                presence "enable validation";
                description
                  "Flow route validation options";
                uses flow-validation;
              }  // container validation
    
              list route {
                key "name";
                ordered-by user;
                description "Flow route";
                uses flow-route-inet6;
              }  // list route
    
              container interface-group {
                description
                  "Interface-group for applying flow-spec filter";
                uses flow-interface-group;
              }  // container interface-group
    
              leaf discard-action-for-unresolved-redir-addr {
                type empty;
                description
                  "For action redirect IP if redirect address is unresolved install discard action filter";
              }
    
              choice per-route-accounting-choice {
                leaf per-route-accounting {
                  type empty;
                  description
                    "Enable traffic accounting per flowspec route";
                }
                leaf no-per-route-accounting {
                  type empty;
                  description
                    "Don't enable traffic accounting per flowspec route";
                }
              }  // choice per-route-accounting-choice
            }  // container flow
    
            container label {
              presence "enable label";
              description "Label processing";
              uses apply-advanced;
    
              leaf-list allocation {
                junos:must "(".. .. .. instance-type vrf")";
                junos:must-message "'allocation' policy is valid only for 'instance-type vrf'";
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Label allocation policy";
              }
    
              leaf-list substitution {
                junos:must "(".. .. .. instance-type vrf")";
                junos:must-message "'substitution' policy is valid only for 'instance-type vrf'";
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Label substitution policy";
              }
            }  // container label
          }  // list rib
    
          container label {
            presence "enable label";
            description "Label processing";
            uses apply-advanced;
    
            leaf-list allocation {
              junos:must "(".. .. .. instance-type vrf")";
              junos:must-message "'allocation' policy is valid only for 'instance-type vrf'";
              type jt:policy-algebra;
              ordered-by user;
              description
                "Label allocation policy";
            }
    
            leaf-list substitution {
              junos:must "(".. .. .. instance-type vrf")";
              junos:must-message "'substitution' policy is valid only for 'instance-type vrf'";
              type jt:policy-algebra;
              ordered-by user;
              description
                "Label substitution policy";
            }
          }  // container label
    
          container options {
            description "Miscellaneous options";
            uses apply-advanced;
    
            leaf no-send {
              type empty;
              status deprecated;
              description
                "Listen only; do not send protocol packets";
            }
    
            leaf no-resolve {
              type empty;
              status deprecated;
              description
                "Do not use DNS name resolution";
            }
    
            container syslog {
              description
                "Set system logging level";
              uses apply-advanced;
    
              container level {
                description "Logging level";
                leaf emergency {
                  type empty;
                  description "Emergency level";
                }
    
                leaf alert {
                  type empty;
                  description "Alert level";
                }
    
                leaf critical {
                  type empty;
                  description "Critical level";
                }
    
                leaf error {
                  type empty;
                  description "Error level";
                }
    
                leaf warning {
                  type empty;
                  description "Warning level";
                }
    
                leaf notice {
                  type empty;
                  description "Notice level";
                }
    
                leaf info {
                  type empty;
                  description
                    "Informational level";
                }
    
                leaf debug {
                  type empty;
                  description "Debugging level";
                }
              }  // container level
    
              leaf upto {
                type enumeration {
                  enum "emergency" {
                    value 0;
                    description
                      "Emergency level";
                  }
                  enum "alert" {
                    value 1;
                    description "Alert level";
                  }
                  enum "critical" {
                    value 2;
                    description "Critical level";
                  }
                  enum "error" {
                    value 3;
                    description "Error level";
                  }
                  enum "warning" {
                    value 4;
                    description "Warning level";
                  }
                  enum "notice" {
                    value 5;
                    description "Notice level";
                  }
                  enum "info" {
                    value 6;
                    description
                      "Informational level";
                  }
                  enum "debug" {
                    value 7;
                    description
                      "Debugging level";
                  }
                }
                description
                  "Log up to a particular logging level";
              }
            }  // container syslog
    
            leaf mark {
              type union {
                type int32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              units "seconds";
              description
                "Periodically mark the trace file";
            }
          }  // container options
    
          container resolution {
            presence "enable resolution";
            description
              "Route next-hop resolution options";
            uses apply-advanced;
    
            leaf-list tracefilter {
              type jt:policy-algebra;
              ordered-by user;
              description "Filter policy";
            }
    
            container traceoptions {
              description "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 "event" {
                      value 0;
                      description
                        "Event processing";
                    }
                    enum "flash" {
                      value 1;
                      description
                        "Flash processing";
                    }
                    enum "kernel" {
                      value 2;
                      description
                        "Kernel communication";
                    }
                    enum "indirect" {
                      value 3;
                      description
                        "Indirect next-hop addition, change, or deletion";
                    }
                    enum "task" {
                      value 4;
                      description
                        "Task or job processing";
                    }
                    enum "igp-frr" {
                      value 5;
                      description
                        "IGP triggered FRR events";
                    }
                    enum "igp-frr-extensive" {
                      value 6;
                      description
                        "IGP triggered FRR Extensive events";
                    }
                    enum "tunnel" {
                      value 7;
                      description
                        "Resolver dynamic tunnel events";
                    }
                    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
    
            choice preserve-nexthop-hierarchy-choice {
              leaf preserve-nexthop-hierarchy {
                type empty;
                description
                  "Preserve nexthop hierarchy when installing nexthop to forwarding plane";
              }
              leaf no-preserve-nexthop-hierarchy {
                type empty;
                description
                  "Don't preserve nexthop hierarchy when installing nexthop to forwarding plane";
              }
            }  // choice preserve-nexthop-hierarchy-choice
    
            list rib {
              key "name";
              ordered-by user;
              description
                "Routing table resolution options";
              leaf name {
                type string;
                description "Routing table name";
              }
    
              uses apply-advanced;
    
              leaf-list resolution-family {
                type string;
                ordered-by user;
                description
                  "Family of resultion tree";
              }
    
              leaf-list resolution-ribs {
                type string;
                ordered-by user;
                description
                  "Routing tables to use for default routing table family resolution";
              }
    
              leaf-list inet-resolution-ribs {
                type string;
                ordered-by user;
                description
                  "Routing tables to use for ipv4 family protocol-next-hop resolution";
              }
    
              leaf-list inet6-resolution-ribs {
                type string;
                ordered-by user;
                description
                  "Routing tables to use for ipv6 family protocol-next-hop resolution";
              }
    
              leaf-list iso-resolution-ribs {
                type string;
                ordered-by user;
                description
                  "Routing tables to use for iso family protocol-next-hop resolution";
              }
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
    
              leaf-list inet-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for IPV4 family resolution tree";
              }
    
              leaf-list inet6-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for IPV6 family resolution tree";
              }
    
              leaf-list iso-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for ISO family resolution tree";
              }
    
              leaf-list inetcolor-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for INETCOLOR family resolution tree";
              }
    
              leaf-list inet6color-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for INET6COLOR family resolution tree";
              }
            }  // list rib
    
            choice prefer-recursive-primary-path-choice {
              leaf prefer-recursive-primary-path {
                type empty;
                description
                  "Prefer primary path to resolve nexthop during recursive-resolution";
              }
              leaf no-prefer-recursive-primary-path {
                type empty;
                description
                  "Don't prefer primary path to resolve nexthop during recursive-resolution";
              }
            }  // choice prefer-recursive-primary-path-choice
    
            list scheme {
              key "name";
              ordered-by user;
              description
                "Nexthop resolution fallback";
              leaf name {
                type string;
                description
                  "Name the resolution scheme";
              }
    
              uses apply-advanced;
    
              leaf-list resolution-ribs {
                junos:must "(!(".. transport-classes"))";
                junos:must-message "resolution-ribs and transport-classes are mutually exclusive options";
                type string;
                ordered-by user;
                description
                  "Routing tables to use for nexthop resolution, in fallback order";
              }
    
              leaf mapping-community {
                type jt:community;
                description
                  "Community on service-route that maps to this transport";
              }
            }  // list scheme
          }  // container resolution
    
          container interface-routes {
            description
              "Define routing table groups for interface routes";
            uses apply-advanced;
    
            container rib-group {
              description "Routing table group";
              uses rib_group_type;
            }  // container rib-group
    
            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;
    
              leaf-list import {
                type jt:policy-algebra;
                ordered-by user;
                description "Import policy";
              }
    
              container export {
                description
                  "Control exportability of local routes";
                uses apply-advanced;
    
                leaf point-to-point {
                  type empty;
                  description
                    "Make point-to-point routes exportable";
                }
    
                leaf lan {
                  type empty;
                  description
                    "Make LAN routes exportable";
                }
              }  // container export
            }  // list family
          }  // container interface-routes
    
          leaf loopback-strict-disable {
            type empty;
            description
              "Completely disable lo0 host prefix when in admin-down state";
          }
    
          container traceoptions {
            description
              "Global routing protocol 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 "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 "nsr-synchronization" {
                    value 3;
                    description
                      "Trace nonstop routing synchronization events";
                  }
                  enum "condition-manager" {
                    value 4;
                    description
                      "Trace condition manager events";
                  }
                  enum "graceful-restart" {
                    value 5;
                    description
                      "Trace Graceful Restart events";
                  }
                  enum "session" {
                    value 6;
                    description
                      "Trace Session ID allocations/deallocations";
                  }
                  enum "hfrr-fsm" {
                    value 7;
                    description
                      "Host FRR FSM events tracing";
                  }
                  enum "hfrr-route" {
                    value 8;
                    description
                      "Host FRR route events tracing";
                  }
                  enum "statistics-id-group" {
                    value 9;
                    description
                      "Trace Statistics ID Group operations";
                  }
                  enum "route-record" {
                    value 10;
                    description
                      "Trace route-record server-side events";
                  }
                  enum "jvision-lsp" {
                    value 11;
                    description
                      "Trace Jvision events and errors";
                  }
                  enum "dyn-nh-template" {
                    value 12;
                    description
                      "Dynamic nexthops template events tracing";
                  }
                  enum "read-route" {
                    value 13;
                    description
                      "Read route events tracing";
                  }
                  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 disable {
                type empty;
                description
                  "Disable this trace flag";
              }
            }  // list flag
          }  // container traceoptions
    
          container topologies {
            junos:must "(!("routing-options no-multi-topology-routing"))";
            junos:must-message "Multi topology routing is disabled";
            description
              "Define routing topologies";
            uses apply-advanced;
    
            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 topology {
                key "name";
                ordered-by user;
                description
                  "Topology information";
                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;
              }  // list topology
            }  // list family
          }  // container topologies
    
          leaf router-id {
            type jt:ipv4addr;
            description "Router identifier";
          }
    
          container autonomous-system {
            description
              "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 asdot-notation {
              type empty;
              description
                "Use AS-Dot notation to display true 4 byte AS numbers";
            }
    
            container independent-domain {
              presence
                "enable independent-domain";
              description
                "Independent autonomous-system domain from master instance";
              container no-attrset {
                presence "enable no-attrset";
                description
                  "Do not tunnel ce bgp attributes across provider network";
              }  // container no-attrset
            }  // container independent-domain
          }  // container autonomous-system
    
          container confederation {
            description
              "Confederation autonomous system number";
            leaf confederation-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";
            }
    
            leaf-list members {
              type string;
              ordered-by user;
              description
                " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format";
            }
          }  // container confederation
    
          leaf ipv6-router-id {
            type string;
            description "IPv6 router identifier";
          }
    
          container graceful-restart {
            junos:must "(!("routing-options nonstop-routing"))";
            junos:must-message "Graceful restart and Nonstop routing may not be enabled simultaneously";
            presence "enable graceful-restart";
            description
              "Graceful or hitless routing restart options";
            uses apply-advanced;
    
            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 "120 .. 10000";
                }
              }
              description
                "Maximum time for which router is in graceful restart";
            }
          }  // container graceful-restart
    
          container flow {
            description
              "Locally defined flow routing information";
            uses apply-advanced;
    
            leaf firewall-install-disable {
              type empty;
              description
                "Disable installing flowspec firewall filters in dfwd ";
            }
    
            choice per-route-accounting-choice {
              leaf per-route-accounting {
                type empty;
                description
                  "Enable traffic accounting per flowspec route";
              }
              leaf no-per-route-accounting {
                type empty;
                description
                  "Don't enable traffic accounting per flowspec route";
              }
            }  // choice per-route-accounting-choice
    
            container validation {
              presence "enable validation";
              description
                "Flow route validation options";
              uses flow-validation;
            }  // container validation
    
            container interface-group {
              description
                "Interface-group for applying flow-spec filter";
              uses flow-interface-group;
            }  // container interface-group
    
            list route {
              key "name";
              ordered-by user;
              description "Flow route";
              uses flow-route-inet;
            }  // list route
    
            leaf term-order {
              type enumeration {
                enum "legacy" {
                  value 0;
                  description
                    "Legacy term order (default)";
                }
                enum "standard" {
                  value 1;
                  description
                    "RFC compliant term order";
                }
              }
              description
                "Term evaluation order for flow routes";
            }
    
            leaf discard-action-for-unresolved-redir-addr {
              type empty;
              description
                "For action redirect IP if redirect address is unresolved install discard action filter";
            }
          }  // container flow
    
          leaf no-soft-core {
            type empty;
            description
              "Disable soft assert to generate core and just log the event";
          }
    
          leaf med-igp-update-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 600";
              }
            }
            description
              "Delay (in minutes) in updating MED IGP for bgp groups with 'delay-med-update' ";
          }
    
          container bmp {
            presence "enable bmp";
            description
              "BGP Monitoring Protocol (BMP) configuration";
            uses apply-advanced;
    
            leaf authentication-key {
              type string {
                length "1 .. 126";
              }
              description
                "MD5 authentication key";
            }
    
            leaf authentication-algorithm {
              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";
            }
    
            container hold-down {
              presence "enable hold-down";
              leaf hold-down-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Prevent re-establishment for this time";
              }
    
              leaf flaps {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 10";
                  }
                }
                description
                  "Number of flaps before damping";
              }
    
              leaf period {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "30 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Time period for flaps";
              }
            }  // container hold-down
    
            leaf initiation-message {
              type string {
                length "1 .. 255";
              }
              description
                "User string sent with the initiation message";
            }
    
            leaf local-address {
              type jt:ipaddr;
              description
                "Address of local end of BMP session";
            }
    
            leaf local-port {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1024 .. 65535";
                }
              }
              description
                "Local port for listening";
            }
    
            leaf connection-mode {
              type enumeration {
                enum "active" {
                  value 0;
                  description
                    "Initiate the connection";
                }
                enum "passive" {
                  value 1;
                  description
                    "Listen for the connection";
                }
              }
              description
                "Specify active or passive";
            }
    
            leaf priority {
              type enumeration {
                enum "low" {
                  value 0;
                  description "Lowest priority";
                }
                enum "medium" {
                  value 1;
                  description "Medium priority";
                }
                enum "high" {
                  value 2;
                  description "Highest priority";
                }
              }
              description
                "Relative dispatch priority";
            }
    
            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") && !(".. loc-rib")))))";
                junos:must-message "May not be configured with pre-policy or post-policy or rib-out or loc-rib";
                type empty;
                description
                  "Do not send route monitoring messages";
              }
    
              leaf loc-rib {
                junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))";
                junos:must-message "Update threading can't be configured alone with bmp loc-rib monitoring";
                type empty;
                description
                  "Send local-rib 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 alone 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
    
            leaf max-loc-rib-buffer-count {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 50";
                }
              }
              description
                "Max number of loc-rib outstanding buffers before blocking";
            }
    
            leaf station-address {
              type jt:ipaddr;
              description
                "Address/name of monitoring station";
            }
    
            leaf routing-instance {
              type string;
              description
                "Routing-instance through which BMP station is reachable";
            }
    
            leaf station-port {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Port of monitoring station";
            }
    
            leaf statistics-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 65535";
                }
              }
              units "seconds";
              description
                "Statistics message timer, 15-65535, or 0 for no messages";
            }
    
            container traceoptions {
              description "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
                  "Trace flag information";
                leaf name {
                  type enumeration {
                    enum "packets" {
                      value 0;
                      description
                        "Trace all messages";
                    }
                    enum "up" {
                      value 1;
                      description
                        "Trace up messages";
                    }
                    enum "down" {
                      value 2;
                      description
                        "Trace down messages";
                    }
                    enum "statistics" {
                      value 3;
                      description
                        "Trace statistics messages";
                    }
                    enum "route-monitoring" {
                      value 4;
                      description
                        "Trace route monitoring messages";
                    }
                    enum "event" {
                      value 5;
                      description
                        "Trace major events, station establishment, errors, events";
                    }
                    enum "error" {
                      value 6;
                      description
                        "Trace error conditions";
                    }
                    enum "write" {
                      value 7;
                      description
                        "Trace writing of messages";
                    }
                    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 station {
              key "name";
              description "Define a BMP station";
              leaf name {
                type string;
                description "Station name";
              }
    
              uses apply-advanced;
    
              leaf authentication-key {
                type string {
                  length "1 .. 126";
                }
                description
                  "MD5 authentication key";
              }
    
              leaf authentication-algorithm {
                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 hold-down {
                presence "enable hold-down";
                leaf hold-down-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "30 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Prevent re-establishment for this time";
                }
    
                leaf flaps {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "2 .. 10";
                    }
                  }
                  description
                    "Number of flaps before damping";
                }
    
                leaf period {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "30 .. 65535";
                    }
                  }
                  units "seconds";
                  description
                    "Time period for flaps";
                }
              }  // container hold-down
    
              leaf initiation-message {
                type string {
                  length "1 .. 255";
                }
                description
                  "User string sent with the initiation message";
              }
    
              leaf local-address {
                type jt:ipaddr;
                description
                  "Address of local end of BMP session";
              }
    
              leaf local-port {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1024 .. 65535";
                  }
                }
                description
                  "Local port for listening";
              }
    
              leaf connection-mode {
                type enumeration {
                  enum "active" {
                    value 0;
                    description
                      "Initiate the connection";
                  }
                  enum "passive" {
                    value 1;
                    description
                      "Listen for the connection";
                  }
                }
                description
                  "Specify active or passive";
              }
    
              leaf priority {
                type enumeration {
                  enum "low" {
                    value 0;
                    description
                      "Lowest priority";
                  }
                  enum "medium" {
                    value 1;
                    description
                      "Medium priority";
                  }
                  enum "high" {
                    value 2;
                    description
                      "Highest priority";
                  }
                }
                description
                  "Relative dispatch priority";
              }
    
              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") && !(".. loc-rib")))))";
                  junos:must-message "May not be configured with pre-policy or post-policy or rib-out or loc-rib";
                  type empty;
                  description
                    "Do not send route monitoring messages";
                }
    
                leaf loc-rib {
                  junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))";
                  junos:must-message "Update threading can't be configured alone with bmp loc-rib monitoring";
                  type empty;
                  description
                    "Send local-rib 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 alone 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
    
              leaf max-loc-rib-buffer-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 50";
                  }
                }
                description
                  "Max number of loc-rib outstanding buffers before blocking";
              }
    
              leaf station-address {
                type jt:ipaddr;
                description
                  "Address/name of monitoring station";
              }
    
              leaf routing-instance {
                type string;
                description
                  "Routing-instance through which BMP station is reachable";
              }
    
              leaf station-port {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description
                  "Port of monitoring station";
              }
    
              leaf statistics-timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Statistics message timer, 15-65535, or 0 for no messages";
              }
    
              container traceoptions {
                description "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
                    "Trace flag information";
                  leaf name {
                    type enumeration {
                      enum "packets" {
                        value 0;
                        description
                          "Trace all messages";
                      }
                      enum "up" {
                        value 1;
                        description
                          "Trace up messages";
                      }
                      enum "down" {
                        value 2;
                        description
                          "Trace down messages";
                      }
                      enum "statistics" {
                        value 3;
                        description
                          "Trace statistics messages";
                      }
                      enum "route-monitoring" {
                        value 4;
                        description
                          "Trace route monitoring messages";
                      }
                      enum "event" {
                        value 5;
                        description
                          "Trace major events, station establishment, errors, events";
                      }
                      enum "error" {
                        value 6;
                        description
                          "Trace error conditions";
                      }
                      enum "write" {
                        value 7;
                        description
                          "Trace writing of messages";
                      }
                      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 station
          }  // container bmp
    
          leaf bgp-orf-cisco-mode {
            type empty;
            description
              "Using BGP ORF capability code 130 and Prefix ORF type 128";
          }
    
          leaf highwatermark-log-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "5 .. 1200";
              }
            }
            units "seconds";
            description
              "High watermark log interval (default 30 seconds)";
          }
    
          leaf time-averaged-watermark-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 15";
              }
            }
            units "days";
            description
              "For calculating average watermark";
          }
    
          container ppm {
            presence "enable ppm";
            description
              "Set periodic packet management properties";
            uses apply-advanced;
    
            leaf delegate-processing {
              type empty;
              status deprecated;
              description
                "Enable distribution of PPM sessions";
            }
    
            leaf no-delegate-processing {
              type empty;
              description
                "Disable PPM sessions distribution";
            }
    
            leaf redistribution-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 120";
                }
              }
              description
                "Time to wait after switchover before starting timers";
            }
          }  // container ppm
    
          leaf no-bfd-triggered-local-repair {
            type empty;
            description
              "Disable bfd triggered local repair";
          }
    
          leaf maximum-ecmp {
            type enumeration {
              enum "16" {
                value 0;
                description
                  "Maximum 16 ECMP routes";
              }
              enum "32" {
                value 1;
                description
                  "Maximum 32 ECMP routes";
              }
              enum "64" {
                value 2;
                description
                  "Maximum 64 ECMP routes";
              }
              enum "96" {
                value 3;
                description
                  "Maximum 96 ECMP routes";
              }
              enum "128" {
                value 4;
                description
                  "Maximum 128 ECMP routes";
              }
              enum "160" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 5;
                description
                  "Maximum 160 ECMP routes";
              }
              enum "192" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 6;
                description
                  "Maximum 192 ECMP routes";
              }
              enum "224" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 7;
                description
                  "Maximum 224 ECMP routes";
              }
              enum "256" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 8;
                description
                  "Maximum 256 ECMP routes";
              }
              enum "288" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 9;
                description
                  "Maximum 288 ECMP routes";
              }
              enum "320" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 10;
                description
                  "Maximum 320 ECMP routes";
              }
              enum "352" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 11;
                description
                  "Maximum 352 ECMP routes";
              }
              enum "384" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 12;
                description
                  "Maximum 384 ECMP routes";
              }
              enum "416" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 13;
                description
                  "Maximum 416 ECMP routes";
              }
              enum "448" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 14;
                description
                  "Maximum 448 ECMP routes";
              }
              enum "480" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 15;
                description
                  "Maximum 480 ECMP routes";
              }
              enum "512" {
                junos:must "(!("system processes routing force-32-bit"))";
                junos:must-message "32-bit rpd doesn't support ecmp greater than 128";
                value 16;
                description
                  "Maximum 512 ECMP routes";
              }
            }
            description
              "Maximum ECMP limit for nexthops";
          }
    
          container static {
            description "Static routes";
            uses apply-advanced;
    
            leaf rib-group {
              type string;
              description "Routing table group";
            }
    
            container defaults {
              description "Global route options";
              uses apply-advanced;
    
              choice retain-choice {
                leaf retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Always keep route in forwarding table";
                }
                leaf no-retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Don't always keep route in forwarding table";
                }
              }  // choice retain-choice
    
              choice install-choice {
                leaf install {
                  type empty;
                  description
                    "Install route into forwarding table";
                }
                leaf no-install {
                  type empty;
                  description
                    "Don't install route into forwarding table";
                }
              }  // choice install-choice
    
              choice readvertise-choice {
                leaf readvertise {
                  type empty;
                  description
                    "Mark route as eligible to be readvertised";
                }
                leaf no-readvertise {
                  type empty;
                  description
                    "Don't mark route as eligible to be readvertised";
                }
              }  // choice readvertise-choice
    
              choice resolve-choice {
                leaf resolve {
                  type empty;
                  description
                    "Allow resolution of indirectly connected next hops";
                }
                leaf no-resolve {
                  type empty;
                  description
                    "Don't allow resolution of indirectly connected next hops";
                }
              }  // choice resolve-choice
    
              choice longest-match-choice {
                leaf longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Always use longest prefix match to resolve next hops";
                }
                leaf no-longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Don't always use longest prefix match to resolve next hops";
                }
              }  // choice longest-match-choice
    
              choice passive_flag {
                leaf active {
                  type empty;
                  description
                    "Remove inactive route from forwarding table";
                }
                leaf passive {
                  type empty;
                  description
                    "Retain inactive route in forwarding table";
                }
              }  // choice passive_flag
    
              container metric {
                presence "enable metric";
                description "Metric value";
                uses rib_static_metric_type;
              }  // container metric
    
              container metric2 {
                presence "enable metric2";
                description "Metric value 2";
                uses rib_static_metric_type;
              }  // container metric2
    
              container metric3 {
                presence "enable metric3";
                description "Metric value 3";
                uses rib_static_metric_type;
              }  // container metric3
    
              container metric4 {
                presence "enable metric4";
                description "Metric value 4";
                uses rib_static_metric_type;
              }  // container metric4
    
              container tag {
                presence "enable tag";
                description "Tag string";
                uses rib_static_metric_type;
              }  // container tag
    
              container tag2 {
                presence "enable tag2";
                description "Tag string 2";
                uses rib_static_metric_type;
              }  // container tag2
    
              container preference {
                presence "enable preference";
                description "Preference value";
                uses rib_static_metric_type;
              }  // container preference
    
              container preference2 {
                presence "enable preference2";
                description "Preference value 2";
                uses rib_static_metric_type;
              }  // container preference2
    
              container color {
                presence "enable color";
                description
                  "Color (preference) value";
                uses rib_static_metric_type;
              }  // container color
    
              container color2 {
                presence "enable color2";
                description
                  "Color (preference) value 2";
                uses rib_static_metric_type;
              }  // container color2
    
              leaf-list community {
                type jt:community;
                ordered-by user;
                description
                  "BGP community identifier";
              }
    
              container as-path {
                description
                  "Autonomous system path";
                uses apply-advanced;
    
                leaf path {
                  type string;
                  description
                    "Autonomous system path";
                }
    
                leaf origin {
                  type enumeration {
                    enum "igp" {
                      value 0;
                      description
                        "Path originated in the local IGP";
                    }
                    enum "egp" {
                      value 1;
                      description
                        "Path originated in another AS";
                    }
                    enum "incomplete" {
                      value 2;
                      description
                        "Path was learned by some other means";
                    }
                  }
                }
    
                leaf atomic-aggregate {
                  type empty;
                  description
                    "Add ATOMIC_AGGREGATE path attribute to route";
                }
    
                container aggregator {
                  presence "enable aggregator";
                  description
                    "Add AGGREGATOR path attribute to route";
                }  // container aggregator
    
                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 address {
                  type jt:ipv4addr;
                  description
                    "Address of BGP system that formed the route";
                }
              }  // container as-path
            }  // container defaults
    
            list route {
              key "name";
              ordered-by user;
              description "Static route";
              leaf name {
                type jt:ipprefix;
              }
    
              uses apply-advanced;
    
              choice next_hop {
                leaf-list next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "Next hop to destination";
                }
                leaf reject {
                  type empty;
                  description
                    "Drop packets to destination; send ICMP unreachables";
                }
                leaf discard {
                  type empty;
                  description
                    "Drop packets to destination; send no ICMP unreachables";
                }
                leaf receive {
                  type empty;
                  description
                    "Install a receive route for the destination";
                }
                leaf next-table {
                  type string {
                    junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$";
                    junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>";
                  }
                  description
                    "Next hop to another table";
                }
              }  // choice next_hop
    
              list qualified-next-hop {
                key "name";
                ordered-by user;
                description
                  "Next hop with qualifiers";
                uses qualified_nh_obj;
              }  // list qualified-next-hop
    
              leaf backup-pe-group {
                junos:must "(".. p2mp-lsp-next-hop")";
                junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop";
                type string;
                description
                  "Multicast source redundancy group";
              }
    
              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 neighbor {
                  type jt:ipaddr;
                  description
                    "BFD neighbor address";
                }
    
                leaf local-address {
                  type jt:ipaddr;
                  description
                    "BFD local address (for multihop only)";
                }
    
                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";
                }
    
                leaf minimum-receive-ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Minimum receive TTL below which to drop";
                }
              }  // container bfd-liveness-detection
    
              choice retain-choice {
                leaf retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Always keep route in forwarding table";
                }
                leaf no-retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Don't always keep route in forwarding table";
                }
              }  // choice retain-choice
    
              choice install-choice {
                leaf install {
                  type empty;
                  description
                    "Install route into forwarding table";
                }
                leaf no-install {
                  type empty;
                  description
                    "Don't install route into forwarding table";
                }
              }  // choice install-choice
    
              choice readvertise-choice {
                leaf readvertise {
                  type empty;
                  description
                    "Mark route as eligible to be readvertised";
                }
                leaf no-readvertise {
                  type empty;
                  description
                    "Don't mark route as eligible to be readvertised";
                }
              }  // choice readvertise-choice
    
              choice resolve-choice {
                leaf resolve {
                  type empty;
                  description
                    "Allow resolution of indirectly connected next hops";
                }
                leaf no-resolve {
                  type empty;
                  description
                    "Don't allow resolution of indirectly connected next hops";
                }
              }  // choice resolve-choice
    
              choice longest-match-choice {
                leaf longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Always use longest prefix match to resolve next hops";
                }
                leaf no-longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Don't always use longest prefix match to resolve next hops";
                }
              }  // choice longest-match-choice
    
              choice passive_flag {
                leaf active {
                  type empty;
                  description
                    "Remove inactive route from forwarding table";
                }
                leaf passive {
                  type empty;
                  description
                    "Retain inactive route in forwarding table";
                }
              }  // choice passive_flag
    
              container metric {
                presence "enable metric";
                description "Metric value";
                uses rib_static_metric_type;
              }  // container metric
    
              container metric2 {
                presence "enable metric2";
                description "Metric value 2";
                uses rib_static_metric_type;
              }  // container metric2
    
              container metric3 {
                presence "enable metric3";
                description "Metric value 3";
                uses rib_static_metric_type;
              }  // container metric3
    
              container metric4 {
                presence "enable metric4";
                description "Metric value 4";
                uses rib_static_metric_type;
              }  // container metric4
    
              container tag {
                presence "enable tag";
                description "Tag string";
                uses rib_static_metric_type;
              }  // container tag
    
              container tag2 {
                presence "enable tag2";
                description "Tag string 2";
                uses rib_static_metric_type;
              }  // container tag2
    
              container preference {
                presence "enable preference";
                description "Preference value";
                uses rib_static_metric_type;
              }  // container preference
    
              container preference2 {
                presence "enable preference2";
                description "Preference value 2";
                uses rib_static_metric_type;
              }  // container preference2
    
              container color {
                presence "enable color";
                description
                  "Color (preference) value";
                uses rib_static_metric_type;
              }  // container color
    
              container color2 {
                presence "enable color2";
                description
                  "Color (preference) value 2";
                uses rib_static_metric_type;
              }  // container color2
    
              leaf-list community {
                type jt:community;
                ordered-by user;
                description
                  "BGP community identifier";
              }
    
              container as-path {
                description
                  "Autonomous system path";
                uses apply-advanced;
    
                leaf path {
                  type string;
                  description
                    "Autonomous system path";
                }
    
                leaf origin {
                  type enumeration {
                    enum "igp" {
                      value 0;
                      description
                        "Path originated in the local IGP";
                    }
                    enum "egp" {
                      value 1;
                      description
                        "Path originated in another AS";
                    }
                    enum "incomplete" {
                      value 2;
                      description
                        "Path was learned by some other means";
                    }
                  }
                }
    
                leaf atomic-aggregate {
                  type empty;
                  description
                    "Add ATOMIC_AGGREGATE path attribute to route";
                }
    
                container aggregator {
                  presence "enable aggregator";
                  description
                    "Add AGGREGATOR path attribute to route";
                }  // container aggregator
    
                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 address {
                  type jt:ipv4addr;
                  description
                    "Address of BGP system that formed the route";
                }
              }  // container as-path
    
              list lsp-next-hop {
                key "name";
                ordered-by user;
                description "LSP next hop";
                uses lsp_nh_obj;
              }  // list lsp-next-hop
    
              list p2mp-lsp-next-hop {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Point-to-multipoint LSP next hop";
                uses lsp_nh_obj;
              }  // list p2mp-lsp-next-hop
    
              container spring-te-lsp-next-hop {
                junos:must "("protocols source-packet-routing tunnel-tracking")";
                junos:must-message "Please enable the tunnel-tracking  under 'protocols source-packet-routing' hierarchy";
                description
                  "SPRING-TE LSP next hop";
                uses springte_lsp_nh_obj;
              }  // container spring-te-lsp-next-hop
    
              container p2mp-ldp-next-hop {
                description
                  "Point-to-multipoint LDP LSP next hop";
                uses p2mp_ldp_lsp_nh_obj;
              }  // container p2mp-ldp-next-hop
    
              list static-lsp-next-hop {
                key "name";
                ordered-by user;
                description
                  "Static LSP next hop";
                uses lsp_nh_obj;
              }  // list static-lsp-next-hop
            }  // list route
    
            container static-route {
              description "Static route Status";
              leaf bfd-admin-down {
                type enumeration {
                  enum "active" {
                    value 0;
                    description
                      "Static route will be inactive on bfd-admin-down";
                  }
                  enum "passive" {
                    value 1;
                    description
                      "Static route will remain active on bfd-admin-down";
                  }
                }
                description
                  "Static route State on BFD ADMIN DOWN";
              }
            }  // container static-route
    
            list iso-route {
              key "name";
              ordered-by user;
              description
                "ISO family static route";
              leaf name {
                type jt:isoprefix;
              }
    
              uses apply-advanced;
    
              choice next_hop {
                leaf-list next-hop {
                  type union {
                    type jt:ipaddr-or-interface;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  ordered-by user;
                  description
                    "Next hop to destination";
                }
                leaf reject {
                  type empty;
                  description
                    "Drop packets to destination; send ICMP unreachables";
                }
                leaf discard {
                  type empty;
                  description
                    "Drop packets to destination; send no ICMP unreachables";
                }
                leaf receive {
                  type empty;
                  description
                    "Install a receive route for the destination";
                }
                leaf next-table {
                  type string {
                    junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$";
                    junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>";
                  }
                  description
                    "Next hop to another table";
                }
              }  // choice next_hop
    
              list qualified-next-hop {
                key "name";
                ordered-by user;
                description
                  "Next hop with qualifiers";
                uses qualified_nh_obj;
              }  // list qualified-next-hop
    
              leaf backup-pe-group {
                junos:must "(".. p2mp-lsp-next-hop")";
                junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop";
                type string;
                description
                  "Multicast source redundancy group";
              }
    
              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 neighbor {
                  type jt:ipaddr;
                  description
                    "BFD neighbor address";
                }
    
                leaf local-address {
                  type jt:ipaddr;
                  description
                    "BFD local address (for multihop only)";
                }
    
                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";
                }
    
                leaf minimum-receive-ttl {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint8 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Minimum receive TTL below which to drop";
                }
              }  // container bfd-liveness-detection
    
              choice retain-choice {
                leaf retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Always keep route in forwarding table";
                }
                leaf no-retain {
                  junos:must "(!(".. resolve"))";
                  junos:must-message "Must not specify resolve with retain";
                  type empty;
                  description
                    "Don't always keep route in forwarding table";
                }
              }  // choice retain-choice
    
              choice install-choice {
                leaf install {
                  type empty;
                  description
                    "Install route into forwarding table";
                }
                leaf no-install {
                  type empty;
                  description
                    "Don't install route into forwarding table";
                }
              }  // choice install-choice
    
              choice readvertise-choice {
                leaf readvertise {
                  type empty;
                  description
                    "Mark route as eligible to be readvertised";
                }
                leaf no-readvertise {
                  type empty;
                  description
                    "Don't mark route as eligible to be readvertised";
                }
              }  // choice readvertise-choice
    
              choice resolve-choice {
                leaf resolve {
                  type empty;
                  description
                    "Allow resolution of indirectly connected next hops";
                }
                leaf no-resolve {
                  type empty;
                  description
                    "Don't allow resolution of indirectly connected next hops";
                }
              }  // choice resolve-choice
    
              choice longest-match-choice {
                leaf longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Always use longest prefix match to resolve next hops";
                }
                leaf no-longest-match {
                  junos:must "(".. resolve")";
                  junos:must-message "Requires resolve to be configured";
                  type empty;
                  description
                    "Don't always use longest prefix match to resolve next hops";
                }
              }  // choice longest-match-choice
    
              choice passive_flag {
                leaf active {
                  type empty;
                  description
                    "Remove inactive route from forwarding table";
                }
                leaf passive {
                  type empty;
                  description
                    "Retain inactive route in forwarding table";
                }
              }  // choice passive_flag
    
              container metric {
                presence "enable metric";
                description "Metric value";
                uses rib_static_metric_type;
              }  // container metric
    
              container metric2 {
                presence "enable metric2";
                description "Metric value 2";
                uses rib_static_metric_type;
              }  // container metric2
    
              container metric3 {
                presence "enable metric3";
                description "Metric value 3";
                uses rib_static_metric_type;
              }  // container metric3
    
              container metric4 {
                presence "enable metric4";
                description "Metric value 4";
                uses rib_static_metric_type;
              }  // container metric4
    
              container tag {
                presence "enable tag";
                description "Tag string";
                uses rib_static_metric_type;
              }  // container tag
    
              container tag2 {
                presence "enable tag2";
                description "Tag string 2";
                uses rib_static_metric_type;
              }  // container tag2
    
              container preference {
                presence "enable preference";
                description "Preference value";
                uses rib_static_metric_type;
              }  // container preference
    
              container preference2 {
                presence "enable preference2";
                description "Preference value 2";
                uses rib_static_metric_type;
              }  // container preference2
    
              container color {
                presence "enable color";
                description
                  "Color (preference) value";
                uses rib_static_metric_type;
              }  // container color
    
              container color2 {
                presence "enable color2";
                description
                  "Color (preference) value 2";
                uses rib_static_metric_type;
              }  // container color2
    
              leaf-list community {
                type jt:community;
                ordered-by user;
                description
                  "BGP community identifier";
              }
    
              container as-path {
                description
                  "Autonomous system path";
                uses apply-advanced;
    
                leaf path {
                  type string;
                  description
                    "Autonomous system path";
                }
    
                leaf origin {
                  type enumeration {
                    enum "igp" {
                      value 0;
                      description
                        "Path originated in the local IGP";
                    }
                    enum "egp" {
                      value 1;
                      description
                        "Path originated in another AS";
                    }
                    enum "incomplete" {
                      value 2;
                      description
                        "Path was learned by some other means";
                    }
                  }
                }
    
                leaf atomic-aggregate {
                  type empty;
                  description
                    "Add ATOMIC_AGGREGATE path attribute to route";
                }
    
                container aggregator {
                  presence "enable aggregator";
                  description
                    "Add AGGREGATOR path attribute to route";
                }  // container aggregator
    
                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 address {
                  type jt:ipv4addr;
                  description
                    "Address of BGP system that formed the route";
                }
              }  // container as-path
    
              list lsp-next-hop {
                key "name";
                ordered-by user;
                description "LSP next hop";
                uses lsp_nh_obj;
              }  // list lsp-next-hop
    
              list p2mp-lsp-next-hop {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Point-to-multipoint LSP next hop";
                uses lsp_nh_obj;
              }  // list p2mp-lsp-next-hop
    
              container spring-te-lsp-next-hop {
                junos:must "("protocols source-packet-routing tunnel-tracking")";
                junos:must-message "Please enable the tunnel-tracking  under 'protocols source-packet-routing' hierarchy";
                description
                  "SPRING-TE LSP next hop";
                uses springte_lsp_nh_obj;
              }  // container spring-te-lsp-next-hop
    
              container p2mp-ldp-next-hop {
                description
                  "Point-to-multipoint LDP LSP next hop";
                uses p2mp_ldp_lsp_nh_obj;
              }  // container p2mp-ldp-next-hop
            }  // list iso-route
    
            list route-target-filter {
              key "name";
              ordered-by user;
              description
                "Route-target-filter route";
              leaf name {
                type string {
                  junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$";
                  junos:pattern-message "Use format 'x:y/len' 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 and len is a prefix length from 0 to 64";
                  length "1 .. 47";
                }
              }
    
              uses apply-advanced;
    
              leaf-list neighbor {
                type jt:ipaddr-scoped;
                ordered-by user;
                description
                  "BGP peers for filter";
              }
    
              leaf-list group {
                type string;
                ordered-by user;
                description
                  "BGP groups for filter";
              }
    
              leaf local {
                type empty;
                description
                  "Locally originated filter";
              }
            }  // list route-target-filter
          }  // container static
    
          list martians {
            key "address choice-ident choice-value";
            ordered-by user;
            description "Invalid routes";
            uses martian_type;
          }  // list martians
    
          container aggregate {
            description "Coalesced routes";
            uses rib_aggregate_type;
          }  // container aggregate
    
          container generate {
            description "Route of last resort";
            uses rib_aggregate_type;
          }  // container generate
    
          choice maximum-paths-type {
            container maximum-routes {
              status deprecated;
              description
                "Maximum number of routes";
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Maximum number of routes";
              }
    
              choice log_type {
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of limit at which to start generating warnings";
                }
                leaf log-only {
                  type empty;
                  description
                    "Generate warning messages only";
                }
              }  // choice log_type
    
              leaf log-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "5 .. 86400";
                  }
                }
                units "seconds";
                description
                  "Minimum interval between log messages";
              }
            }  // container maximum-routes
            container maximum-paths {
              description
                "Maximum number of paths";
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                description
                  "Maximum number of paths";
              }
    
              choice log_type {
                leaf threshold {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage of limit at which to start generating warnings";
                }
                leaf log-only {
                  type empty;
                  description
                    "Generate warning messages only";
                }
              }  // choice log_type
    
              leaf log-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "5 .. 86400";
                  }
                }
                units "seconds";
                description
                  "Minimum interval between log messages";
              }
            }  // container maximum-paths
          }  // choice maximum-paths-type
    
          container maximum-prefixes {
            description
              "Maximum number of prefixes";
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4294967295";
                }
              }
              description
                "Maximum number of prefixes";
            }
    
            choice log_type {
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                description
                  "Percentage of limit at which to start generating warnings";
              }
              leaf log-only {
                type empty;
                description
                  "Generate warning messages only";
              }
            }  // choice log_type
    
            leaf log-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "5 .. 86400";
                }
              }
              units "seconds";
              description
                "Minimum interval between log messages";
            }
          }  // container maximum-prefixes
    
          container multipath {
            presence "enable multipath";
            description
              "Protocol-independent load balancing";
            uses apply-advanced;
    
            container vpn-unequal-cost {
              presence "enable vpn-unequal-cost";
              description
                "Include VPN routes with unequal IGP metrics";
              leaf equal-external-internal {
                type empty;
                description
                  "Include external and internal VPN routes";
              }
            }  // container vpn-unequal-cost
    
            leaf as-path-compare {
              type empty;
              description
                "Compare AS path sequences in addition to AS path length";
            }
    
            leaf preserve-nexthop-hierarchy {
              type empty;
              description
                "Force multipath to create List nexthop";
            }
          }  // container multipath
    
          container policy-multipath {
            description "Policy based multipath";
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Import policy to create policy based multipath";
            }
    
            container traceoptions {
              description "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 "route" {
                      value 0;
                      description
                        "Policy-multipath route tracing.";
                    }
                  }
                }
    
                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 policy-multipath
    
          container protect {
            description
              "Protocol-independent protection";
            leaf core {
              type empty;
              description
                "Protect against unreachability to service-edge router";
            }
          }  // container protect
    
          container access {
            description "Access routes";
            uses apply-advanced;
    
            list route {
              key "name";
              ordered-by user;
              description "Access route";
              leaf name {
                type jt:ipprefix;
                description
                  "IP address of destination";
              }
    
              uses apply-advanced;
    
              leaf-list next-hop {
                type union {
                  type jt:ipaddr-or-interface;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                ordered-by user;
                description
                  "Next hop to destination";
              }
    
              list qualified-next-hop {
                key "name";
                ordered-by user;
                description
                  "Next hop with qualifiers";
                uses qualified_nh_obj;
              }  // list qualified-next-hop
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description "Metric value";
              }
    
              leaf preference {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Preference value";
              }
    
              leaf tag {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Tag string";
              }
    
              leaf tag2 {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Tag2 string";
              }
            }  // list route
          }  // container access
    
          container access-internal {
            description "Access-internal routes";
            uses apply-advanced;
    
            list route {
              key "name";
              ordered-by user;
              description
                "Access-internal route";
              leaf name {
                type jt:ipprefix;
                description
                  "IP address and optional prefix length of destination";
              }
    
              uses apply-advanced;
    
              leaf-list next-hop {
                type union {
                  type jt:ipaddr-or-interface;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                ordered-by user;
                description
                  "Next hop to destination";
              }
    
              list qualified-next-hop {
                key "name";
                ordered-by user;
                description
                  "Next hop with qualifiers";
                uses qualified_nh_obj;
              }  // list qualified-next-hop
            }  // list route
          }  // container access-internal
    
          container bgp-static {
            description
              "Routes for BGP static advertisements";
            uses apply-advanced;
    
            list route {
              key "name";
              ordered-by user;
              description "BGP-static route";
              leaf name {
                type jt:ipprefix;
                description
                  "IP address and optional prefix length of destination";
              }
    
              uses apply-advanced;
    
              container metric {
                presence "enable metric";
                description "Metric value";
                uses rib_static_metric_type;
              }  // container metric
    
              container metric2 {
                presence "enable metric2";
                description "Metric value 2";
                uses rib_static_metric_type;
              }  // container metric2
    
              container metric3 {
                presence "enable metric3";
                description "Metric value 3";
                uses rib_static_metric_type;
              }  // container metric3
    
              container metric4 {
                presence "enable metric4";
                description "Metric value 4";
                uses rib_static_metric_type;
              }  // container metric4
    
              container tag {
                presence "enable tag";
                description "Tag string";
                uses rib_static_metric_type;
              }  // container tag
    
              container tag2 {
                presence "enable tag2";
                description "Tag string 2";
                uses rib_static_metric_type;
              }  // container tag2
    
              container preference {
                presence "enable preference";
                description "Preference value";
                uses rib_static_metric_type;
              }  // container preference
    
              container preference2 {
                presence "enable preference2";
                description "Preference value 2";
                uses rib_static_metric_type;
              }  // container preference2
    
              container color {
                presence "enable color";
                description
                  "Color (preference) value";
                uses rib_static_metric_type;
              }  // container color
    
              container color2 {
                presence "enable color2";
                description
                  "Color (preference) value 2";
                uses rib_static_metric_type;
              }  // container color2
    
              leaf-list community {
                type jt:community;
                ordered-by user;
                description
                  "BGP community identifier";
              }
    
              container as-path {
                description
                  "Autonomous system path";
                uses apply-advanced;
    
                leaf path {
                  type string;
                  description
                    "Autonomous system path";
                }
    
                leaf origin {
                  type enumeration {
                    enum "igp" {
                      value 0;
                      description
                        "Path originated in the local IGP";
                    }
                    enum "egp" {
                      value 1;
                      description
                        "Path originated in another AS";
                    }
                    enum "incomplete" {
                      value 2;
                      description
                        "Path was learned by some other means";
                    }
                  }
                }
    
                leaf atomic-aggregate {
                  type empty;
                  description
                    "Add ATOMIC_AGGREGATE path attribute to route";
                }
    
                container aggregator {
                  presence "enable aggregator";
                  description
                    "Add AGGREGATOR path attribute to route";
                }  // container aggregator
    
                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 address {
                  type jt:ipv4addr;
                  description
                    "Address of BGP system that formed the route";
                }
              }  // container as-path
            }  // list route
          }  // container bgp-static
    
          list rib-groups {
            key "name";
            ordered-by user;
            description
              "Group of routing tables";
            uses rpd_rib_group_type;
          }  // list rib-groups
    
          leaf route-record {
            type empty;
            description "Enable route recording";
          }
    
          leaf-list instance-import {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy for instance RIBs";
          }
    
          leaf-list instance-export {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Export policy for instance RIBs";
          }
    
          container auto-export {
            presence "enable auto-export";
            description
              "Export routes between routing instances";
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable auto-export";
              }
            }  // choice enable-disable
    
            container traceoptions {
              description "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 "export" {
                      value 0;
                      description
                        "Export processing";
                    }
                    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 family {
              container inet {
                description "IPv4 parameters";
                uses export-af-obj;
              }  // container inet
    
              container inet6 {
                description "IPv6 parameters";
                uses export-af-obj;
              }  // container inet6
    
              container iso {
                description "ISO parameters";
                uses export-af-obj;
              }  // container iso
            }  // container family
          }  // container auto-export
    
          container transport-class {
            junos:must "("routing-options route-distinguisher-id")";
            junos:must-message "transport classes use auto-rd. Please configure route-distinguisher-id";
            presence "enable transport-class";
            description
              "Transport layer options";
            uses apply-advanced;
    
            leaf auto-create {
              type empty;
              description
                "Auto create on color discovery";
            }
    
            list name {
              key "name";
              ordered-by user;
              description
                "Transport layer collecting Tunnels with similar characteristics";
              leaf name {
                type string;
                description
                  "Transport class name";
              }
    
              uses apply-advanced;
    
              leaf color {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Color(0..4294967295). This auto derives the Mapping Community and Route Target";
              }
            }  // list name
          }  // container transport-class
    
          container dynamic-tunnels {
            description
              "Dynamic tunnel definitions";
            uses apply-advanced;
    
            list tunnel-attributes {
              key "name";
              ordered-by user;
              description
                "Dynamic tunnel attributes definition";
              leaf name {
                type string {
                  junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)";
                  junos:pattern-message "Tunnel attribute name is a string consisting of up to 63 letters, numbers, dashes, and underscores";
                }
                description
                  "Dynamic Tunnel attribute name";
              }
    
              uses apply-advanced;
    
              leaf dynamic-tunnel-source-prefix {
                junos:must "(".. dynamic-tunnel-type V4oV6")";
                junos:must-message "Tunnel source address, only valid for V4oV6 tunnel type";
                type jt:ipaddr;
                description
                  "Tunnel source address";
              }
    
              leaf dynamic-tunnel-type {
                type enumeration {
                  enum "GRE" {
                    value 0;
                    description
                      "Tunnel type GRE";
                  }
                  enum "V4oV6" {
                    value 1;
                    description
                      "Tunnel type is IPV4oIPV6";
                  }
                  enum "UDP" {
                    value 2;
                    description
                      "Tunnel type UDP";
                  }
                  enum "BGP-SIGNAL" {
                    value 3;
                    description
                      "Tunnel type BGP-SIGNAL";
                  }
                }
              }
    
              leaf dynamic-tunnel-mtu {
                junos:must "(".. dynamic-tunnel-type V4oV6")";
                junos:must-message "Only supported for tunnel type V4oV6";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "296 .. 9232";
                  }
                }
                description
                  "Dynamic Tunnel MTU value";
              }
    
              leaf dynamic-tunnel-anchor-pfe {
                type string {
                  junos:posix-pattern "^(pfe-)[1-9]?[0-9]/[1-9]?[0-9]/[1-9]?[0-9]$";
                  junos:pattern-message "Must be a PFE interface of form pfe-x/y/z";
                }
                description
                  "Dynamic Tunnel anchor PFE name of format pfe-x/y/z";
              }
    
              leaf dynamic-tunnel-anti-spoof {
                junos:must "(".. dynamic-tunnel-type V4oV6")";
                junos:must-message "Only supported for tunnel type V4oV6";
                type enumeration {
                  enum "on" {
                    value 0;
                    description
                      "Enable antispoofing check. Default is enabled";
                  }
                  enum "off" {
                    value 1;
                    description
                      "Disable antispoofing check";
                  }
                }
              }
    
              leaf dynamic-tunnel-reassembly {
                junos:must "(".. dynamic-tunnel-type V4oV6")";
                junos:must-message "Only supported for tunnel type V4oV6";
                type enumeration {
                  enum "on" {
                    value 0;
                    description
                      "Enable reassembly check. Default is disabled";
                  }
                  enum "off" {
                    value 1;
                    description
                      "Disable reassembly check";
                  }
                }
              }
            }  // list tunnel-attributes
    
            list forwarding-rib {
              key "name";
              ordered-by user;
              description
                "Forwarding routing table for dynamic-tunnel";
              leaf name {
                type string;
                description "Routing table name";
              }
    
              uses apply-advanced;
    
              leaf-list inet-import {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Import policy for V4 dynamic-tunnel";
              }
            }  // list forwarding-rib
    
            container statistics {
              description
                "Fetch traffic statistics for  dynamic tunnels";
              uses apply-advanced;
    
              leaf interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                units "seconds";
                description
                  "Time after which statistics has to be fetched";
              }
            }  // container statistics
    
            container traceoptions {
              description "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 "kernel" {
                      value 0;
                      description
                        "Trace kernel communication";
                    }
                    enum "tunnel" {
                      value 1;
                      description
                        "Trace tunnel addition, change, or deletion";
                    }
                    enum "task" {
                      value 2;
                      description
                        "Trace task or job processing";
                    }
                    enum "tunnel-event" {
                      value 3;
                      description
                        "Trace create, delete, up, down event for nh based tunnel";
                    }
                    enum "flash-event" {
                      value 4;
                      description
                        "Trace flash event for tunnel forwarding route";
                    }
                    enum "stats-job" {
                      value 5;
                      description
                        "Trace taffic statistics job related stuff";
                    }
                    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
    
            leaf gre {
              type enumeration {
                enum "next-hop-based-tunnel" {
                  value 0;
                  description
                    "Enable nh base dynamic-tunnel";
                }
              }
              description
                "Enable dynamic gre tunnel mode";
            }
    
            list dynamic-tunnel {
              key "name";
              ordered-by user;
              uses dynamic_tunnel_type;
            }  // list dynamic-tunnel
          }  // container dynamic-tunnels
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Direct/Host route FRR protection";
            leaf name {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf arp-prefix-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10000";
                }
              }
              description
                "Max ARP/Host FRR routes allowed";
            }
    
            leaf supplementary-blackout-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 15";
                }
              }
              description
                "ARP plimit blackout timer = kernel ARP timeout + supplementary-blackout-timer minutes.";
            }
    
            choice protection-type {
              leaf link-protection {
                type empty;
                description
                  "Protect interface from link faults only";
              }
            }  // choice protection-type
          }  // list interface
    
          container host-fast-reroute {
            presence "enable host-fast-reroute";
            description
              "Host Fast Re-route global values. Applies to all host FRR profiles.";
            uses apply-advanced;
    
            leaf global-arp-prefix-limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10000";
                }
              }
              description
                "Max ARP/Host FRR routes allowed per protected IFL";
            }
    
            leaf global-supplementary-blackout-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 15";
                }
              }
              description
                "ARP plimit global blackout timer = kernel ARP timeout + global-supplementary-blackout-timer minutes.";
            }
          }  // container host-fast-reroute
    
          leaf warm-standby {
            junos:must "(!("routing-options nonstop-routing"))";
            junos:must-message "Warm standby and Nonstop routing cannot be enabled simultaneously";
            type empty;
            description "Enable warm-standby";
          }
    
          leaf nonstop-routing {
            type empty;
            description "Enable nonstop routing";
          }
    
          container nonstop-routing-options {
            presence
              "enable nonstop-routing-options";
            description
              "Nonstop routing options";
            uses apply-advanced;
    
            leaf precision-timers-max-period {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 1800";
                }
              }
              description
                "Set Max period for precision timer support from kernel after switchover";
            }
          }  // container nonstop-routing-options
    
          leaf nsr-phantom-holdtime {
            junos:must "("routing-options nonstop-routing")";
            junos:must-message "Nonstop routing must be enabled";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10000";
              }
            }
            description
              "Set NSR phantom route hold time";
          }
    
          list srlg {
            key "name";
            ordered-by user;
            description "SRLG configuration";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description "Group name";
            }
    
            uses apply-advanced;
    
            leaf srlg-value {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 4294967295";
                }
              }
              description "Group id";
            }
    
            leaf srlg-cost {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description "Cost value";
            }
          }  // list srlg
    
          container admin-groups-extended-range {
            description
              "Extended administrative groups range";
            uses apply-advanced;
    
            leaf minimum {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "32 .. 4294967295";
                }
              }
              description
                "Minimum value of the range for extended administrative groups";
            }
    
            leaf maximum {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "32 .. 4294967295";
                }
              }
              description
                "Maximum value of the range for extended administrative groups";
            }
          }  // container admin-groups-extended-range
    
          list admin-groups-extended {
            junos:must "(".. admin-groups-extended-range")";
            junos:must-message "admin-groups-extended-range must be configured with admin-groups-extended";
            key "name";
            ordered-by user;
            description
              "Extended administrative groups";
            leaf name {
              type string {
                length "1 .. 64";
              }
              description
                "Group name (Maximum length 64)";
            }
    
            uses apply-advanced;
    
            leaf group-value {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "32 .. 4294967295";
                }
              }
              description "Group id";
            }
          }  // list admin-groups-extended
    
          container source-routing {
            description "Source-routing options";
            uses apply-advanced;
    
            leaf ip {
              type empty;
              description
                "Enable IP Source Routing";
            }
    
            leaf ipv6 {
              type empty;
              description
                "Enable Type 0 RouteHeader processing";
            }
          }  // container source-routing
    
          container forwarding-table {
            uses forwarding-table-type;
          }  // container forwarding-table
    
          container fate-sharing {
            description
              "Fate-sharing links or nodes database";
            uses apply-advanced;
    
            list group {
              key "name";
              ordered-by user;
              description
                "Group of objects sharing common characteristics";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,32}$";
                  junos:pattern-message "Must be a string of <= 32 characters";
                }
                description
                  "Name of object groups sharing the same fate";
              }
    
              uses apply-advanced;
    
              leaf cost {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                description "Cost value";
              }
    
              leaf use-for-post-convergence-lfa {
                type empty;
                description
                  "Use this fate-sharing group as a constraint for post-convergence-lfa";
              }
    
              list from {
                key "name";
                uses fate_sharing_links;
              }  // list from
            }  // list group
          }  // container fate-sharing
    
          container multicast {
            description
              "Global multicast options";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Global multicast 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 "parse" {
                      value 0;
                      description
                        "Trace configuration parsing";
                    }
                    enum "config-internal" {
                      value 1;
                      description
                        "Trace configuration internals";
                    }
                    enum "route" {
                      value 2;
                      description
                        "Trace routing information";
                    }
                    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 "policy" {
                      value 6;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 7;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 8;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "all" {
                      value 9;
                      description
                        "Trace everything";
                    }
                  }
                }
    
                leaf disable {
                  type empty;
                  description
                    "Disable this trace flag";
                }
              }  // list flag
            }  // container traceoptions
    
            leaf rpf {
              type string;
              status deprecated;
            }
    
            list scope {
              key "name";
              ordered-by user;
              description
                "Multicast address scope";
              leaf name {
                type string;
                description
                  "Name to identify multicast address scope";
              }
    
              uses apply-advanced;
    
              leaf prefix {
                type jt:ipprefix;
                description
                  "Administratively scoped address";
              }
    
              leaf-list interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                ordered-by user;
                description
                  "Interface on which to configure scoping";
              }
            }  // list scope
    
            leaf-list scope-policy {
              type jt:policy-algebra;
              ordered-by user;
              description "Scoping policy";
            }
    
            list flow-map {
              key "name";
              ordered-by user;
              description
                "Multicast flow map configuration";
              leaf name {
                type string;
                description
                  "Name of the flow map";
              }
    
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Policy for matched flows";
              }
    
              container bandwidth {
                presence "enable bandwidth";
                description
                  "Bandwidth properties for matched flows";
                leaf bandwidth-value {
                  type string;
                  units "bps";
                  description
                    "Static or default bandwidth for the matched flows";
                }
    
                leaf adaptive {
                  type empty;
                  description
                    "Auto-sense bandwidth for matched flows";
                }
              }  // container bandwidth
    
              leaf-list redundant-sources {
                junos:must "(".. bandwidth adaptive")";
                junos:must-message "redundant-sources can only be configured together with 'bandwidth adaptive'";
                type jt:ipaddr;
                ordered-by user;
                description
                  "Redundant source addresses";
              }
    
              container forwarding-cache {
                description
                  "Forwarding cache properties for matched flows";
                uses apply-advanced;
    
                container timeout {
                  description
                    "Timeout properties for matched flows";
                  choice timeout_choice {
                    leaf timeout-value {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 720";
                        }
                      }
                      units "minutes";
                      description
                        "Timeout for forwarding cache entry";
                    }
                    container never {
                      presence "enable never";
                      description
                        "Forwarding cache entries never time out";
                      uses apply-advanced;
    
                      leaf non-discard-entry-only {
                        type empty;
                        description
                          "Apply only to non-discard entries";
                      }
                    }  // container never
                  }  // choice timeout_choice
                }  // container timeout
              }  // container forwarding-cache
            }  // list flow-map
    
            leaf-list resolve-filter {
              type jt:policy-algebra;
              ordered-by user;
              status deprecated;
              description
                "Multicast resolve policy filter";
            }
    
            leaf-list ssm-groups {
              type jt:ipprefix;
              ordered-by user;
              description
                "Source-specific multicast group ranges";
            }
    
            leaf cont-stats-collection-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "60 .. 3600";
                }
              }
              default "300";
              description
                "IGMP/MLD continuous statistics collection interval";
            }
    
            leaf asm-override-ssm {
              type empty;
              description
                "Allow ASM state for SSM group ranges";
            }
    
            leaf-list rpf-check-policy {
              type jt:policy-algebra;
              ordered-by user;
              description
                "Disable RPF check for a source group pair";
            }
    
            container pim-to-igmp-proxy {
              description "PIM-to-IGMP proxy";
              uses apply-advanced;
    
              leaf-list upstream-interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                max-elements 2;
                ordered-by user;
                description
                  "Upstream interface list";
              }
            }  // container pim-to-igmp-proxy
    
            container pim-to-mld-proxy {
              description "PIM-to-MLD proxy";
              uses apply-advanced;
    
              leaf-list upstream-interface {
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                max-elements 2;
                ordered-by user;
                description
                  "Upstream interface list";
              }
            }  // container pim-to-mld-proxy
    
            container forwarding-cache {
              description
                "Multicast forwarding cache";
              uses apply-advanced;
    
              leaf allow-maximum {
                type empty;
                description
                  "Allow maximum of global and family level threshold values for suppress and reuse";
              }
    
              list family {
                junos:must "((!(".. threshold") || ".. allow-maximum"))";
                junos:must-message "Family threshold cannot be configured if 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";
                    }
                  }
                  description "Protocol family";
                }
    
                uses apply-advanced;
    
                container threshold {
                  presence "enable threshold";
                  description
                    "Multicast forwarding cache suppress threshold";
                  uses apply-advanced;
    
                  leaf suppress {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 200000";
                      }
                    }
                    description
                      "Suppress threshold";
                  }
    
                  leaf reuse {
                    junos:must "(".. suppress")";
                    junos:must-message "To configure reuse, suppress must be configured";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 200000";
                      }
                    }
                    description
                      "Reuse threshold";
                  }
    
                  leaf mvpn-rpt-suppress {
                    junos:must "(".. suppress")";
                    junos:must-message "To configure mvpn-rpt-suppress, suppress must be configured";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 200000";
                      }
                    }
                    description
                      "MVPN RP tree entry suppress threshold";
                  }
    
                  leaf mvpn-rpt-reuse {
                    junos:must "(".. mvpn-rpt-suppress")";
                    junos:must-message "To configure mvpn-rpt-reuse, mvpn-rpt-suppress must be configured";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 200000";
                      }
                    }
                    description
                      "MVPN RP tree entry reuse threshold";
                  }
    
                  leaf log-warning {
                    junos:must "(".. suppress")";
                    junos:must-message "To configure log-warning, suppress must be configured";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 100";
                      }
                    }
                    description
                      "Percentage at which to start generating warnings";
                  }
                }  // container threshold
              }  // list family
    
              container threshold {
                junos:must "((!(".. family") || ".. allow-maximum"))";
                junos:must-message "Global threshold cannot be configured if family threshold is configured";
                description "Threshold";
                uses apply-advanced;
    
                leaf suppress {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 200000";
                    }
                  }
                  description
                    "Suppress threshold";
                }
    
                leaf reuse {
                  junos:must "(".. suppress")";
                  junos:must-message "To configure reuse, suppress must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 200000";
                    }
                  }
                  description "Reuse threshold";
                }
    
                leaf mvpn-rpt-suppress {
                  junos:must "(".. suppress")";
                  junos:must-message "To configure mvpn-rpt-suppress, suppress must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 200000";
                    }
                  }
                  description
                    "MVPN RP tree entry suppress threshold";
                }
    
                leaf mvpn-rpt-reuse {
                  junos:must "(".. mvpn-rpt-suppress")";
                  junos:must-message "To configure mvpn-rpt-reuse, mvpn-rpt-suppress must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 200000";
                    }
                  }
                  description
                    "MVPN RP tree entry reuse threshold";
                }
    
                leaf log-warning {
                  junos:must "(".. suppress")";
                  junos:must-message "To configure log-warning, suppress must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 100";
                    }
                  }
                  description
                    "Percentage at which to start generating warnings";
                }
              }  // container threshold
    
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 720";
                  }
                }
                description
                  "Forwarding cache entry timeout in minutes";
              }
            }  // container forwarding-cache
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Multicast interface options";
              uses multicast_interface_options_type;
            }  // list interface
    
            list ssm-map {
              key "name";
              ordered-by user;
              description "SSM map definitions";
              leaf name {
                type string;
                description "SSM map name";
              }
    
              uses apply-advanced;
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description
                  "Policy for matching group";
              }
    
              leaf-list source {
                type jt:ipaddr;
                ordered-by user;
                description
                  "One or more source addresses";
              }
            }  // list ssm-map
    
            list backup-pe-group {
              key "name";
              ordered-by user;
              description
                "Backup PE group definitions";
              leaf name {
                type string;
                description "PE group name";
              }
    
              uses apply-advanced;
    
              leaf-list backups {
                type jt:ipaddr;
                max-elements 8;
                ordered-by user;
                description
                  "One or more IP addresses";
              }
    
              leaf local-address {
                type jt:ipaddr;
                description
                  "Address to be used as local-address for this group";
              }
            }  // list backup-pe-group
    
            leaf omit-wildcard-address {
              type empty;
              description
                "Omit wildcard source/group fields in SPMSI AD NLRI";
            }
    
            leaf local-address {
              type jt:ipv4addr;
              description
                "Local address for PIM and MVPN sessions";
            }
          }  // container multicast
    
          container programmable-rpd {
            description
              "RPD Server module management options";
            uses programmable-rpd-type;
          }  // container programmable-rpd
    
          container validation {
            description
              "Define Route validation";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Trace options for route validation";
              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 "packets" {
                      value 1;
                      description
                        "Trace all I/O packets";
                    }
                    enum "keepalive" {
                      value 2;
                      description
                        "Trace keepalive packets";
                    }
                    enum "update" {
                      value 3;
                      description
                        "Trace update packets";
                    }
                    enum "nsr-synchronization" {
                      value 4;
                      description
                        "Trace NSR synchronization events";
                    }
                    enum "state" {
                      value 5;
                      description
                        "Trace state transitions";
                    }
                    enum "policy" {
                      value 6;
                      description
                        "Trace policy processing";
                    }
                    enum "task" {
                      value 7;
                      description
                        "Trace routing protocol task processing";
                    }
                    enum "timer" {
                      value 8;
                      description
                        "Trace routing protocol timer processing";
                    }
                    enum "client" {
                      value 9;
                      description
                        "Trace route validation client events";
                    }
                    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
    
            leaf-list notification-rib {
              type string;
              ordered-by user;
              description
                "Define routing tables that get notified upon validation state change";
            }
    
            list group {
              key "name";
              description
                "Define a group of sessions";
              leaf name {
                type string;
                description "Group name";
              }
    
              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 max-sessions {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 63";
                  }
                }
                description
                  "Maximum connected session in this group";
              }
    
              list session {
                key "name";
                description
                  "Configure a session";
                leaf name {
                  type jt:ipaddr;
                }
    
                uses apply-advanced;
    
                container traceoptions {
                  description
                    "Trace options for route validation";
                  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 "packets" {
                          value 1;
                          description
                            "Trace all I/O packets";
                        }
                        enum "keepalive" {
                          value 2;
                          description
                            "Trace keepalive packets";
                        }
                        enum "update" {
                          value 3;
                          description
                            "Trace update packets";
                        }
                        enum "state" {
                          value 4;
                          description
                            "Trace state transitions";
                        }
                        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
    
                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 refresh-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 1800";
                    }
                  }
                  units "seconds";
                  description
                    "Interval between keepalive packet transmissions";
                }
    
                leaf hold-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10 .. 3600";
                    }
                  }
                  units "seconds";
                  description
                    "Time after which the session is declared down.";
                }
    
                leaf record-lifetime {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "60 .. 604800";
                    }
                  }
                  units "seconds";
                  description
                    "Lifetime of route validation records";
                }
    
                leaf preference {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 255";
                    }
                  }
                  description
                    "Preference for session establishment";
                }
    
                leaf port {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Portnumber to connect";
                }
    
                leaf local-address {
                  type jt:ipaddr;
                }
              }  // list session
            }  // list group
    
            container static {
              description
                "Define static route validation record";
              uses apply-advanced;
    
              list record {
                key "name";
                description
                  "Static route validation record";
                leaf name {
                  type jt:ipprefix;
                }
    
                uses apply-advanced;
    
                list maximum-length {
                  key "name";
                  ordered-by user;
                  leaf name {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 128";
                      }
                    }
                    description
                      "Maximum prefix-length for route validation record";
                  }
    
                  uses apply-advanced;
    
                  list origin-autonomous-system {
                    key "name";
                    ordered-by user;
                    leaf name {
                      type union {
                        type uint32;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Legitimate Origin Autonomous System";
                    }
    
                    uses apply-advanced;
    
                    leaf validation-state {
                      type enumeration {
                        enum "invalid" {
                          value 0;
                          description
                            "Invalid route validation state";
                        }
                        enum "valid" {
                          value 1;
                          description
                            "Valid route validation state";
                        }
                      }
                      description
                        "Validation state for route validation record";
                    }
                  }  // list origin-autonomous-system
                }  // list maximum-length
              }  // list record
            }  // container static
          }  // container validation
        }  // grouping juniper-routing-options
    
        grouping dynamic_tunnel_type {
          description
            "Dynamic tunnel definition";
          leaf name {
            type string {
              junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)";
              junos:pattern-message "Tunnel name is a string consisting of up to 63 letters, numbers, dashes, and underscores";
            }
            description "Tunnel name";
          }
    
          uses apply-advanced;
    
          leaf source-address {
            junos:must "((".. gre" || (".. udp" || (".. bgp-signal" || ".. ipip"))))";
            junos:must-message "Tunnel type GRE, UDP or BGP-SIGNAL must be configured";
            type jt:ipaddr;
            description "Tunnel source address";
          }
    
          choice tunnel-type {
            list rsvp-te {
              key "name";
              ordered-by user;
              description
                "RSVP-TE point-to-point LSP";
              leaf name {
                type string;
                description
                  "Configure multiple entries for RSVP tunnel";
              }
    
              uses apply-advanced;
    
              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 $$" && "protocols mpls label-switched-path $$ template"))";
                    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
    
              list destination-networks {
                key "name";
                ordered-by user;
                description
                  "Create tunnels for routes in these destination networks";
                uses app_network_type;
              }  // list destination-networks
            }  // list rsvp-te
            container spring-te {
              description "SPRING-TE LSP's";
              uses apply-advanced;
    
              list source-routing-path-template {
                key "name";
                ordered-by user;
                description
                  "Template color mapping for SPRING-TE dynamic LSP parameters";
                uses spring-te-template-map;
              }  // list source-routing-path-template
    
              list destination-networks {
                key "name";
                ordered-by user;
                description
                  "Create tunnels for routes in these destination networks";
                uses app_network_type;
              }  // list destination-networks
            }  // container spring-te
            leaf gre {
              junos:must "((".. source-address" && ".. destination-networks"))";
              junos:must-message "Source address and Destination Networks must be configured for tunnel type GRE";
              type empty;
              description
                "Generic routing encapsulation type for IPv4";
            }
    
            case case_4 {
            }  // case case_4
            leaf bgp-signal {
              junos:must "((".. source-address" && ".. destination-networks"))";
              junos:must-message "Source address and Destination Networks must be configured for tunnel type BGP-Signal";
              type empty;
              description
                "BGP signals the encapsulation type for IPv4";
            }
    
            case case_6 {
            }  // case case_6
          }  // choice tunnel-type
    
          list destination-networks {
            junos:must "(((".. gre" || (".. udp" || (".. bgp-signal" || ".. ipip"))) && (!(".. rsvp-te") && !(".. spring-te"))))";
            junos:must-message "Tunnel type GRE or UDP must be configured";
            key "name";
            ordered-by user;
            description
              "Create tunnels for routes in these destination networks";
            uses network_type;
          }  // list destination-networks
        }  // grouping dynamic_tunnel_type
    
        grouping app_network_type {
          leaf name {
            type jt:ipprefix;
            description "Network prefix";
          }
    
          uses apply-advanced;
        }  // grouping app_network_type
    
        grouping export-af-obj {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable auto-export for address family";
            }
          }  // choice enable-disable
    
          container unicast {
            presence "enable unicast";
            description
              "Unicast routing information";
            uses export-subaf-obj;
          }  // container unicast
    
          container multicast {
            presence "enable multicast";
            description
              "Multicast routing information";
            uses export-subaf-obj;
          }  // container multicast
    
          container flow {
            presence "enable flow";
            description
              "Flow routing information";
            uses export-subaf-obj;
          }  // container flow
        }  // grouping export-af-obj
    
        grouping export-subaf-obj {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable instance export";
            }
          }  // choice enable-disable
    
          leaf rib-group {
            type string;
            description
              "Auxiliary rib-group of additional RIBs to consider";
          }
        }  // grouping export-subaf-obj
    
        grouping fate_sharing_links {
          leaf name {
            type jt:ipv4addr;
            description
              "Router ID or LAN interface address";
          }
    
          leaf to {
            type jt:ipv4addr;
            description "Point-to-point links";
          }
        }  // grouping fate_sharing_links
    
        grouping flow-interface-group {
          leaf group {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 255";
              }
            }
            description
              "Interface group ID to match traffic";
          }
    
          leaf exclude {
            type empty;
            description
              "Don't apply flow-spec filter to traffic on this group";
          }
        }  // grouping flow-interface-group
    
        grouping flow-route-inet {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          leaf no-install {
            type empty;
            description
              "Don't install firewall filter in forwarding";
          }
    
          container match {
            description "Flow definition";
            uses flow-route-qualifier-inet;
          }  // container match
    
          container then {
            description
              "Actions to take for this flow";
            uses flow-route-op;
          }  // container then
        }  // grouping flow-route-inet
    
        grouping flow-route-inet6 {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          leaf no-install {
            type empty;
            description
              "Don't install firewall filter in forwarding";
          }
    
          container match {
            description "Flow definition";
            uses flow-route-qualifier-inet6;
          }  // container match
    
          container then {
            description
              "Actions to take for this flow";
            uses flow-route-op;
          }  // container then
        }  // grouping flow-route-inet6
    
        grouping flow-route-op {
          uses apply-advanced;
    
          leaf community {
            type string;
            description "Name of BGP community";
          }
    
          choice flow_op_action {
            leaf accept {
              type empty;
              description
                "Allow traffic through";
            }
            leaf discard {
              type empty;
              description
                "Discard all traffic for this flow";
            }
            leaf rate-limit {
              type string;
              description
                "Rate in bits/sec to limit the flow traffic";
            }
          }  // choice flow_op_action
    
          leaf routing-instance {
            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
              "Redirect to instance identified via Route Target community";
          }
    
          leaf sample {
            type empty;
            description
              "Sample traffic that matches this flow";
          }
    
          leaf mark {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 63";
              }
            }
            description
              "Set DSCP value for traffic that matches this flow";
          }
    
          leaf next-term {
            type empty;
            description
              "Continue the filter evaluation after matching this flow";
          }
    
          choice redirect_op_action {
            leaf-list redirect {
              type jt:ipaddr;
              ordered-by user;
              description
                "Redirect(Tunnel) this flow's traffic to given next-hop address";
            }
          }  // choice redirect_op_action
        }  // grouping flow-route-op
    
        grouping flow-route-qualifier-inet {
          uses apply-advanced;
    
          leaf-list protocol {
            type string;
            ordered-by user;
            description "IP protocol value";
          }
    
          leaf-list port {
            type string;
            ordered-by user;
          }
    
          leaf-list destination-port {
            type string;
            ordered-by user;
          }
    
          leaf-list source-port {
            type string;
            ordered-by user;
          }
    
          leaf-list tcp-flags {
            type string;
            ordered-by user;
            description "TCP flags";
          }
    
          leaf-list packet-length {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Packet length (0-65535)";
          }
    
          leaf-list dscp {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Differentiated Services (DiffServ) code point (DSCP) (0-63)";
          }
    
          leaf-list fragment {
            type enumeration {
              enum "dont-fragment" {
                value 0;
                description
                  "Don't Fragment flag is set";
              }
              enum "not-a-fragment" {
                value 1;
                description "Not a fragment";
              }
              enum "is-fragment" {
                value 2;
                description "Fragmented packet";
              }
              enum "first-fragment" {
                value 3;
                description "First fragment";
              }
              enum "last-fragment" {
                value 4;
                description "Last fragment";
              }
            }
            ordered-by user;
          }
    
          leaf destination {
            type jt:ipv4prefix;
            description
              "Destination prefix for this traffic flow";
          }
    
          leaf source {
            type jt:ipv4prefix;
            description
              "Source prefix for this traffic flow";
          }
    
          leaf-list icmp-code {
            type string;
            ordered-by user;
            description "ICMP message code";
          }
    
          leaf-list icmp-type {
            type string;
            ordered-by user;
            description "ICMP message type";
          }
        }  // grouping flow-route-qualifier-inet
    
        grouping flow-route-qualifier-inet6 {
          uses apply-advanced;
    
          leaf-list protocol {
            type string;
            ordered-by user;
            description "IP protocol value";
          }
    
          leaf-list port {
            type string;
            ordered-by user;
          }
    
          leaf-list destination-port {
            type string;
            ordered-by user;
          }
    
          leaf-list source-port {
            type string;
            ordered-by user;
          }
    
          leaf-list tcp-flags {
            type string;
            ordered-by user;
            description "TCP flags";
          }
    
          leaf-list packet-length {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Packet length (0-65535)";
          }
    
          leaf-list dscp {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Differentiated Services (DiffServ) code point (DSCP) (0-63)";
          }
    
          leaf-list fragment {
            type enumeration {
              enum "dont-fragment" {
                value 0;
                description
                  "Don't Fragment flag is set";
              }
              enum "not-a-fragment" {
                value 1;
                description "Not a fragment";
              }
              enum "is-fragment" {
                value 2;
                description "Fragmented packet";
              }
              enum "first-fragment" {
                value 3;
                description "First fragment";
              }
              enum "last-fragment" {
                value 4;
                description "Last fragment";
              }
            }
            ordered-by user;
          }
    
          container destination {
            presence "enable destination";
            description
              "Destination prefix for this traffic flow";
            uses flow-prefix-with-offset;
          }  // container destination
    
          container source {
            presence "enable source";
            description
              "Source prefix for this traffic flow";
            uses flow-prefix-with-offset;
          }  // container source
    
          leaf-list icmp6-type {
            type string;
            ordered-by user;
            description "ICMP message type";
          }
    
          leaf-list icmp6-code {
            type string;
            ordered-by user;
            description "ICMP message code";
          }
    
          leaf-list flow-label {
            type jt:policy-algebra;
            ordered-by user;
            description "Flow-label (0-1048575)";
          }
        }  // grouping flow-route-qualifier-inet6
    
        grouping flow-prefix-with-offset {
          leaf prefix {
            type jt:ipv6prefix;
          }
    
          leaf prefix-offset {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Offset from where prefix match will start";
          }
        }  // grouping flow-prefix-with-offset
    
        grouping flow-validation {
          uses apply-advanced;
    
          container traceoptions {
            description "Trace options";
            uses flow-dep-traceoptions;
          }  // container traceoptions
        }  // grouping flow-validation
    
        grouping flow-dep-traceoptions {
          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 "resolution" {
                  value 0;
                  description
                    "Trace flow to unicast route resolution";
                }
                enum "flash" {
                  value 1;
                  description
                    "Trace flash processing";
                }
                enum "route" {
                  value 2;
                  description
                    "Trace routing information";
                }
                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 "policy" {
                  value 6;
                  description
                    "Trace policy processing";
                }
                enum "task" {
                  value 7;
                  description
                    "Trace routing protocol task processing";
                }
                enum "timer" {
                  value 8;
                  description
                    "Trace routing protocol timer processing";
                }
                enum "all" {
                  value 9;
                  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 tracing";
              leaf match-on {
                type enumeration {
                  enum "prefix" {
                    value 0;
                    description
                      "Filter based on prefix";
                  }
                  enum "route-attribute" {
                    value 1;
                    description
                      "Filter based on route attributes";
                  }
                }
                description
                  "Argument on which to match";
              }
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description "Filter policy";
              }
            }  // container filter
          }  // list flag
        }  // grouping flow-dep-traceoptions
    
        grouping forwarding-table-type {
          description
            "Forwarding table management options";
          uses apply-advanced;
    
          leaf remnant-holdtime {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10000";
              }
            }
            description
              "Time to hold inherited routes from FIB";
          }
    
          leaf chain-composite-max-label-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 16";
              }
            }
            description
              "Maximum labels inside chain composite for the platform.";
          }
    
          leaf krt-nexthop-ack-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 400";
              }
            }
            description
              "Kernel nexthop ack timeout interval";
          }
    
          leaf srv6-chain-merge {
            type empty;
            description
              "Enable merging of srv6 chain nexthops";
          }
    
          container consistency-checking {
            status deprecated;
            description
              "RIB/FIB consistency checking";
            uses apply-advanced;
    
            choice enable-disable {
              leaf enable {
                type empty;
                description
                  "Enable consistency checking";
              }
              leaf disable {
                type empty;
                description
                  "Disable consistency checking";
              }
            }  // choice enable-disable
    
            leaf period {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "30 .. 4294967295";
                }
              }
              description
                "Periodicity of scan in seconds";
            }
    
            leaf threshold {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Mismatch threshold until complaint";
            }
          }  // container consistency-checking
    
          leaf-list export {
            type jt:policy-algebra;
            ordered-by user;
            description "Export policy";
          }
    
          leaf dynamic-list-next-hop {
            junos:must "(!(".. evpn-aliasing-optimize"))";
            junos:must-message "please disable evpn-aliasing-optimize";
            type empty;
            description
              "Dynamic next-hop mode for EVPN";
          }
    
          container evpn-egress-link-protection {
            presence
              "enable evpn-egress-link-protection";
            description
              "EVPN PE-CE egress link failure protection";
            uses apply-advanced;
          }  // container evpn-egress-link-protection
    
          container egress-chaining {
            description "Enable egress-chaining";
            uses apply-advanced;
    
            leaf spring-te {
              type empty;
              description
                "Enable egress-chaining for SPRING-TE routes";
            }
          }  // container egress-chaining
    
          leaf evpn-aliasing-optimize {
            junos:must "(!(".. evpn-egress-link-protection"))";
            junos:must-message "please disable evpn-egress-link-protection";
            junos:must "(!(".. dynamic-list-next-hop"))";
            junos:must-message "please disable dynamic-list-next-hop";
            type empty;
            description
              "EVPN Aliasing convergence improvement";
          }
    
          choice indirect-next-hop-choice {
            leaf indirect-next-hop {
              type empty;
              description
                "Install indirect next hops in Packet Forwarding Engine";
            }
            leaf no-indirect-next-hop {
              type empty;
              description
                "Don't install indirect next hops in Packet Forwarding Engine";
            }
          }  // choice indirect-next-hop-choice
    
          choice route-ack-converge-choice {
            leaf route-ack-converge {
              type empty;
              description
                "Enable the route ack convergence feature";
            }
            leaf no-route-ack-converge {
              type empty;
              description
                "Don't enable the route ack convergence feature";
            }
          }  // choice route-ack-converge-choice
    
          choice indirect-next-hop-change-acknowledgements-choice {
            leaf indirect-next-hop-change-acknowledgements {
              type empty;
              description
                "Request acknowledgements for Indirect next hop changes";
            }
            leaf no-indirect-next-hop-change-acknowledgements {
              type empty;
              description
                "Don't request acknowledgements for Indirect next hop changes";
            }
          }  // choice indirect-next-hop-change-acknowledgements-choice
    
          list rib {
            key "name";
            ordered-by user;
            status deprecated;
            leaf name {
              type string;
            }
          }  // list rib
    
          leaf unicast-reverse-path {
            type enumeration {
              enum "active-paths" {
                value 0;
                description
                  "Consider active paths when performing RP verification";
              }
              enum "feasible-paths" {
                value 1;
                description
                  "Consider all feasible paths for RP verification";
              }
            }
            description
              "Unicast reverse path (RP) verification";
          }
    
          container ip-tunnel-rpf-check {
            presence
              "enable ip-tunnel-rpf-check";
            description
              "IP tunnel Reverse Path Forwarding Check";
            uses apply-advanced;
    
            leaf mode {
              type enumeration {
                enum "strict" {
                  value 0;
                  description
                    "Strict mode for rpf-check(Default)";
                }
                enum "loose" {
                  value 1;
                  description
                    "Loose mode for rpf-check";
                }
              }
              default "strict";
            }
    
            leaf fail-filter {
              junos:must "(("firewall family any filter $$" || ((!("firewall") && ".. .. .. .. .. firewall family any filter $$") || ("firewall family inet filter $$" || ((!("firewall") && ".. .. .. .. .. firewall family inet filter $$") || ("firewall family inet6 filter $$" || (!("firewall") && ".. .. .. .. .. firewall family inet6 filter $$")))))))";
              junos:must-message "referenced filter must be defined under firewall family any|inet|inet6";
              type string {
                junos:posix-pattern "!^((__.*)|(.{65,}))$";
                junos:pattern-message "Must be a non-reserved string of 64 characters or less";
              }
              description
                "Fail filter name for RPF check(family inet|inet6|any)";
            }
          }  // container ip-tunnel-rpf-check
    
          container fib-next-hop-split {
            description
              "Split nexthop to chain nexthop when installing fom rib to fib";
            uses apply-advanced;
    
            leaf labeled-isis {
              type empty;
              description
                "Create composite-chained nexthops for labeled ISIS routes";
            }
          }  // container fib-next-hop-split
        }  // grouping forwarding-table-type
    
        grouping juniper-sampling-options {
          uses apply-advanced;
    
          choice enable-disable {
            leaf disable {
              type empty;
              description
                "Disable global sampling instance";
            }
          }  // choice enable-disable
    
          container traceoptions {
            description
              "Traffic sampling trace options";
            uses sampling_traceoptions_type;
          }  // container traceoptions
    
          container input {
            description
              "Traffic Sampling data acquisition";
            uses sampling_input_type;
          }  // container input
    
          container output {
            junos:must "(!(".. family"))";
            junos:must-message " 'sampling family <*> ' and 'sampling output' are mutually exclusive";
            junos:must "("forwarding-options sampling input")";
            junos:must-message "Sampling input configuration is not specified";
            status deprecated;
            description
              "Traffic sampling data disposition";
            uses sampling_output_type;
          }  // container output
    
          container family {
            description
              "Address family of packets to sample";
            container inet {
              description "Sample IPv4 packets";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable sampling family inet";
                }
              }  // choice enable-disable
    
              container input {
                junos:must "(!(".. .. .. input"))";
                junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                description
                  "Settings for sampling of input packets";
                uses sampling_family_input_type;
              }  // container input
    
              container output {
                junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))";
                junos:must-message "output configuration mismatch with old deprecated input configuration";
                junos:must "((".. .. .. input rate" || " .. input rate"))";
                junos:must-message "sampling input rate is not specified";
                junos:must "((".. .. .. input" || ".. input"))";
                junos:must-message "Sampling input configuration is not specified";
                description
                  "Traffic sampling data disposition";
                uses sampling_instance_inet_global_output_type;
              }  // container output
            }  // container inet
    
            container inet6 {
              description "Sample IPv6 packets";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable sampling family inet6";
                }
              }  // choice enable-disable
    
              container input {
                junos:must "(!(".. .. .. input"))";
                junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                description
                  "Settings for sampling of input packets";
                uses sampling_family_input_type;
              }  // container input
    
              container output {
                junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))";
                junos:must-message "output configuration mismatch with old deprecated input configuration";
                junos:must "((".. .. .. input" || ".. input"))";
                junos:must-message "Sampling input configuration is not specified";
                description
                  "Traffic sampling data disposition";
                uses sampling_family_inet6_output_type;
              }  // container output
            }  // container inet6
          }  // container family
    
          list instance {
            key "name";
            ordered-by user;
            description
              "Instance of sampling parameters";
            leaf name {
              junos:must "(!("forwarding-options port-mirroring instance $$"))";
              junos:must-message "Instance $$ is also defined under port-mirroring hierarchy";
              type string;
              description
                "Name for sampling instance";
            }
    
            uses apply-advanced;
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable sampling instance";
              }
            }  // choice enable-disable
    
            container input {
              description
                "Traffic Sampling data acquisition";
              uses sampling_instance_input_type;
            }  // container input
    
            container family {
              description
                "Address family of packets to sample";
              container inet {
                description
                  "Sample IPv4 packets";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    status deprecated;
                    description
                      "Disable instance family inet";
                  }
                }  // choice enable-disable
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                  description
                    "Settings for sampling of input packets";
                  uses sampling_family_input_type;
                }  // container input
    
                container output {
                  junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))";
                  junos:must-message "output configuration mismatch with old deprecated input configuration";
                  junos:must "((".. .. .. input" || ".. input"))";
                  junos:must-message "Sampling input configuration is not specified";
                  description
                    "Traffic sampling data disposition";
                  uses sampling_instance_inet_output_type;
                }  // container output
              }  // container inet
    
              container inet6 {
                description
                  "Sample IPv6 packets";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    status deprecated;
                    description
                      "Disable instance family inet6";
                  }
                }  // choice enable-disable
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                  description
                    "Settings for sampling of input packets";
                  uses sampling_family_input_type;
                }  // container input
    
                container output {
                  junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))";
                  junos:must-message "output configuration mismatch with old deprecated input configuration";
                  junos:must "((".. .. .. input" || ".. input"))";
                  junos:must-message "Sampling input configuration is not specified";
                  description
                    "Traffic sampling data disposition";
                  uses sampling_instance_inet6_output_type;
                }  // container output
              }  // container inet6
    
              container mpls {
                description
                  "Sample mpls packets";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    status deprecated;
                    description
                      "Disable instance family mpls";
                  }
                }  // choice enable-disable
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                  description
                    "Settings for sampling of input packets";
                  uses sampling_family_input_type;
                }  // container input
    
                container output {
                  junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))";
                  junos:must-message "output configuration mismatch with old deprecated input configuration";
                  junos:must "((".. .. .. input" || ".. input"))";
                  junos:must-message "Sampling input configuration is not specified";
                  description
                    "Traffic sampling data disposition";
                  uses sampling_instance_mpls_output_type;
                }  // container output
              }  // container mpls
    
              container vpls {
                status deprecated;
                description
                  "Sample vpls packets";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable instance family vpls";
                  }
                }  // choice enable-disable
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                  description
                    "Settings for sampling of input packets";
                  uses sampling_family_input_type;
                }  // container input
    
                container output {
                  junos:must "((".. .. .. input" || ".. input"))";
                  junos:must-message "Sampling input configuration is not specified";
                  description
                    "Traffic sampling data disposition";
                  uses sampling_instance_vpls_output_type;
                }  // container output
              }  // container vpls
    
              container bridge {
                junos:must "(!(".. .. family vpls"))";
                junos:must-message "bridge and vpls families are mutually exclusive";
                description
                  "Sample bridge packets";
                uses apply-advanced;
    
                choice enable-disable {
                  leaf disable {
                    type empty;
                    description
                      "Disable instance family bridge";
                  }
                }  // choice enable-disable
    
                container input {
                  junos:must "(!(".. .. .. input"))";
                  junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive";
                  description
                    "Settings for sampling of input packets";
                  uses sampling_family_input_type;
                }  // container input
    
                container output {
                  junos:must "((".. .. .. input" || ".. input"))";
                  junos:must-message "Sampling input configuration is not specified";
                  description
                    "Traffic sampling data disposition";
                  uses sampling_instance_bridge_output_type;
                }  // container output
              }  // container bridge
            }  // container family
          }  // list instance
    
          container jflow-service {
            description
              "Jflow service configuration";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Jflow service trace options";
              uses jflow_service_traceoptions;
            }  // container traceoptions
          }  // container jflow-service
    
          container route-record {
            description
              "Sampling route record configuration";
            uses apply-advanced;
    
            container traceoptions {
              description
                "Sampling route record trace options";
              uses route_record_traceoptions;
            }  // container traceoptions
          }  // container route-record
        }  // grouping juniper-sampling-options
    
        grouping jflow_service_traceoptions {
          description
            "Traceoptions for jflow-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 jflow-service to enable debuging output";
            leaf name {
              type enumeration {
                enum "parse" {
                  value 0;
                  description
                    "Trace parsing code";
                }
                enum "rtsock" {
                  value 1;
                  description
                    "Trace rtsock code";
                }
                enum "sm" {
                  value 2;
                  description
                    "Trace State machine code";
                }
                enum "all" {
                  value 3;
                  description
                    "Trace all area of jflow-service code";
                }
              }
            }
          }  // list flag
        }  // grouping jflow_service_traceoptions
    
        grouping junos_hash_key {
          description
            "Select data used in the hash key";
          uses apply-advanced;
    
          container family {
            description "Protocol family";
            container fcoe {
              description "FCoE protocol family";
              uses apply-advanced;
    
              container ethernet-interfaces {
                description
                  "FCoE hash-key configuration on ethernet interfaces";
                uses apply-advanced;
    
                leaf oxid {
                  type enumeration {
                    enum "enable" {
                      value 0;
                      description
                        "Include Originator Exchange ID in the hash key";
                    }
                    enum "disable" {
                      value 1;
                      description
                        "Do not include Originator Exchange ID in the hash key";
                    }
                  }
                  description
                    "Originator Exchange ID";
                }
              }  // container ethernet-interfaces
    
              container fabric-interfaces {
                description
                  "FCoE hash-key configuration on fabric interfaces";
                uses apply-advanced;
    
                leaf oxid {
                  type enumeration {
                    enum "enable" {
                      value 0;
                      description
                        "Include Originator Exchange ID in the hash key";
                    }
                    enum "disable" {
                      value 1;
                      description
                        "Do not include Originator Exchange ID in the hash key";
                    }
                  }
                  description
                    "Originator Exchange ID";
                }
              }  // container fabric-interfaces
            }  // container fcoe
    
            container inet {
              description "IPv4 protocol family";
              uses apply-advanced;
    
              container layer-3 {
                presence "enable layer-3";
                description
                  "Include Layer 3 (IP) data in the hash key";
                uses apply-advanced;
    
                leaf destination-address {
                  type empty;
                  description
                    "Include IP destination address in the hash key";
                }
              }  // container layer-3
    
              container layer-4 {
                presence "enable layer-4";
                description
                  "Include Layer 4 (TCP or UDP) data in the hash key";
                uses apply-advanced;
              }  // container layer-4
    
              leaf session-id {
                type empty;
                description
                  "Include session ID in the hash key";
              }
            }  // container inet
    
            container inet6 {
              description "IPv6 protocol family";
              uses apply-advanced;
    
              container layer-3 {
                presence "enable layer-3";
                description
                  "Include Layer 3 (IP) data in the hash key";
                uses apply-advanced;
    
                leaf destination-address {
                  type empty;
                  description
                    "Include IP destination address in the hash key";
                }
    
                leaf incoming-interface-index {
                  type empty;
                  description
                    "Include incoming interface index in the hash key";
                }
    
                leaf next-header {
                  type empty;
                  description
                    "Include IP Next Header field in the hash key";
                }
    
                leaf source-address {
                  type empty;
                  description
                    "Include IP source address in the hash key";
                }
    
                leaf traffic-class {
                  type empty;
                  description
                    "Include Traffic Class field in the hash key";
                }
              }  // container layer-3
    
              container layer-4 {
                presence "enable layer-4";
                description
                  "Include Layer 4 (TCP or UDP) data in the hash key";
                uses apply-advanced;
    
                leaf destination-port {
                  type empty;
                  description
                    "Include IP destination port in the hash key";
                }
    
                leaf source-port {
                  type empty;
                  description
                    "Include IP source port in the hash key";
                }
              }  // container layer-4
    
              leaf session-id {
                type empty;
                description
                  "Include session ID in the hash key";
              }
            }  // container inet6
    
            container mpls {
              description "MPLS protocol family";
              uses apply-advanced;
    
              choice label {
                leaf label-1 {
                  type empty;
                  description
                    "Include the first MPLS label in the hash key";
                }
                leaf all-labels {
                  type empty;
                  description
                    "Include all MPLS labels in hash key";
                }
                leaf no-labels {
                  type empty;
                  description
                    "Exclude all MPLS labels from hash key";
                }
                leaf bottom-label-1 {
                  type empty;
                  description
                    "Include the first MPLS label from bottom-of-stack in the hash key";
                }
              }  // choice label
    
              leaf label-2 {
                junos:must "(".. label-1")";
                junos:must-message "Must also specify label 1;";
                type empty;
                description
                  "Include the second MPLS label in the hash key";
              }
    
              leaf label-3 {
                junos:must "(".. label-2")";
                junos:must-message "Must also specify label 2;";
                type empty;
                description
                  "Include the third MPLS label in the hash key";
              }
    
              container payload {
                junos:must "((".. label-1" || (".. no-labels" || (".. all-labels" || ".. bottom-label-1"))))";
                junos:must-message "Either label-1, bottom-label-1, all-labels or no-labels statement is mandatory";
                description
                  "Include payload data in the hash key";
                uses apply-advanced;
    
                container ether-pseudowire {
                  presence
                    "enable ether-pseudowire";
                  description
                    "Load-balance IP over ethernet PW";
                  uses apply-advanced;
                }  // container ether-pseudowire
    
                container ip {
                  presence "enable ip";
                  description
                    "Include IPv4 or IPv6 payload data in the hash key";
                  uses apply-advanced;
    
                  choice layer-4-select {
                    choice ip-payload {
                      leaf layer-3-only {
                        type empty;
                        description
                          "Include only layer-3 IP information";
                      }
                      leaf enable {
                        type empty;
                        description
                          "Include layer3/4 IP payload in the hash key";
                      }
                      leaf disable {
                        type empty;
                        description
                          "Exclude layer3/4 IP payload in the hash key";
                      }
                    }  // choice ip-payload
                    container port-data {
                      presence
                        "enable port-data";
                      uses apply-advanced;
    
                      leaf source-msb {
                        type empty;
                        description
                          "Include the most significant byte of the source port";
                      }
    
                      leaf source-lsb {
                        type empty;
                        description
                          "Include the least significant byte of the source port";
                      }
    
                      leaf destination-msb {
                        type empty;
                        description
                          "Include the most significant byte of the destination port";
                      }
    
                      leaf destination-lsb {
                        type empty;
                        description
                          "Include the least significant byte of the destination port";
                      }
                    }  // container port-data
                  }  // choice layer-4-select
                }  // container ip
              }  // container payload
            }  // container mpls
    
            container multiservice {
              description
                "Multiservice protocol family";
              uses apply-advanced;
    
              leaf source-mac {
                type empty;
                description
                  "Include source MAC address in hash key";
              }
    
              leaf destination-mac {
                type empty;
                description
                  "Include destination MAC address in hash key";
              }
            }  // container multiservice
          }  // container family
        }  // grouping junos_hash_key
    
        grouping layer2_pm_family_output_type {
          uses apply-advanced;
    
          choice interface-or-next-hop-index {
            leaf interface {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Interface through which to send sampled traffic";
            }
            leaf next-hop-group {
              junos:must "(!(".. no-filter-check"))";
              junos:must-message "no-filter-check is not allowed with next-hop-group";
              junos:must "("forwarding-options next-hop-group $$ group-type layer-2")";
              junos:must-message "Referenced next-hop-group must be defined as layer-2 group";
              type string;
              description
                "Next-hop-group through which to send port-mirror traffic";
            }
            list routing-instance {
              key "name";
              max-elements 1;
              description "Routing instances";
              uses layer2_pm_output-routing-instance-type;
            }  // list routing-instance
            list vlan {
              key "name";
              max-elements 1;
              description
                "Outgoing VLAN for mirrored packets";
              uses pm-rspan-vlan;
            }  // list vlan
    
            case case_5 {
            }  // case case_5
          }  // choice interface-or-next-hop-index
    
          leaf no-filter-check {
            type empty;
            description
              "Do not check for filters on port-mirroring interface";
          }
        }  // grouping layer2_pm_family_output_type
    
        grouping layer2_pm_output-routing-instance-type {
          leaf 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 name";
          }
    
          uses apply-advanced;
    
          list vlan {
            key "name";
            max-elements 1;
            description
              "Outgoing VLAN for mirrored packets";
            uses pm-rspan-vlan;
          }  // list vlan
        }  // grouping layer2_pm_output-routing-instance-type
    
        grouping ldap-server-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Hostname can only contain alphanumeric characters, '.', '-', and '_'. The format of IPv4 address is 'n.n.n.n'";
            }
            description
              "Hostname or IPv4 address of LDAP server";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            default "389";
            description
              "LDAP server port number";
          }
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Use specified address as source address";
          }
    
          leaf routing-instance {
            junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
            junos:must-message "referenced routing-instance must be defined";
            type string;
            description
              "Use specified routing instance";
          }
    
          leaf retry {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            default "3";
            description
              "Number of times to resend requests";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "3 .. 90";
              }
            }
            units "seconds";
            default "5";
            description
              "Delay before resending unacknowledged request";
          }
    
          leaf tls-type {
            type enumeration {
              enum "start-tls" {
                value 0;
                description
                  "Negotiate start-tls for connection";
              }
            }
          }
    
          leaf tls-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "3 .. 90";
              }
            }
            units "seconds";
            default "5";
            description
              "Limit on tls handshake time";
          }
    
          leaf tls-min-version {
            type enumeration {
              enum "v1.1" {
                value 0;
                description
                  "Require tls 1.1 and 1.2";
              }
              enum "v1.2" {
                value 1;
                description "Require tls 1.2";
              }
            }
            default "v1.2";
          }
    
          leaf no-tls-certificate-check {
            type empty;
            description
              "Do not validate peer certificate";
          }
    
          leaf tls-peer-name {
            type string {
              length "1 .. 255";
            }
            description "Expected peer fdqn";
          }
        }  // grouping ldap-server-object
    
        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 localauth-subscriber-object {
          leaf name {
            type string;
            description "Subscriber username";
          }
    
          uses apply-advanced;
    
          leaf password {
            type string {
              length "1 .. 64";
            }
            description
              "Password for the subscriber";
          }
    
          leaf framed-ip-address {
            type jt:ipv4addr;
            description
              "IP address to assign to the subscriber";
          }
    
          leaf framed-pool {
            junos:must "("access address-assignment pool $$")";
            junos:must-message "referenced address pool must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Pool name to assign an IP address to the subscriber";
          }
    
          leaf delegated-pool {
            junos:must "("access address-assignment pool $$")";
            junos:must-message "referenced address pool must be defined";
            type string {
              length "1 .. 64";
            }
            description
              "Pool name to assign an IPv6 delegated prefix to the subscriber";
          }
    
          leaf framed-ipv6-pool {
            junos:must "("access address-assignment pool $$")";
            junos:must-message "referenced address pool must be defined";
            type string {
              length "1 .. 64";
            }
            description
              "Pool name to assign an IPv6 address or NDRA prefix to the subscriber";
          }
    
          choice ri_or_ls {
            leaf target-routing-instance {
              type string;
              description
                "Routing instance to be assigned to the subscriber";
            }
            container target-logical-system {
              presence
                "enable target-logical-system";
              description
                "Logical system to be assigned to the subscriber";
              uses apply-advanced;
    
              leaf logical-system-name {
                junos:must "("logical-systems $$")";
                junos:must-message "Referenced logical system must be defined";
                type string;
                description
                  "Logical system name";
              }
    
              leaf target-routing-instance {
                type string;
                description "Routing instance ";
              }
            }  // container target-logical-system
          }  // choice ri_or_ls
        }  // grouping localauth-subscriber-object
    
        grouping log-object {
          description "Configure security log";
          uses apply-advanced;
    
          list exclude {
            key "name";
            ordered-by user;
            status deprecated;
            description
              "List of security log criteria to exclude from the audit log";
            leaf name {
              type string;
              description
                "Exclude criteria name";
            }
    
            uses apply-advanced;
    
            leaf destination-address {
              type jt:ipaddr;
              description "Destination address";
            }
    
            leaf destination-port {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Destination port";
            }
    
            leaf event-id {
              type string;
              description "Event ID filter";
            }
    
            leaf failure {
              type empty;
              description "Event was a failure";
            }
    
            leaf interface-name {
              type string;
              description "Name of interface";
            }
    
            leaf policy-name {
              type string;
              description "Policy name filter";
            }
    
            leaf process {
              type string;
              description
                "Process that generated the event";
            }
    
            leaf protocol {
              type string;
              description "Protocol filter";
            }
    
            leaf source-address {
              type jt:ipaddr;
              description "Source address";
            }
    
            leaf source-port {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Source port";
            }
    
            leaf success {
              type empty;
              description "Event was successful";
            }
    
            leaf username {
              type string;
              description "Username filter";
            }
          }  // list exclude
    
          leaf limit {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "10000";
            status deprecated;
            description
              "Limit number of security log entries to keep in memory";
          }
    
          container cache {
            presence "enable cache";
            description
              "Cache security log events in the audit log buffer";
            uses apply-advanced;
    
            list exclude {
              junos:must "(!(".. .. exclude"))";
              junos:must-message "'security log cache exclude' and 'security log exclude' are mutually exclusive";
              key "name";
              ordered-by user;
              description
                "List of security log criteria to exclude from the audit log";
              leaf name {
                type string;
                description
                  "Exclude criteria name";
              }
    
              uses apply-advanced;
    
              leaf destination-address {
                type jt:ipaddr;
                description
                  "Destination address";
              }
    
              leaf destination-port {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Destination port";
              }
    
              leaf event-id {
                type string;
                description "Event ID filter";
              }
    
              leaf failure {
                type empty;
                description
                  "Event was a failure";
              }
    
              leaf interface-name {
                type string;
                description "Name of interface";
              }
    
              leaf policy-name {
                type string;
                description "Policy name filter";
              }
    
              leaf process {
                type string;
                description
                  "Process that generated the event";
              }
    
              leaf protocol {
                type string;
                description "Protocol filter";
              }
    
              leaf source-address {
                type jt:ipaddr;
                description "Source address";
              }
    
              leaf source-port {
                type union {
                  type uint32;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Source port";
              }
    
              leaf success {
                type empty;
                description
                  "Event was successful";
              }
    
              leaf username {
                type string;
                description "Username filter";
              }
            }  // list exclude
    
            leaf limit {
              junos:must "(!(".. .. limit"))";
              junos:must-message "'security log cache limit' and 'security log limit' are mutually exclusive";
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              default "10000";
              description
                "Limit number of security log entries to keep in memory";
            }
          }  // container cache
    
          leaf disable {
            type empty;
            description
              "Disable security logging for the device";
          }
    
          leaf utc-timestamp {
            type empty;
            description
              "Use UTC time for security log timestamps";
          }
    
          leaf mode {
            type enumeration {
              enum "stream" {
                value 0;
                description
                  "Process security logs directly in the forwarding plane";
              }
              enum "event" {
                value 1;
                description
                  "Process security logs in the control plane";
              }
              enum "stream-event" {
                value 2;
                description
                  "Process security logs in both forwarding plane and control plane";
              }
            }
            description
              "Controls how security logs are processed and exported";
          }
    
          leaf event-rate {
            junos:must "(("security log mode event" || ("services service-set ${service-set} syslog mode event" || ("security log mode stream-event" || "services service-set ${service-set} syslog mode stream-event"))))";
            junos:must-message "To configure event-rate, security log must be in event or stream-event mode";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 1500";
              }
            }
            units "logs per second";
            description
              "Control plane event rate";
          }
    
          leaf format {
            type enumeration {
              enum "syslog" {
                value 0;
                description "Traditional syslog";
              }
              enum "sd-syslog" {
                value 1;
                description "Structured syslog";
              }
              enum "binary" {
                value 2;
                description "Binary log";
              }
            }
            description
              "Set security log format for the device";
          }
    
          leaf escape {
            type empty;
            description
              "Enable escape defined by RFC5424 for the sd and binary format logs";
          }
    
          container time-format {
            description
              "Configure year or millisecond for syslog";
            uses time-format-object;
          }  // container time-format
    
          leaf rate-cap {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 5000";
              }
            }
            units "logs per second";
            description "Data plane event rate";
          }
    
          leaf max-database-record {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            default "0";
            description
              "Maximum records in database";
          }
    
          container report {
            presence "enable report";
            description
              "Set security log report settings";
            uses apply-advanced;
    
            container logs-per-table {
              presence "enable logs-per-table";
              description
                "Log number per table in database";
              uses apply-advanced;
    
              leaf session-all {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Log number of session";
              }
    
              leaf screen {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Log number of screen";
              }
    
              leaf idp {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description "Log number of idp";
              }
    
              leaf utm {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description "Log number of utm";
              }
    
              leaf ipsec-vpn {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Log number of ipsec-vpn";
              }
    
              leaf sky {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description "Log number of sky";
              }
            }  // container logs-per-table
    
            leaf table-lifetime {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 365";
                }
              }
              default "90";
              description
                "Table lifetime day(s)";
            }
    
            container table-mode {
              presence "enable table-mode";
              description "Report table mode";
              uses apply-advanced;
    
              leaf dense {
                type empty;
                description
                  "Applicable when massive log and long duration";
              }
            }  // container table-mode
    
            container database-filter {
              presence "enable database-filter";
              description
                "Check the logs whether should be inserted into database";
              uses apply-advanced;
    
              list event-category {
                key "name";
                ordered-by user;
                description
                  "Filter by event-category";
                leaf name {
                  type enumeration {
                    enum "session" {
                      value 0;
                      description "Session log";
                    }
                    enum "screen" {
                      value 1;
                      description "Screen log";
                    }
                    enum "idp" {
                      value 2;
                      description "IDP log";
                    }
                    enum "webfilter" {
                      value 3;
                      description
                        "Webfilter log";
                    }
                    enum "content-filter" {
                      value 4;
                      description
                        "Content-filter log";
                    }
                    enum "anti-virus" {
                      value 5;
                      description
                        "Antivirus log";
                    }
                    enum "anti-spam" {
                      value 6;
                      description
                        "Anti-spam log";
                    }
                    enum "ipsec" {
                      value 7;
                      description
                        "IPsec VPN log";
                    }
                    enum "sky" {
                      value 8;
                      description "Sky ATP log";
                    }
                    enum "secintel" {
                      value 9;
                      description "Secintel log";
                    }
                    enum "icap" {
                      value 10;
                      description "ICAP log";
                    }
                    enum "ssl-proxy" {
                      value 11;
                      description
                        "SSL proxy log";
                    }
                    enum "dnsf" {
                      value 12;
                      description "DNSF log";
                    }
                    enum "session-create" {
                      value 13;
                      description
                        "Session create log";
                    }
                    enum "session-close" {
                      value 14;
                      description
                        "Session close log";
                    }
                    enum "session-deny" {
                      value 15;
                      description
                        "Session deny log";
                    }
                  }
                  description "Name";
                }
    
                uses apply-advanced;
              }  // list event-category
    
              leaf exclude {
                type empty;
                description "Exclude the logs";
              }
            }  // container database-filter
          }  // container report
    
          choice source {
            leaf source-address {
              junos:must "(!("services service-set ${service-set} syslog mode event"))";
              junos:must-message "To configure source address, mode must be stream or stream-event";
              type jt:ipaddr;
              description
                "Source ip address used when exporting security logs";
            }
            leaf source-interface {
              junos:must "(!("services service-set ${service-set} syslog mode event"))";
              junos:must-message "To configure source interface, mode must be stream or stream-event";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Source interface used when exporting security logs";
            }
          }  // choice source
    
          container transport {
            junos:must "(!("services service-set ${service-set} syslog mode event"))";
            junos:must-message "To configure transport info, mode must be stream or stream-event";
            presence "enable transport";
            description
              "Set security log transport settings";
            uses apply-advanced;
    
            leaf tcp-connections {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 5";
                }
              }
              description
                "Set tcp connection number per-stream";
            }
    
            leaf protocol {
              type enumeration {
                enum "udp" {
                  value 0;
                  description
                    "UDP transfer for log";
                }
                enum "tcp" {
                  value 1;
                  description
                    "TCP transfer for log";
                }
                enum "tls" {
                  value 2;
                  description
                    "TLS transfer for log";
                }
              }
              description
                "Set security log transport protocol for the device";
            }
    
            leaf tls-profile {
              junos:must "("services ssl initiation profile $$")";
              junos:must-message "SSl profile must be defined under [services ssl initiation profile]";
              type string;
              description "TLS profile";
            }
          }  // container transport
    
          leaf facility-override {
            type enumeration {
              enum "authorization" {
                value 0;
                description
                  "Authorization system";
              }
              enum "daemon" {
                value 1;
                description
                  "Various system processes";
              }
              enum "ftp" {
                value 2;
                description "FTP process";
              }
              enum "kernel" {
                value 3;
                description "Kernel";
              }
              enum "user" {
                value 4;
                description "User processes";
              }
              enum "local0" {
                value 5;
                description
                  "Local logging option number 0";
              }
              enum "local1" {
                value 6;
                description
                  "Local logging option number 1";
              }
              enum "local2" {
                value 7;
                description
                  "Local logging option number 2";
              }
              enum "local3" {
                value 8;
                description
                  "Local logging option number 3";
              }
              enum "local4" {
                value 9;
                description
                  "Local logging option number 4";
              }
              enum "local5" {
                value 10;
                description
                  "Local logging option number 5";
              }
              enum "local6" {
                value 11;
                description
                  "Local logging option number 6";
              }
              enum "local7" {
                value 12;
                description
                  "Local logging option number 7";
              }
            }
            description
              "Alternate facility for logging to remote host";
          }
    
          leaf local-log-tag {
            junos:must "(!("services service-set ${service-set} syslog mode stream"))";
            junos:must-message "To configure local-log-tag, mode must be event or stream-event";
            type string {
              junos:posix-pattern "![ =:]{1,15}";
              junos:pattern-message "Must be a string of 15 characters or less";
            }
            description "Tag included in logs";
          }
    
          list local-category {
            junos:must "(!("services service-set ${service-set} syslog mode stream"))";
            junos:must-message "To configure local-category, mode must be event or stream-event";
            key "name";
            ordered-by user;
            description
              "Selects the type of events that may be logged locally";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description
                    "All events are logged";
                }
                enum "content-security" {
                  value 1;
                  description
                    "Content security events are logged";
                }
                enum "fw-auth" {
                  value 2;
                  description
                    "Fw-auth events are logged";
                }
                enum "screen" {
                  value 3;
                  description
                    "Screen events are logged";
                }
                enum "alg" {
                  value 4;
                  description
                    "Alg events are logged";
                }
                enum "nat" {
                  value 5;
                  description
                    "Nat events are logged";
                }
                enum "flow" {
                  value 6;
                  description
                    "Flow events are logged";
                }
                enum "sctp" {
                  value 7;
                  description
                    "Sctp events are logged";
                }
                enum "gtp" {
                  value 8;
                  description
                    "Gtp events are logged";
                }
                enum "ipsec" {
                  value 9;
                  description
                    "Ipsec events are logged";
                }
                enum "idp" {
                  value 10;
                  description
                    "Idp events are logged";
                }
                enum "rtlog" {
                  value 11;
                  description
                    "Rtlog events are logged";
                }
                enum "pst-ds-lite" {
                  value 12;
                  description
                    "Pst-ds-lite events are logged";
                }
                enum "appqos" {
                  value 13;
                  description
                    "Appqos events are logged";
                }
                enum "secintel" {
                  value 14;
                  description
                    "Secintel events are logged";
                }
                enum "aamw" {
                  value 15;
                  description
                    "AAMW events are logged";
                }
                enum "sfw" {
                  value 16;
                  description
                    "Stateful Firewall events are logged";
                }
                enum "session" {
                  value 17;
                  description
                    "Session open and close events are logged";
                }
                enum "session-open" {
                  value 18;
                  description
                    "Session open events are logged";
                }
                enum "session-close" {
                  value 19;
                  description
                    "Session close events are logged";
                }
                enum "urlf" {
                  value 20;
                  description
                    "URLF events are logged";
                }
                enum "ha" {
                  value 21;
                  description
                    "Stateful High-Availability open and close events are logged";
                }
                enum "ha-open" {
                  value 22;
                  description
                    "Stateful High-Availability open events are logged";
                }
                enum "ha-close" {
                  value 23;
                  description
                    "Stateful High-Availability close events are logged";
                }
                enum "pcp" {
                  value 24;
                  description "PCP logs";
                }
                enum "dnsf" {
                  value 25;
                  description "DNSF";
                }
              }
            }
    
            uses apply-advanced;
          }  // list local-category
    
          leaf root-streaming {
            type empty;
            description
              "Logs will be streamed from the Root LSYS";
          }
    
          list stream {
            junos:must "(!("services service-set ${service-set} syslog mode event"))";
            junos:must-message "To configure stream, mode must be stream or stream-event";
            key "name";
            max-elements 8;
            ordered-by user;
            description
              "Set security log stream settings";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]._-]+$";
                junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
                length "1 .. 63";
              }
              description
                "Name of security log stream";
            }
    
            uses apply-advanced;
    
            leaf severity {
              type enumeration {
                enum "emergency" {
                  value 0;
                  description
                    "Conditions that cause security functions to stop";
                }
                enum "alert" {
                  value 1;
                  description
                    "Conditions that require immediate attention";
                }
                enum "critical" {
                  value 2;
                  description
                    "Critical conditions";
                }
                enum "error" {
                  value 3;
                  description
                    "General error conditions";
                }
                enum "warning" {
                  value 4;
                  description
                    "General warning conditions";
                }
                enum "notice" {
                  value 5;
                  description
                    "Non-error conditions that are of interest";
                }
                enum "info" {
                  value 6;
                  description
                    "Information about normal security operations";
                }
                enum "debug" {
                  value 7;
                  description
                    "Information normally used in debugging";
                }
              }
              description
                "Severity threshold for security logs";
            }
    
            leaf format {
              type enumeration {
                enum "syslog" {
                  value 0;
                  description
                    "Traditional syslog";
                }
                enum "sd-syslog" {
                  value 1;
                  description
                    "Structured syslog";
                }
                enum "welf" {
                  value 2;
                  description
                    "Web Trends Extended Log Format";
                }
                enum "binary" {
                  value 3;
                  description "Binary log";
                }
              }
              description
                "Specify the log stream format";
            }
    
            list category {
              junos:must "(!("security log stream ${stream} filter"))";
              junos:must-message "Category is exclusive with filter";
              key "name";
              ordered-by user;
              description
                "Selects the type of events that may be logged";
              leaf name {
                type enumeration {
                  enum "all" {
                    value 0;
                    description
                      "All events are logged";
                  }
                  enum "content-security" {
                    value 1;
                    description
                      "Content security events are logged";
                  }
                  enum "fw-auth" {
                    value 2;
                    description
                      "Fw-auth events are logged";
                  }
                  enum "screen" {
                    value 3;
                    description
                      "Screen events are logged";
                  }
                  enum "alg" {
                    value 4;
                    description
                      "Alg events are logged";
                  }
                  enum "nat" {
                    value 5;
                    description
                      "Nat events are logged";
                  }
                  enum "flow" {
                    value 6;
                    description
                      "Flow events are logged";
                  }
                  enum "sctp" {
                    value 7;
                    description
                      "Sctp events are logged";
                  }
                  enum "gtp" {
                    value 8;
                    description
                      "Gtp events are logged";
                  }
                  enum "ipsec" {
                    value 9;
                    description
                      "Ipsec events are logged";
                  }
                  enum "idp" {
                    value 10;
                    description
                      "Idp events are logged";
                  }
                  enum "rtlog" {
                    value 11;
                    description
                      "Rtlog events are logged";
                  }
                  enum "pst-ds-lite" {
                    value 12;
                    description
                      "Pst-ds-lite events are logged";
                  }
                  enum "appqos" {
                    value 13;
                    description
                      "Appqos events are logged";
                  }
                  enum "secintel" {
                    value 14;
                    description
                      "Secintel events are logged";
                  }
                  enum "aamw" {
                    value 15;
                    description
                      "AAMW events are logged";
                  }
                  enum "sfw" {
                    value 16;
                    description
                      "Stateful Firewall events are logged";
                  }
                  enum "session" {
                    value 17;
                    description
                      "Session open and close events are logged";
                  }
                  enum "session-open" {
                    value 18;
                    description
                      "Session open events are logged";
                  }
                  enum "session-close" {
                    value 19;
                    description
                      "Session close events are logged";
                  }
                  enum "urlf" {
                    value 20;
                    description
                      "URLF events are logged";
                  }
                  enum "ha" {
                    value 21;
                    description
                      "Stateful High-Availability open and close events are logged";
                  }
                  enum "ha-open" {
                    value 22;
                    description
                      "Stateful High-Availability open events are logged";
                  }
                  enum "ha-close" {
                    value 23;
                    description
                      "Stateful High-Availability close events are logged";
                  }
                  enum "pcp" {
                    value 24;
                    description "PCP logs";
                  }
                  enum "dnsf" {
                    value 25;
                    description "DNSF";
                  }
                }
              }
    
              uses apply-advanced;
            }  // list category
    
            list filter {
              junos:must "(!("security log stream ${stream} category"))";
              junos:must-message "filter is exclusive with category";
              key "name";
              ordered-by user;
              description
                "Selects the filter to filter the logs to be logged";
              leaf name {
                type enumeration {
                  enum "threat-attack" {
                    value 0;
                    description
                      "Threat-attack security events are logged";
                  }
                }
              }
    
              uses apply-advanced;
            }  // list filter
    
            container host {
              junos:must "(!("security log stream ${stream} file"))";
              junos:must-message "host is exclusive with file";
              junos:must "(("security log source-address" || ("security log source-interface" || ("security log stream ${stream} source-address" || ("services service-set ${service-set} syslog source-interface" || ("services service-set ${service-set} syslog source-address" || "services service-set ${service-set} syslog stream ${stream} source-address"))))))";
              junos:must-message "To configure host stream, security log source-address/source-interface must be configured";
              description
                "Destination to send security logs to";
              uses host-object;
            }  // container host
    
            container rate-limit {
              description
                "Rate-limit for security logs";
              uses apply-advanced;
    
              leaf rate {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 65535";
                  }
                }
                units "logs per second";
                description "Log rate";
              }
            }  // container rate-limit
    
            container file {
              junos:must "(!("security log stream ${stream} host"))";
              junos:must-message "file is exclusive with host";
              description
                "Security log file options for logs in local file";
              uses apply-advanced;
    
              leaf localfilename {
                type string {
                  junos:posix-pattern "![/ %]";
                  junos:pattern-message "Must not contain '/', % or a space";
                  length "1 .. 256";
                }
                description
                  "Name of local log file";
              }
    
              leaf size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum size of local log file in megabytes";
              }
    
              leaf rotation {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                default "10";
                description
                  "Maximum number of rotate files";
              }
    
              leaf allow-duplicates {
                type empty;
                description
                  "To disable log consolidation";
              }
            }  // container file
    
            container transport {
              presence "enable transport";
              description
                "Set security log transport settings";
              uses apply-advanced;
    
              leaf tcp-connections {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 5";
                  }
                }
                description
                  "Set tcp connection number per-stream";
              }
    
              leaf protocol {
                type enumeration {
                  enum "udp" {
                    value 0;
                    description
                      "UDP transfer for log";
                  }
                  enum "tcp" {
                    value 1;
                    description
                      "TCP transfer for log";
                  }
                  enum "tls" {
                    value 2;
                    description
                      "TLS transfer for log";
                  }
                }
                description
                  "Set security log transport protocol for the device";
              }
    
              leaf tls-profile {
                junos:must "("services ssl initiation profile $$")";
                junos:must-message "SSL profile must be defined under [services ssl initiation profile]";
                type string;
                description "TLS profile";
              }
            }  // container transport
    
            container time-format {
              description
                "Configure year or millisecond for syslog";
              uses time-format-object;
            }  // container time-format
    
            leaf source-address {
              type jt:ipaddr;
              description
                "Source ip address used when exporting security logs";
            }
          }  // list stream
    
          container file {
            description
              "Security log file options for logs in binary/protobuf format";
            uses apply-advanced;
    
            leaf filename {
              type string {
                length "1 .. 256";
              }
              description "Name of log file";
            }
    
            leaf size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 10";
                }
              }
              description
                "Maximum size of log file in megabytes";
            }
    
            leaf path {
              type string {
                length "1 .. 256";
              }
              description "Path to log files";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10";
                }
              }
              description
                "Maximum number of log files";
            }
          }  // container file
    
          container apply {
            description
              "Apply settings from other features";
            uses apply-advanced;
    
            leaf dscp-code-point {
              junos:must "("class-of-service host-outbound-traffic dscp-code-point")";
              junos:must-message "class-of-service host-outbound-traffic dscp-code-point must be defined";
              type empty;
              description
                "Apply setting class-of-service host-outbound-traffic dscp-code-point";
            }
          }  // container apply
    
          container traceoptions {
            description
              "Security log 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
                "List of things to include in trace";
              leaf name {
                type enumeration {
                  enum "source" {
                    value 0;
                    description
                      "Communication with security log forwarder";
                  }
                  enum "configuration" {
                    value 1;
                    description
                      "Reading of configuration";
                  }
                  enum "all" {
                    value 2;
                    description "Everything";
                  }
                  enum "report" {
                    value 3;
                    description "Trace report";
                  }
                  enum "hpl" {
                    value 4;
                    description
                      "Trace HPL logging";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          list profile {
            key "name";
            max-elements 10;
            ordered-by user;
            description
              "Security log profile setting";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:].-]+$";
                junos:pattern-message "Must be a string consisting of letters, numbers, dashes";
                length "1 .. 63";
              }
              description
                "Name of security log profile";
            }
    
            uses apply-advanced;
    
            list stream-name {
              junos:must "((".. category" || ".. template"))";
              junos:must-message "To send logs must define cagetory or template";
              key "name";
              max-elements 4;
              ordered-by user;
              description "Use which stream ";
              leaf name {
                junos:must "("security log stream $$")";
                junos:must-message "stream must be defined under [security log stream]";
                type string;
                description "Name of the stream";
              }
    
              uses apply-advanced;
            }  // list stream-name
    
            container category {
              junos:must "(!(" .. template"))";
              junos:must-message "Cannot configure category and template for the same profile";
              presence "enable category";
              description
                "Selects the category of events for the profile";
              uses apply-advanced;
    
              container session {
                presence "enable session";
                description
                  "Select session category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container session
    
              container webfilter {
                presence "enable webfilter";
                description
                  "Select webfilter category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container webfilter
    
              container antivirus {
                presence "enable antivirus";
                description
                  "Select antivirus category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container antivirus
    
              container content-filter {
                presence "enable content-filter";
                description
                  "Select content-filter category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container content-filter
    
              container antispam {
                presence "enable antispam";
                description
                  "Select antispam category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container antispam
    
              container idp {
                presence "enable idp";
                description
                  "Select idp category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container idp
    
              container secintel {
                presence "enable secintel";
                description
                  "Select secintel category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container secintel
    
              container aamw {
                presence "enable aamw";
                description
                  "Select aamw category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container aamw
    
              container ssl-proxy {
                presence "enable ssl-proxy";
                description
                  "Select ssl-proxy category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container ssl-proxy
    
              container apptrack {
                presence "enable apptrack";
                description
                  "Select apptrack category";
                uses apply-advanced;
    
                list field-extra-name {
                  key "name";
                  description
                    "Select the extra Fields, only apply to sd-syslog and syslog formt";
                  leaf name {
                    type enumeration {
                      enum "sd-id" {
                        value 0;
                        description
                          "Add SD-ID field, only apply to sd-syslog and syslog formt";
                      }
                      enum "hostname" {
                        value 1;
                        description
                          "Add hostname field, only apply to sd-syslog and syslog formt";
                      }
                      enum "timestamp" {
                        value 2;
                        description
                          "Add timestamp field, only apply to sd-syslog and syslog formt";
                      }
                    }
                    description
                      "The name of the extra field";
                  }
    
                  uses apply-advanced;
                }  // list field-extra-name
    
                list field-name {
                  key "name";
                  ordered-by user;
                  description
                    "Select the fields by order";
                  leaf name {
                    type string;
                    description
                      "The name of the field";
                  }
    
                  uses apply-advanced;
                }  // list field-name
              }  // container apptrack
            }  // container category
    
            container default-profile {
              presence "enable default-profile";
              uses apply-advanced;
    
              leaf activate {
                type empty;
                description
                  "Set this profile as default profile";
              }
            }  // container default-profile
    
            container template {
              junos:must "(!(" .. category"))";
              junos:must-message "Cannot configure category and template for the same profile";
              presence "enable template";
              description
                "Select the template for the profile";
              uses apply-advanced;
    
              choice template-id {
                leaf traditional-firewall {
                  type empty;
                  description
                    "Traditional-firewall";
                }
                leaf unified-ngfw {
                  type empty;
                  description "Unified-ngfw";
                }
                leaf sd-wan {
                  type empty;
                  description "Sd-wan";
                }
              }  // choice template-id
            }  // container template
          }  // list profile
        }  // grouping log-object
    
        grouping host-object {
          uses apply-advanced;
    
          leaf ipaddr {
            type string {
              length "1 .. 256";
            }
            description "IP address/Host name";
          }
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Host port number";
          }
    
          leaf routing-instance {
            junos:must "((("security" && "routing-instances $$ instance-type virtual-router") || "services"))";
            junos:must-message "Virtual router must be defined under [routing-instances]";
            junos:must "("routing-instances $$")";
            junos:must-message "Routing-instance must be defined";
            type string;
            description "Routing-instance name";
          }
    
          leaf log-tag {
            type string {
              junos:posix-pattern "![ =:]{1,15}";
              junos:pattern-message "Must be a string of 15 characters or less";
            }
            description
              "Tag included in logs to this host";
          }
        }  // grouping host-object
    
        grouping logical-system-type {
          description "Logical system name";
          leaf name {
            junos:must "("logical-systems $$")";
            junos:must-message "Logical systems must be defined under [logical-systems] ";
            type string;
            description "Logical system name";
          }
    
          uses apply-advanced;
    
          leaf max-sessions {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Max number of IDP sessions";
          }
        }  // grouping logical-system-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 lsp_nh_obj {
          leaf name {
            type string;
            description
              "LSP to use to reach destination";
          }
    
          uses apply-advanced;
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of LSP next hop";
          }
    
          leaf metric {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Metric of LSP next hop";
          }
        }  // grouping lsp_nh_obj
    
        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 martian_type {
          description "Invalid routes";
          leaf address {
            type jt:ipprefix;
            description "IP address or hostname";
          }
    
          leaf choice-ident {
            type enumeration {
              enum "exact" {
                value 0;
              }
              enum "longer" {
                value 1;
              }
              enum "orlonger" {
                value 2;
              }
              enum "upto" {
                value 3;
              }
              enum "through" {
                value 4;
              }
              enum "prefix-length-range" {
                value 5;
              }
              enum "allow" {
                value 6;
              }
            }
          }
    
          leaf choice-value {
            type string;
          }
    
          leaf allow {
            type empty;
          }
        }  // grouping martian_type
    
        grouping message-object {
          uses apply-advanced;
    
          container v0 {
            description "GTPv0 message type";
            uses apply-advanced;
    
            leaf msg-list-name {
              junos:must "(("security gprs gtp message-list $$" || "security gtp message-list $$"))";
              junos:must-message "referenced message-list not found";
              type string {
                length "1 .. 23";
              }
              description
                "GTP message list name";
            }
          }  // container v0
    
          container v1 {
            description "GTPv1 message type";
            uses apply-advanced;
    
            leaf msg-list-name {
              junos:must "(("security gprs gtp message-list $$" || "security gtp message-list $$"))";
              junos:must-message "referenced message-list not found";
              type string {
                length "1 .. 23";
              }
              description
                "GTP message list name";
            }
          }  // container v1
    
          container v2 {
            description "GTPv2 message type";
            uses apply-advanced;
    
            leaf msg-list-name {
              junos:must "(("security gprs gtp message-list $$" || "security gtp message-list $$"))";
              junos:must-message "referenced message-list not found";
              type string {
                length "1 .. 23";
              }
              description
                "GTP message list name";
            }
          }  // container v2
        }  // grouping message-object
    
        grouping mime-list-type {
          description
            "Configure mime-list object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 40";
            }
            description
              "Configure name of mime-list object";
          }
    
          uses apply-advanced;
    
          leaf-list value {
            type string {
              length "1 .. 249";
            }
            ordered-by user;
            description "Configure MIME value";
          }
        }  // grouping mime-list-type
    
        grouping mirror-filter-type {
          description
            "Secuirty mirror filter settings";
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string of letters, numbers, dashes or underscores";
              length "1 .. 63";
            }
            description "Name of the filter";
          }
    
          uses apply-advanced;
    
          leaf protocol {
            type string;
            description "Match IP protocol type";
          }
    
          leaf source-prefix {
            type jt:ipprefix;
            description
              "Source IP address prefix";
          }
    
          leaf destination-prefix {
            type jt:ipprefix;
            description
              "Destination IP address prefix";
          }
    
          leaf source-port {
            type string;
            description
              "Match TCP/UDP source port";
          }
    
          leaf destination-port {
            type string;
            description
              "Match TCP/UDP destination port";
          }
    
          leaf interface-in {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Incoming Logical interface";
          }
    
          leaf interface-out {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Outgoing Logical interface";
          }
    
          container output {
            description
              "Configure output interface and MAC address";
            uses apply-advanced;
    
            leaf interface {
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Outgoing Logical interface";
            }
    
            leaf destination-mac {
              type string;
              description "MAC address to match";
            }
          }  // container output
        }  // grouping mirror-filter-type
    
        grouping mpls_pm_family_output_type {
          uses apply-advanced;
        }  // grouping mpls_pm_family_output_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 multicast_interface_options_type {
          description
            "Multicast interface options";
          leaf name {
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          uses apply-advanced;
    
          container maximum-bandwidth {
            presence "enable maximum-bandwidth";
            description
              "Maximum multicast bandwidth for the interface";
            leaf bandwidth-limit {
              type string;
              units "bps";
              description
                "Maximum multicast bandwidth on the interface";
            }
          }  // container maximum-bandwidth
    
          choice enable-disable {
            leaf enable {
              type empty;
              status deprecated;
              description "Enable Multicast";
            }
            leaf disable {
              type empty;
              status deprecated;
              description "Disable Multicast";
            }
          }  // choice enable-disable
    
          container reverse-oif-mapping {
            presence
              "enable reverse-oif-mapping";
            description
              "Enable reverse OIF mapping on the multicast interface";
            uses apply-advanced;
    
            leaf no-qos-adjust {
              type empty;
              description
                "Disable reverse OIF mapping QoS adjustment";
            }
          }  // container reverse-oif-mapping
    
          leaf subscriber-leave-timer {
            junos:must "(".. reverse-oif-mapping")";
            junos:must-message "reverse-oif-mapping must be set";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 30";
              }
            }
            units "seconds";
            description
              "Timeout in seconds to credit back the bandwidth on the subscriber interface";
          }
    
          leaf no-qos-adjust {
            type empty;
            description
              "Disable QoS adjustment for this interface";
          }
        }  // grouping multicast_interface_options_type
    
        grouping named-address-book-type {
          description
            "Configure global address book";
          leaf name {
            type string;
            description "Address book name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of address book";
          }
    
          list address {
            key "name";
            ordered-by user;
            description
              "Define a security address";
            uses address_type;
          }  // list address
    
          list address-set {
            key "name";
            ordered-by user;
            description
              "Define a security address set";
            uses address_set_type;
          }  // list address-set
    
          container attach {
            junos:must "(!("security address-book global attach"))";
            junos:must-message "It is not allowed to attach the global address book to any particular interface, zone or routing-instance.";
            description
              "Attach this address book to interface, zone or routing-instance";
            uses apply-advanced;
    
            list zone {
              key "name";
              ordered-by user;
              description
                "Define a zone to be attached";
              leaf name {
                junos:must "(unique "security address-book <*> attach zone $$")";
                junos:must-message "Security zone must be unique in address books";
                junos:must "("security zones security-zone $$")";
                junos:must-message "Security zone must be defined";
                type string {
                  length "1 .. 63";
                }
                description "Security zone name";
              }
    
              uses apply-advanced;
            }  // list zone
          }  // container attach
        }  // grouping named-address-book-type
    
        grouping address_set_type {
          leaf name {
            junos:must "(!(".. .. address $$"))";
            junos:must-message "Security address and address-set cannot have same name";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]:./_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, colons, periods, slashes, dashes and underscores";
              length "1 .. 63";
            }
            description
              "Security address-set name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of address set";
          }
    
          list address {
            key "name";
            max-elements 16384;
            ordered-by user;
            description
              "Address to be included in this set";
            leaf name {
              junos:must "(".. .. .. address $$")";
              junos:must-message "referenced address must be defined under address-book";
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]:./_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, colons, periods, slashes, dashes and underscores";
                length "1 .. 63";
              }
              description
                "Security address name";
            }
    
            uses apply-advanced;
          }  // list address
    
          list address-set {
            key "name";
            max-elements 16384;
            ordered-by user;
            description
              "Define an address-set name";
            leaf name {
              junos:must "(".. .. .. address-set $$")";
              junos:must-message "referenced address must be defined under address-book";
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]:./_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, colons, periods, slashes, dashes and underscores";
                length "1 .. 63";
              }
            }
    
            uses apply-advanced;
          }  // list address-set
        }  // grouping address_set_type
    
        grouping address_type {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]:./_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, colons, periods, slashes, dashes and underscores";
              length "1 .. 63";
            }
            description "Security address name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of address";
          }
    
          choice address-content {
            leaf ip-prefix {
              type jt:ipprefix;
              description
                "Numeric IPv4 or IPv6 address with prefix";
            }
            list dns-name {
              key "name";
              max-elements 1;
              ordered-by user;
              description "DNS address name";
              uses dns-name-type;
            }  // list dns-name
            list wildcard-address {
              key "name";
              max-elements 1;
              ordered-by user;
              description
                "Numeric IPv4 wildcard address with in the form of a.d.d.r/netmask";
              uses wildcard-address-type;
            }  // list wildcard-address
            list range-address {
              key "name";
              max-elements 1;
              ordered-by user;
              description "Address range";
              uses range-address-type;
            }  // list range-address
            list address-range {
              key "name";
              max-elements 1;
              ordered-by user;
              description "Address range";
              uses usf-range-address-type;
            }  // list address-range
          }  // choice address-content
        }  // grouping address_type
    
        grouping dns-name-type {
          description "DNS address name";
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
              junos:pattern-message "Must be a valid DNS name";
              length "1 .. 253";
            }
            description
              "Fully qualified hostname";
          }
    
          uses apply-advanced;
    
          leaf ipv4-only {
            type empty;
            description "IPv4 dns address";
          }
    
          leaf ipv6-only {
            junos:must "(!(".. ipv4-only"))";
            junos:must-message "ipv4-only and ipv6-only cannot be configured together";
            type empty;
            description "IPv6 dns address";
          }
        }  // grouping dns-name-type
    
        grouping nat-object {
          description
            "Configure Network Address Translation";
          uses apply-advanced;
    
          container source {
            description "Configure Source NAT";
            uses ssg-source-nat-object;
          }  // container source
    
          container destination {
            description
              "Configure Destination NAT";
            uses ssg-destination-nat-object;
          }  // container destination
    
          container static {
            description "Configure Static NAT";
            uses ssg-static-nat-object;
          }  // container static
    
          container proxy-arp {
            description "Configure Proxy ARP";
            uses ssg-proxy-arp-object;
          }  // container proxy-arp
    
          container proxy-ndp {
            description "Configure Proxy NDP";
            uses ssg-proxy-ndp-object;
          }  // container proxy-ndp
    
          container natv6v4 {
            description
              "Configure NAT between IPv6 and IPv4 options";
            uses apply-advanced;
    
            leaf no-v6-frag-header {
              type empty;
              description
                "V6 packet does not always add fragment header when performing nat translation from v4 side to v6 side ";
            }
          }  // container natv6v4
    
          leaf allow-overlapping-pools {
            type empty;
            description
              "IP addresses of NAT pools can overlap with other pool";
          }
    
          container traceoptions {
            description "NAT 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 "configuration" {
                    value 0;
                    description
                      "Trace configuration events";
                  }
                  enum "flow" {
                    value 1;
                    description
                      "Trace flow events";
                  }
                  enum "routing-socket" {
                    value 2;
                    description
                      "Trace routing socket events";
                  }
                  enum "routing-protocol" {
                    value 3;
                    description
                      "Trace routing protocol events";
                  }
                  enum "all" {
                    value 4;
                    description
                      "Trace everything";
                  }
                  enum "source-nat-re" {
                    value 5;
                    description
                      "Trace source nat events on RE side";
                  }
                  enum "source-nat-rt" {
                    value 6;
                    description
                      "Trace source nat events on PFE-RT side";
                  }
                  enum "source-nat-pfe" {
                    value 7;
                    description
                      "Trace source nat events on PFE-ukernel side";
                  }
                  enum "destination-nat-re" {
                    value 8;
                    description
                      "Trace destination nat events on RE side";
                  }
                  enum "destination-nat-rt" {
                    value 9;
                    description
                      "Trace destination nat events on PFE-RT side";
                  }
                  enum "destination-nat-pfe" {
                    value 10;
                    description
                      "Trace destination nat events on PFE-ukernel side";
                  }
                  enum "static-nat-re" {
                    value 11;
                    description
                      "Trace static nat events on RE side";
                  }
                  enum "static-nat-rt" {
                    value 12;
                    description
                      "Trace static nat events on PFE-RT side";
                  }
                  enum "static-nat-pfe" {
                    value 13;
                    description
                      "Trace static nat events on PFE-ukernel side";
                  }
                  enum "nat-svc-set-re" {
                    value 14;
                    description
                      "Trace NAT and svc-set events on RE side";
                  }
                }
              }
    
              leaf syslog {
                type empty;
                description
                  "Write NAT flow traces to system log also";
              }
            }  // list flag
          }  // container traceoptions
    
          list ipv6-multicast-interfaces {
            key "name";
            ordered-by user;
            description
              "Enable IPv6 multicast filter for IPv6 NAT";
            leaf name {
              type string;
              description "Interface name";
            }
    
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description
                "Disable IPv6 multicast filter for IPv6 NAT";
            }
          }  // list ipv6-multicast-interfaces
    
          list port-forwarding {
            key "name";
            ordered-by user;
            description
              "Define a port-forwarding pool";
            uses pf_mapping;
          }  // list port-forwarding
        }  // grouping nat-object
    
        grouping network_type {
          leaf name {
            type jt:ipprefix;
            description "Network prefix";
          }
    
          uses apply-advanced;
    
          leaf-list dyn-tunnel-attribute-policy {
            type jt:policy-algebra;
            ordered-by user;
            description
              "Import policy for dynamic-tunnel under this destination network";
          }
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of tunnel route under this destination network";
          }
    
          leaf-list colors {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            ordered-by user;
            description
              "Set of color list that will be supported for tunnel creation";
          }
        }  // grouping network_type
    
        grouping next_hop_group_intf_type {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface through which to send sampled traffic";
          }
    
          uses apply-advanced;
    
          list next-hop {
            junos:must "((".. .. group-type inet" || ".. .. group-type inet6"))";
            junos:must-message "Next-hop can be specified only for group-type inet or inet6";
            key "name";
            ordered-by user;
            description
              "Address of next hop through which to send sampled traffic";
            uses next_hop_type;
          }  // list next-hop
        }  // grouping next_hop_group_intf_type
    
        grouping next_hop_subgroup_intf_type {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface through which to send sampled traffic";
          }
    
          uses apply-advanced;
    
          list next-hop {
            junos:must "((".. .. .. group-type inet" || ".. .. .. group-type inet6"))";
            junos:must-message "Next-hop can be specified only for group-type inet or inet6";
            key "name";
            ordered-by user;
            description
              "Address of next hop through which to send sampled traffic";
            uses next_hop_type;
          }  // list next-hop
        }  // grouping next_hop_subgroup_intf_type
    
        grouping next_hop_type {
          description
            "Address of next hop through which to send sampled traffic";
          leaf name {
            type jt:ipaddr;
          }
    
          uses apply-advanced;
        }  // grouping next_hop_type
    
        grouping override-local-server-type {
          description "DHCP override processing";
          uses apply-advanced;
    
          leaf bootp-support {
            type empty;
            description
              "Allow processing of bootp requests";
          }
    
          container delay-offer {
            description
              "Filter options for dhcp-server";
            uses dhcpv4-filter-option;
          }  // container delay-offer
    
          container process-inform {
            presence "enable process-inform";
            description "Process INFORM PDUs";
            uses apply-advanced;
    
            leaf pool {
              type string {
                length "1 .. 64";
              }
              description
                "Pool name for family inet";
            }
          }  // container process-inform
    
          container include-option-82 {
            description
              "Include option-82 in reply packets";
            uses apply-advanced;
    
            leaf nak {
              type empty;
              description
                "Include option-82 in NAK";
            }
    
            leaf forcerenew {
              type empty;
              description
                "Include option-82 in FORCERENEW";
            }
          }  // container include-option-82
    
          leaf delete-binding-on-renegotiation {
            type empty;
            description
              "Delete binding on renegotiation";
          }
    
          leaf allow-no-end-option {
            type empty;
            description
              "Allow packets without end-of-option";
          }
    
          leaf asymmetric-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced lease time for the client. In seconds";
          }
    
          leaf protocol-attributes {
            type string {
              length "1 .. 64";
            }
            description
              "DHCPv4 attributes to use as defined under access protocol-attributes";
          }
    
          leaf dual-stack {
            type string {
              length "1 .. 64";
            }
            description
              "Dual stack group to use";
          }
        }  // grouping override-local-server-type
    
        grouping dhcpv4-filter-option {
          description
            "Generic DHCPv4 filter processing";
          uses apply-advanced;
    
          leaf delay-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 30";
              }
            }
            units "seconds";
            default "3";
            description
              "Time delay between discover and offer";
          }
    
          container based-on {
            description "Option number";
            uses apply-advanced;
    
            container option-82 {
              presence "enable option-82";
              description "Option 82";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-82
    
            container option-60 {
              presence "enable option-60";
              description "Option 60";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-60
    
            container option-77 {
              presence "enable option-77";
              description "Option 77";
              uses apply-advanced;
    
              container equals {
                description
                  "Generic option equals";
                uses server-v6-option-ascii-hex;
              }  // container equals
    
              container not-equals {
                description
                  "Generic option not equals";
                uses server-v6-option-ascii-hex;
              }  // container not-equals
    
              container starts-with {
                description
                  "Generic option starts-with";
                uses server-v6-option-ascii-hex;
              }  // container starts-with
            }  // container option-77
          }  // container based-on
        }  // grouping dhcpv4-filter-option
    
        grouping override-type {
          description "DHCP override processing";
          uses apply-advanced;
    
          leaf no-unicast-replies {
            junos:must "(!(".. layer2-unicast-replies"))";
            junos:must-message "no-unicast-replies cannot be configured with layer2-unicast-replies";
            type empty;
            description
              "Overwrite unicast bit in incoming packet, when present";
          }
    
          leaf allow-no-end-option {
            type empty;
            description
              "Allow packets without end-of-option";
          }
    
          container always-write-option-82 {
            presence
              "enable always-write-option-82";
            description
              "Overwrite existing value of option 82, when present";
            uses write-option-82-type;
          }  // container always-write-option-82
    
          leaf user-defined-option-82 {
            type string {
              length "1 .. 252";
            }
            description
              "Set user defined description for option-82";
          }
    
          leaf trust-option-82 {
            type empty;
            description
              "Trust options-82 option";
          }
    
          leaf disable-relay {
            type empty;
            description
              "Disable DHCP relay processing";
          }
    
          leaf no-bind-on-request {
            type empty;
            description
              "Do not bind if stray DHCP request is received";
          }
    
          leaf bootp-support {
            type empty;
            description
              "Allows relay of bootp req and reply";
          }
    
          leaf dual-stack {
            type string {
              length "1 .. 64";
            }
            description
              "Dual stack group to use.";
          }
    
          leaf asymmetric-lease-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "600 .. 86400";
              }
            }
            units "seconds";
            description
              "Use a reduced lease time for the client. In seconds";
          }
    
          container replace-ip-source-with {
            description
              "Replace IP source address in request and release packets";
            choice replacement-type {
              leaf giaddr {
                type empty;
                description
                  "Replace IP source address with giaddr";
              }
            }  // choice replacement-type
          }  // container replace-ip-source-with
    
          leaf send-release-on-delete {
            type empty;
            description
              "Always send RELEASE to the server when a binding is deleted";
          }
    
          leaf relay-source {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface for relay source";
          }
    
          leaf delete-binding-on-renegotiation {
            type empty;
            description
              "Delete binding on rengotiation";
          }
        }  // grouping override-type
    
        grouping p2mp_ldp_lsp_nh_obj {
          uses apply-advanced;
    
          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;
    
            leaf lsp-id {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 65535";
                }
              }
              description
                "Configure the generic LSP identifier";
            }
    
            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
        }  // grouping p2mp_ldp_lsp_nh_obj
    
        grouping packet-capture-egress-intf-type {
          uses apply-advanced;
    
          list interface {
            key "name";
            description "Interface options";
            leaf name {
              type union {
                type jt:interface-device;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
          }  // list interface
        }  // grouping packet-capture-egress-intf-type
    
        grouping packet_accounting_output_type {
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          leaf flow-inactive-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "15 .. 1800";
              }
            }
            units "seconds";
            default "60";
            description
              "Interval of inactivity that marks a flow inactive";
          }
    
          leaf flow-active-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "60 .. 1800";
              }
            }
            units "seconds";
            default "1800";
            description
              "Interval after which an active flow is exported";
          }
    
          list cflowd {
            junos:must "(all ".. interface <*> source-address")";
            junos:must-message "'forwarding-options accounting output interface source-address' must be specified with 'flow-server' and 'interface'";
            junos:must "(any ".. interface <*>")";
            junos:must-message "'forwarding-options accounting output interface' must be specified";
            key "name";
            description
              "Cflowd collector where flow records are sent";
            uses cflowd_packet_accounting_type;
          }  // list cflowd
    
          list interface {
            key "name";
            description
              "Interfaces used to send monitored information";
            uses packet_export_intf_type;
          }  // list interface
        }  // grouping packet_accounting_output_type
    
        grouping cflowd_packet_accounting_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf version {
            type enumeration {
              enum "5" {
                value 0;
                description
                  "Export cflowd aggregates in version 5 format";
              }
              enum "8" {
                value 1;
                description
                  "Export cflowd aggregates in version 8 format";
              }
            }
            default "5";
            description
              "Format of exported cflowd aggregates";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
        }  // grouping cflowd_packet_accounting_type
    
        grouping aggregation_type {
          uses apply-advanced;
    
          leaf autonomous-system {
            type empty;
            description
              "Aggregate by autonomous system number";
          }
    
          leaf protocol-port {
            type empty;
            description
              "Aggregate by protocol and port number";
          }
    
          leaf source-prefix {
            type empty;
            description
              "Aggregate by source prefix";
          }
    
          leaf destination-prefix {
            type empty;
            description
              "Aggregate by destination prefix";
          }
    
          container source-destination-prefix {
            presence
              "enable source-destination-prefix";
            description
              "Aggregate by source and destination prefix";
            uses apply-advanced;
    
            leaf caida-compliant {
              type empty;
              description
                "Compatible with Caida record format for prefix aggregation (v8)";
            }
          }  // container source-destination-prefix
        }  // grouping aggregation_type
    
        grouping packet_export_intf_type {
          leaf name {
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interfaces used to send monitored information";
          }
    
          uses apply-advanced;
    
          leaf engine-id {
            type union {
              type uint8;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Identity (number) of this accounting interface";
          }
    
          leaf engine-type {
            type union {
              type uint8;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Type (number) of this accounting interface";
          }
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Address to use for generating monitored packets";
          }
        }  // grouping packet_export_intf_type
    
        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 pf_mapping {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Port Forwarding name";
          }
    
          uses apply-advanced;
    
          list destined-port {
            key "port translated-port";
            max-elements 32;
            ordered-by user;
            description
              "Port forwarding mappings";
            leaf port {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 65535";
                }
              }
              description "Destination port";
            }
    
            leaf translated-port {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 65535";
                }
              }
              description "Translated port";
            }
          }  // list destined-port
        }  // grouping pf_mapping
    
        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 pm-rspan-vlan {
          description "RSPAN vlan for pm";
          leaf name {
            type string;
            description "VLAN name or VLAN id";
          }
    
          uses apply-advanced;
    
          leaf no-tag {
            type empty;
            description
              "Removes extra RSPAN tag from mirrored packets";
          }
        }  // grouping pm-rspan-vlan
    
        grouping pm_family_input_type {
          description
            "Input options for port mirroring";
          uses apply-advanced;
    
          leaf rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Ratio of packets to be sampled (1 out of N)";
          }
    
          leaf run-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 20";
              }
            }
            description
              "Number of samples after initial trigger";
          }
    
          leaf maximum-packet-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 9216";
              }
            }
            units "bytes";
            default "0";
            description
              "Maximum length of the mirrored packet";
          }
        }  // grouping pm_family_input_type
    
        grouping policy-object-type {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Network Security Policy Tracing 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 "configuration" {
                    value 0;
                    description
                      "Trace configuration events";
                  }
                  enum "routing-socket" {
                    value 1;
                    description
                      "Trace routing socket events";
                  }
                  enum "compilation" {
                    value 2;
                    description
                      "Policy compilation events";
                  }
                  enum "ipc" {
                    value 3;
                    description
                      "Inter-process communication events";
                  }
                  enum "rules" {
                    value 4;
                    description
                      "Policy rules related events";
                  }
                  enum "lookup" {
                    value 5;
                    description
                      "Policy lookup events";
                  }
                  enum "all" {
                    value 6;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          list policy {
            key "from-zone-name to-zone-name";
            ordered-by user;
            description
              "Define a policy context from this zone";
            leaf from-zone-name {
              junos:must "((".. .. .. .. security zones security-zone $$" || ".. .. .. .. .. security zones security-zone $$"))";
              junos:must-message "Security zone must be defined";
              type string {
                length "1 .. 63";
              }
              description "Source zone";
            }
    
            leaf to-zone-name {
              junos:must "((".. .. .. .. security zones security-zone $$" || ".. .. .. .. .. security zones security-zone $$"))";
              junos:must-message "Security zone must be defined";
              type string {
                length "1 .. 63";
              }
              description "Destination zone";
            }
    
            uses apply-advanced;
    
            list policy {
              key "name";
              ordered-by user;
              description
                "Define security policy in specified zone-to-zone direction";
              uses policy_type;
            }  // list policy
    
            container application-services {
              description "Application Services";
              uses context_application_services_type;
            }  // container application-services
          }  // list policy
    
          container global {
            description
              "Define a global policy context";
            uses apply-advanced;
    
            list policy {
              key "name";
              ordered-by user;
              description
                "Define security policy in global context";
              uses policy_type;
            }  // list policy
          }  // container global
    
          list policy-set {
            key "name";
            ordered-by user;
            description
              "Define a policy context for tunnel-inspection";
            leaf name {
              type string {
                length "1 .. 63";
              }
              description "Policy-set name";
            }
    
            uses apply-advanced;
    
            list policy {
              key "name";
              ordered-by user;
              description
                "Define security policy in tunnel-inspection context";
              uses policy_type;
            }  // list policy
          }  // list policy-set
    
          container default-policy {
            description
              "Configure default action when no user-defined policy match";
            uses apply-advanced;
    
            leaf default-action {
              type enumeration {
                enum "permit-all" {
                  value 0;
                  description
                    "Permit all traffic if no policy match";
                }
                enum "deny-all" {
                  value 1;
                  description
                    "Deny all traffic if no policy match";
                }
              }
              default "deny-all";
              description "Default action";
            }
    
            leaf log-profile {
              junos:must "("security log profile $$")";
              junos:must-message "RTLOG profile must be defined under [security log profile]";
              type string;
              description "Rtlog profile";
            }
          }  // container default-policy
    
          container policy-rematch {
            presence "enable policy-rematch";
            description
              "Re-evaluate the policy when changed";
            leaf extensive {
              type empty;
              description
                "Perform policy extensive rematch";
            }
          }  // container policy-rematch
    
          container policy-stats {
            presence "enable policy-stats";
            description
              "Parameters for policy statistics";
            uses apply-advanced;
    
            leaf system-wide {
              type enumeration {
                enum "enable" {
                  value 0;
                  description
                    "Enable policy system-wide statistics";
                }
                enum "disable" {
                  value 1;
                  description
                    "Disable policy system-wide statistics";
                }
              }
              description
                "Enable/Disable system-wide policy statistics";
            }
          }  // container policy-stats
    
          container pre-id-default-policy {
            description
              "Configure default policy action before dynamic application is finally identified";
            uses apply-advanced;
    
            container then {
              description
                "Specify policy action to take when packet match criteria";
              uses apply-advanced;
    
              container log {
                description "Enable log";
                uses log_type;
              }  // container log
    
              container session-timeout {
                description "Session timeout";
                uses session_timeout_type;
              }  // container session-timeout
            }  // container then
          }  // container pre-id-default-policy
    
          container unified-policy {
            description
              "Unified policies lookup limitations";
            uses apply-advanced;
    
            leaf max-lookups {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              description
                "Max lookup times upon micro-app transaction finals";
            }
          }  // container unified-policy
    
          container dns-cache {
            description
              "Define security policy dns-cache behaviors";
            uses apply-advanced;
    
            container error-response-delete-ip {
              presence
                "enable error-response-delete-ip";
              description
                "Clear DNS cache entry IP on error DNS response";
              uses apply-advanced;
    
              leaf retry-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "5 .. 86400";
                  }
                }
                units "seconds";
                default "300";
                description
                  "Interval between deleting IP and resending DNS requests";
              }
            }  // container error-response-delete-ip
          }  // container dns-cache
    
          list stateful-firewall-rule {
            key "name";
            ordered-by user;
            description
              "Define a stateful-firewall-rule";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                length "1 .. 63";
              }
              description
                "Stateful-firewall-rule name";
            }
    
            uses apply-advanced;
    
            leaf match-direction {
              type enumeration {
                enum "input" {
                  value 0;
                  description
                    "Match on input to interface";
                }
                enum "output" {
                  value 1;
                  description
                    "Match on output from interface";
                }
                enum "input-output" {
                  value 2;
                  description
                    "Match on input to or output from interface";
                }
              }
              description
                "Direction for which the rule match is applied";
            }
    
            list policy {
              key "name";
              ordered-by user;
              description
                "Define a stateful-firewall policy";
              uses policy_type;
            }  // list policy
          }  // list stateful-firewall-rule
    
          list stateful-firewall-rule-set {
            key "name";
            ordered-by user;
            description
              "Defines a set of stateful firewall rules";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                length "1 .. 63";
              }
              description
                "Name of the stateful firewall rule set";
            }
    
            uses apply-advanced;
    
            list stateful-firewall-rule {
              key "name";
              ordered-by user;
              description
                "Rule to be included in this stateful firewall rule set";
              leaf name {
                junos:must "("services policies stateful-firewall-rule $$")";
                junos:must-message "Undefined stateful-firewall-rule. Rule must be configured under policies";
                type string {
                  junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]{0,62}$";
                  junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                }
                description
                  "Stateful-firewall-rule name";
              }
    
              uses apply-advanced;
            }  // list stateful-firewall-rule
          }  // list stateful-firewall-rule-set
        }  // grouping policy-object-type
    
        grouping context_application_services_type {
          uses apply-advanced;
    
          leaf security-metadata-streaming-policy {
            junos:must "("services security-metadata-streaming policy $$")";
            junos:must-message "security-metadata-streaming policy must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Specify security-metadata-streaming-policy";
          }
        }  // grouping context_application_services_type
    
        grouping log_type {
          uses apply-advanced;
    
          leaf session-init {
            type empty;
            description
              "Log at session init time";
          }
    
          leaf session-close {
            type empty;
            description
              "Log at session close time";
          }
    
          leaf session-update {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 1440";
              }
            }
            units "minutes";
            default "0";
            description
              "Log with specified interval (0 to disable this log)";
          }
    
          leaf sfw {
            type empty;
            description
              "Display Stateful-fire-wall SYSLOGs";
          }
    
          leaf profile {
            junos:must "("security log profile $$ stream-name")";
            junos:must-message "RTLOG profile with stream must be defined under [security log profile]";
            type string;
            description "Name of rtlog profile";
          }
        }  // grouping log_type
    
        grouping policy_type {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Security policy name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of policy";
          }
    
          container match {
            description
              "Specify security policy match-criteria";
            uses apply-advanced;
    
            choice source-address_choice {
              leaf-list source-address {
                type string;
                ordered-by user;
              }
            }  // choice source-address_choice
    
            choice destination-address_choice {
              leaf-list destination-address {
                type string;
                ordered-by user;
              }
            }  // choice destination-address_choice
    
            leaf source-address-excluded {
              type empty;
              description
                "Exclude source addresses";
            }
    
            leaf destination-address-excluded {
              type empty;
              description
                "Exclude destination addresses";
            }
    
            choice application_type_choice {
              leaf-list application {
                type string;
                ordered-by user;
              }
            }  // choice application_type_choice
    
            choice source_identity_choice {
              leaf-list source-identity {
                type string;
                ordered-by user;
              }
            }  // choice source_identity_choice
    
            choice source_identity_feed_choice {
              leaf-list source-identity-feed {
                type string {
                  length "1 .. 64";
                }
                ordered-by user;
                description
                  "Specify source-identity-feed name from list to match";
              }
            }  // choice source_identity_feed_choice
    
            choice destination_identity_feed_choice {
              leaf-list destination-identity-feed {
                type string {
                  length "1 .. 64";
                }
                ordered-by user;
                description
                  "Specify destination-identity-feed name from list to match";
              }
            }  // choice destination_identity_feed_choice
    
            choice source_end_user_profile_choice {
              container source-end-user-profile {
                description
                  "Match source end user profile";
                uses match_source_end_user_profile_value;
              }  // container source-end-user-profile
            }  // choice source_end_user_profile_choice
    
            choice dynamic_application_type_choice {
              leaf-list dynamic-application {
                type string;
                ordered-by user;
              }
            }  // choice dynamic_application_type_choice
    
            choice url_category_type_choice {
              leaf-list url-category {
                type string;
                ordered-by user;
              }
            }  // choice url_category_type_choice
    
            choice from_zone_choice {
              leaf-list from-zone {
                type string;
                ordered-by user;
              }
            }  // choice from_zone_choice
    
            choice to_zone_choice {
              leaf-list to-zone {
                type string;
                ordered-by user;
              }
            }  // choice to_zone_choice
    
            choice source_vrf_choice {
              leaf-list source-l3vpn-vrf-group {
                junos:must "("security l3vpn vrf-group $$")";
                junos:must-message "referenced vrf-group must configured";
                type string;
                ordered-by user;
                description "L3VPN group name";
              }
            }  // choice source_vrf_choice
    
            choice dst_vrf_choice {
              leaf-list destination-l3vpn-vrf-group {
                junos:must "("security l3vpn vrf-group $$")";
                junos:must-message "referenced vrf-group must configured";
                type string;
                ordered-by user;
                description "L3VPN group name";
              }
            }  // choice dst_vrf_choice
          }  // container match
    
          container then {
            description
              "Specify policy action to take when packet match criteria";
            uses apply-advanced;
    
            choice action {
              container deny {
                presence "enable deny";
                description "Deny packets";
                uses apply-advanced;
    
                container application-services {
                  description
                    "Application Services";
                  uses apply-advanced;
    
                  container security-intelligence {
                    description
                      "Generate security intellegence feeds";
                    uses security_intelligence_feeds;
                  }  // container security-intelligence
                }  // container application-services
              }  // container deny
              container reject {
                presence "enable reject";
                description "Reject packets";
                uses apply-advanced;
    
                leaf profile {
                  junos:must "("security dynamic-application profile $$")";
                  junos:must-message "Dynamic-application profile must be defined";
                  type string;
                  description
                    "Profile for redirect HTTP/S traffic";
                }
    
                container ssl-proxy {
                  presence "enable ssl-proxy";
                  description
                    "SSL proxy services";
                  uses apply-advanced;
    
                  leaf profile-name {
                    junos:must "("services ssl proxy profile $$")";
                    junos:must-message "Referenced SSL proxy profile is not defined";
                    type string;
                    description
                      "Specify SSL proxy service profile name";
                  }
                }  // container ssl-proxy
    
                container application-services {
                  description
                    "Application Services";
                  uses apply-advanced;
    
                  container security-intelligence {
                    description
                      "Generate security intellegence feeds";
                    uses security_intelligence_feeds;
                  }  // container security-intelligence
                }  // container application-services
              }  // container reject
              container permit {
                presence "enable permit";
                description "Permit packets";
                uses apply-advanced;
    
                container tunnel {
                  junos:must "(!(".. .. .. match dynamic-application"))";
                  junos:must-message "Tunnel and dynamic-application can't be applied to same policy";
                  description "Tunnel packets";
                  uses tunnel_type;
                }  // container tunnel
    
                container firewall-authentication {
                  description
                    "Enable authentication for this policy if permit or tunnel";
                  uses firewall_authentication_type;
                }  // container firewall-authentication
    
                container destination-address {
                  presence
                    "enable destination-address";
                  description
                    "Enable destination address translation";
                  uses destination_nat_enable_type;
                }  // container destination-address
    
                container application-services {
                  description
                    "Application Services";
                  uses application_services_type;
                }  // container application-services
    
                container tunnel-inspection {
                  description
                    "Enable tunnel inspection";
                  uses apply-advanced;
    
                  leaf profile-name {
                    junos:must "((".. .. .. .. .. .. .. security tunnel-inspection inspection-profile $$" || " .. .. .. .. .. .. .. .. security tunnel-inspection inspection-profile $$"))";
                    junos:must-message "tunnel-inspection profile must be configured";
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Tunnel inspection profile";
                  }
                }  // container tunnel-inspection
    
                container tcp-options {
                  description
                    "Transmission Control Protocol session configuration";
                  uses apply-advanced;
    
                  leaf syn-check-required {
                    type empty;
                    description
                      "Enable per policy SYN-flag check";
                  }
    
                  leaf sequence-check-required {
                    type empty;
                    description
                      "Enable per policy sequence-number checking";
                  }
    
                  leaf initial-tcp-mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    description
                      "Override MSS value for initial direction";
                  }
    
                  leaf reverse-tcp-mss {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "64 .. 65535";
                      }
                    }
                    description
                      "Override MSS value for reverse direction";
                  }
    
                  leaf window-scale {
                    type empty;
                    description
                      "Enable per policy window-scale";
                  }
                }  // container tcp-options
    
                leaf services-offload {
                  type empty;
                  description
                    "Enable services offloading";
                }
    
                leaf no-services-offload {
                  type empty;
                  description
                    "Disenable services offloading";
                }
    
                leaf advanced-connection-tracking {
                  type empty;
                  description
                    "Lookup advanced-connection-tracking table on to-zone";
                }
              }  // container permit
            }  // choice action
    
            container log {
              description "Enable log";
              uses log_type;
            }  // container log
    
            container count {
              presence "enable count";
              description "Enable count";
              uses count_type;
            }  // container count
          }  // container then
    
          leaf scheduler-name {
            junos:must "("schedulers scheduler $$")";
            junos:must-message "scheduler must be defined";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Name of scheduler";
          }
    
          leaf report-skip {
            type empty;
            description
              "Skip report for this policy";
          }
        }  // grouping policy_type
    
        grouping application_services_type {
          description "Application Services";
          uses apply-advanced;
    
          leaf gtp-profile {
            junos:must "(!(".. .. .. .. match dynamic-application"))";
            junos:must-message "gtp and dynamic-application can't be applied to same policy";
            junos:must "("security gtp profile $$")";
            junos:must-message "gtp profile must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Specify GPRS Tunneling Protocol profile name";
          }
    
          leaf sctp-profile {
            junos:must "(!(".. .. .. .. match dynamic-application"))";
            junos:must-message "sctp and dynamic-application can't be applied to same policy";
            junos:must "("security sctp profile $$")";
            junos:must-message "sctp profile must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Specify Stream Control Protocol profile name";
          }
    
          leaf idp {
            type empty;
            description
              "Intrusion detection and prevention";
          }
    
          leaf packet-capture {
            junos:must "(".. .. .. .. match dynamic-application junos:UNKNOWN")";
            junos:must-message "packet-capture action requires dynamic application junos:UNKNOWN in policy";
            type empty;
            description
              "Capturing traffic related to this policy";
          }
    
          leaf idp-policy {
            type string {
              length "1 .. 255";
            }
            description
              "Specify idp policy name";
          }
    
          container ssl-proxy {
            presence "enable ssl-proxy";
            description "SSL proxy services";
            uses apply-advanced;
    
            leaf profile-name {
              junos:must "("services ssl proxy profile $$")";
              junos:must-message "Referenced SSL proxy profile is not defined";
              type string;
              description
                "Specify SSL proxy service profile name";
            }
          }  // container ssl-proxy
    
          container web-proxy {
            presence "enable web-proxy";
            description "Web proxy services";
            uses apply-advanced;
    
            leaf profile-name {
              junos:must "(("services web-proxy secure-proxy profile $$" || "services web-proxy proxy-auto-configuration profile $$"))";
              junos:must-message "Referenced Web proxy profile is not defined";
              type string;
              description
                "Specify Web proxy service profile name";
            }
          }  // container web-proxy
    
          container uac-policy {
            presence "enable uac-policy";
            description
              "Enable unified access control enforcement of policy";
            uses apply-advanced;
    
            leaf captive-portal {
              junos:must "("services unified-access-control captive-portal $$")";
              junos:must-message "Captive portal policy must be defined";
              type string {
                length "1 .. 128";
              }
            }
          }  // container uac-policy
    
          leaf utm-policy {
            junos:must "("security utm utm-policy $$")";
            junos:must-message "utm-policy must be defined";
            type string {
              length "1 .. 255";
            }
            description
              "Specify utm policy name";
          }
    
          leaf icap-redirect {
            junos:must "("services icap-redirect profile $$")";
            junos:must-message "icap-redirect profile must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Specify icap redirect profile name";
          }
    
          container application-firewall {
            junos:must "((!(".. .. .. .. match dynamic-application") || (".. .. .. .. match dynamic-application" && ".. .. .. .. match dynamic-application none")))";
            junos:must-message "Traditional AppFW and dynamic-application can't be applied to same policy";
            status deprecated;
            description
              "Application firewall services";
            uses jsf_service_rule_set_type;
          }  // container application-firewall
    
          container application-traffic-control {
            description
              "Application traffic control services";
            uses jsf_application_traffic_control_rule_set_type;
          }  // container application-traffic-control
    
          choice wx-redirection {
            leaf redirect-wx {
              type empty;
              description "Set WX redirection";
            }
            leaf reverse-redirect-wx {
              type empty;
              description
                "Set WX reverse redirection";
            }
          }  // choice wx-redirection
    
          leaf security-intelligence-policy {
            junos:must "("services security-intelligence policy $$")";
            junos:must-message "security-intelligence policy must be defined";
            type string {
              length "1 .. 255";
            }
            description
              "Specify security-intelligence policy name";
          }
    
          leaf advanced-anti-malware-policy {
            junos:must "("services advanced-anti-malware policy $$")";
            junos:must-message "advanced-anti-malware policy must be defined";
            type string {
              length "1 .. 255";
            }
            description
              "Specify advanced-anti-malware policy name";
          }
    
          container security-intelligence {
            description
              "Generate security intellegence feeds";
            uses security_intelligence_feeds;
          }  // container security-intelligence
        }  // grouping application_services_type
    
        grouping count_type {
          uses apply-advanced;
        }  // grouping count_type
    
        grouping destination_nat_enable_type {
          description "Enable Destination NAT";
          uses apply-advanced;
    
          choice destination_nat {
            leaf drop-translated {
              type empty;
              description
                "Drop the policy if NAT translated";
            }
            leaf drop-untranslated {
              type empty;
              description
                "Drop the policy if NAT untranslated";
            }
          }  // choice destination_nat
        }  // grouping destination_nat_enable_type
    
        grouping firewall_authentication_type {
          uses apply-advanced;
    
          choice auth-type {
            container pass-through {
              junos:must "((".. .. .. .. .. .. .. access firewall-authentication pass-through" || ".. .. .. .. .. .. .. .. access firewall-authentication pass-through"))";
              junos:must-message "access firewall-authentication pass-through must be configured";
              presence "enable pass-through";
              description
                "Pass-through firewall authentication settings";
              uses apply-advanced;
    
              leaf access-profile {
                junos:must "(("access profile $$" || (".. .. .. .. .. .. .. .. .. .. access profile $$" && !(".. .. .. .. .. .. .. .. .. .. access disable-tenant-access"))))";
                junos:must-message "access-profile must be defined or access to profile is disabled for tenants";
                type string {
                  length "1 .. 63";
                }
                description
                  "Specify access profile name";
              }
    
              leaf-list client-match {
                type string {
                  length "1 .. 63";
                }
                ordered-by user;
                description
                  "Name of user or group to match";
              }
    
              leaf web-redirect {
                type empty;
                description
                  "Redirect unauthenticated HTTP requests to the device's internal web server";
              }
    
              leaf web-redirect-to-https {
                type empty;
                description
                  "Redirect unauthenticated HTTP requests to the device's internal HTTPS web server";
              }
    
              leaf web-authentication-server {
                type string {
                  length "1 .. 128";
                }
                description
                  "Firewall web authentication server";
              }
    
              leaf ssl-termination-profile {
                type string {
                  length "1 .. 63";
                }
                description
                  "Specify SSL termination profile used to the SSL offload";
              }
    
              leaf auth-only-browser {
                type empty;
                description
                  "Authenticate only browser traffic";
              }
    
              list auth-user-agent {
                key "name";
                ordered-by user;
                description
                  "Authenticate HTTP traffic with specified user agent";
                leaf name {
                  type string {
                    length "1 .. 16";
                  }
                  description
                    "Authenticate HTTP traffic with specified user agent";
                }
    
                uses apply-advanced;
              }  // list auth-user-agent
            }  // container pass-through
            container web-authentication {
              junos:must "((".. .. .. .. .. .. .. access firewall-authentication web-authentication" || ".. .. .. .. .. .. .. .. access firewall-authentication web-authentication"))";
              junos:must-message "access firewall-authentication web-authentication must be configured";
              presence
                "enable web-authentication";
              description
                "Web-authentication settings";
              uses apply-advanced;
    
              leaf-list client-match {
                type string {
                  length "1 .. 63";
                }
                ordered-by user;
                description
                  "Name of user or group to match";
              }
            }  // container web-authentication
            container user-firewall {
              description
                "User-firewall firewall authentication settings";
              uses apply-advanced;
    
              leaf access-profile {
                junos:must "(("access profile $$" || (".. .. .. .. .. .. .. .. .. .. access profile $$" && !(".. .. .. .. .. .. .. .. .. .. access disable-tenant-access"))))";
                junos:must-message "access-profile must be defined or access to profile is disabled for tenants";
                type string {
                  length "1 .. 63";
                }
                description
                  "Specify access profile name";
              }
    
              leaf web-redirect {
                type empty;
                description
                  "Redirect unauthenticated HTTP req to web server";
              }
    
              leaf web-redirect-to-https {
                type empty;
                description
                  "Redirect unauthenticated HTTP req to HTTPS web server";
              }
    
              leaf web-authentication-server {
                type string {
                  length "1 .. 128";
                }
                description
                  "Firewall web authentication server";
              }
    
              leaf ssl-termination-profile {
                type string {
                  length "1 .. 63";
                }
                description
                  "Specify SSL termination profile used to the SSL offload";
              }
    
              leaf auth-only-browser {
                type empty;
                description
                  "Authenticate only browser traffic";
              }
    
              list auth-user-agent {
                key "name";
                ordered-by user;
                description
                  "Authenticate HTTP traffic with specified user agent";
                leaf name {
                  type string {
                    length "1 .. 16";
                  }
                  description
                    "Authenticate HTTP traffic with specified user agent";
                }
    
                uses apply-advanced;
              }  // list auth-user-agent
    
              leaf domain {
                type string {
                  length "1 .. 64";
                }
                description
                  "Specify domain name";
              }
            }  // container user-firewall
          }  // choice auth-type
    
          leaf push-to-identity-management {
            type empty;
            description
              "Push auth entry to identity management server";
          }
        }  // grouping firewall_authentication_type
    
        grouping jsf_service_rule_set_type {
          description
            "Define service rule set reference";
          uses apply-advanced;
    
          leaf rule-set {
            junos:must "("security application-firewall rule-sets $$")";
            junos:must-message "rule set must be defined";
            type string {
              length "1 .. 64";
            }
            description "Service rule set name";
          }
        }  // grouping jsf_service_rule_set_type
    
        grouping match_source_end_user_profile_value {
          uses apply-advanced;
    
          leaf source-end-user-profile-name {
            junos:must "((".. .. .. .. .. .. services user-identification device-information end-user-profile profile-name $$" || ".. .. .. .. .. .. .. services user-identification device-information end-user-profile profile-name $$"))";
            junos:must-message "Services user-identification device-information end-user-profile profile-name must be defined";
            type string;
            description
              "Specify source-end-user-profile name from list to match";
          }
        }  // grouping match_source_end_user_profile_value
    
        grouping port-range {
          description "Port ranges";
          leaf name {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Single port/minimum port in the port range";
          }
    
          leaf maximum-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Maximum port in the port range";
          }
        }  // grouping port-range
    
        grouping profile-radius-server-name-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Invalid FQDN";
              length "4 .. 255";
            }
            description
              "Fully qualified domain name of the RADIUS server";
          }
    
          uses apply-advanced;
    
          leaf dns-query-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "10 .. 1440";
              }
            }
            units "minutes";
            default "60";
            description
              "Frequency of RADIUS server name resolution";
          }
    
          leaf radsec-destination {
            junos:must "(!(".. preauthentication-order"))";
            junos:must-message "RADSEC is mutually exclusive with preauthentication";
            junos:must "("access radsec destination $$")";
            junos:must-message "RADSEC destination must be defined";
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "RADSEC destination";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            default "1812";
            description
              "RADIUS server authentication port number";
          }
    
          leaf preauthentication-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            description
              "RADIUS server preauthentication port number";
          }
    
          leaf dynamic-request-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            default "3799";
            description
              "RADIUS client dynamic request port number";
          }
    
          leaf secret {
            type jt:unreadable;
            description
              "Shared secret with the RADIUS server";
          }
    
          leaf preauthentication-secret {
            type jt:unreadable;
            description
              "Shared secret with the RADIUS server";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "seconds";
            default "3";
            description "Request timeout period";
          }
    
          leaf retry {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 100";
              }
            }
            default "3";
            description "Retry attempts";
          }
    
          leaf accounting-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 1000";
              }
            }
            units "seconds";
            default "0";
            description
              "Accounting request timeout period";
          }
    
          leaf accounting-retry {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            default "0";
            description
              "Accounting retry attempts";
          }
    
          leaf max-outstanding-requests {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 2000";
              }
            }
            default "1000";
            description
              "Maximum requests in flight to server";
          }
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Use specified address as source address";
          }
    
          leaf routing-instance {
            junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
            junos:must-message "referenced routing-instance must be defined";
            type string;
            description
              "Use specified routing instance";
          }
        }  // grouping profile-radius-server-name-object
    
        grouping profile-radius-server-object {
          leaf name {
            type jt:ipaddr;
            description "RADIUS server address";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            default "1812";
            description
              "RADIUS server authentication port number";
          }
    
          leaf preauthentication-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            description
              "RADIUS server preauthentication port number";
          }
    
          leaf dynamic-request-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 65535";
              }
            }
            default "3799";
            description
              "RADIUS client dynamic request port number";
          }
    
          leaf secret {
            type jt:unreadable;
            description
              "Shared secret with the RADIUS server";
          }
    
          leaf preauthentication-secret {
            type jt:unreadable;
            description
              "Shared secret with the RADIUS server";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "seconds";
            default "3";
            description "Request timeout period";
          }
    
          leaf retry {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 100";
              }
            }
            default "3";
            description "Retry attempts";
          }
    
          leaf accounting-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 1000";
              }
            }
            units "seconds";
            default "0";
            description
              "Accounting request timeout period";
          }
    
          leaf accounting-retry {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            default "0";
            description
              "Accounting retry attempts";
          }
    
          leaf max-outstanding-requests {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 2000";
              }
            }
            default "1000";
            description
              "Maximum requests in flight to server";
          }
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Use specified address as source address";
          }
    
          leaf routing-instance {
            junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
            junos:must-message "referenced routing-instance must be defined";
            type string;
            description
              "Use specified routing instance";
          }
    
          leaf radsec-destination {
            junos:must "("access radsec destination $$")";
            junos:must-message "RADSEC destination must be defined";
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "RADSEC destination";
          }
        }  // grouping profile-radius-server-object
    
        grouping profile-setting {
          description "UTM policy settings";
          leaf name {
            type string {
              length "1 .. 29";
            }
            description "UTM policy name";
          }
    
          uses apply-advanced;
    
          container anti-virus {
            description
              "UTM policy anti-virus profile";
            uses apply-advanced;
    
            leaf http-profile {
              junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
              junos:must-message "An anti-virus profile must be defined";
              type string;
              description "Anti-virus profile";
            }
    
            container ftp {
              description "FTP profile";
              uses apply-advanced;
    
              leaf upload-profile {
                junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
                junos:must-message "An anti-virus profile must be defined";
                type string;
                description "Anti-virus profile";
              }
    
              leaf download-profile {
                junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
                junos:must-message "An anti-virus profile must be defined";
                type string;
                description "Anti-virus profile";
              }
            }  // container ftp
    
            leaf smtp-profile {
              junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
              junos:must-message "An anti-virus profile must be defined";
              type string;
              description "Anti-virus profile";
            }
    
            leaf pop3-profile {
              junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
              junos:must-message "An anti-virus profile must be defined";
              type string;
              description "Anti-virus profile";
            }
    
            leaf imap-profile {
              junos:must "(("security utm feature-profile anti-virus sophos-engine profile $$" || "security utm feature-profile anti-virus profile $$"))";
              junos:must-message "An anti-virus profile must be defined";
              type string;
              description "Anti-virus profile";
            }
          }  // container anti-virus
    
          container content-filtering {
            description
              "Content-filtering profile";
            uses apply-advanced;
    
            leaf http-profile {
              junos:must "("security utm feature-profile content-filtering profile $$")";
              junos:must-message "content-filtering profile must be defined";
              type string;
              description
                "Content-filtering profile";
            }
    
            container ftp {
              description "FTP profile";
              uses apply-advanced;
    
              leaf upload-profile {
                junos:must "("security utm feature-profile content-filtering profile $$")";
                junos:must-message "content-filtering profile must be defined";
                type string;
                description
                  "Content-filtering FTP upload profile";
              }
    
              leaf download-profile {
                junos:must "("security utm feature-profile content-filtering profile $$")";
                junos:must-message "content-filtering profile must be defined";
                type string;
                description
                  "Content-filtering FTP download profile";
              }
            }  // container ftp
    
            leaf smtp-profile {
              junos:must "("security utm feature-profile content-filtering profile $$")";
              junos:must-message "content-filtering profile must be defined";
              type string;
              description
                "Content-filtering SMTP profile";
            }
    
            leaf pop3-profile {
              junos:must "("security utm feature-profile content-filtering profile $$")";
              junos:must-message "content-filtering profile must be defined";
              type string;
              description
                "Content-filtering POP3 profile";
            }
    
            leaf imap-profile {
              junos:must "("security utm feature-profile content-filtering profile $$")";
              junos:must-message "content-filtering profile must be defined";
              type string;
              description
                "Content-filtering IMAP profile";
            }
          }  // container content-filtering
    
          container web-filtering {
            description "Web-filtering profile";
            uses apply-advanced;
    
            leaf http-profile {
              junos:must "(("security utm feature-profile web-filtering surf-control-integrated profile $$" || ("security utm feature-profile web-filtering websense-redirect profile $$" || ("security utm feature-profile web-filtering juniper-local profile $$" || "security utm feature-profile web-filtering juniper-enhanced profile $$"))))";
              junos:must-message "websense-redirect profile or local profile or juniper-enhanced must be defined";
              type string;
              description
                "Web-filtering HTTP profile";
            }
          }  // container web-filtering
    
          container anti-spam {
            description "Anti-spam profile";
            uses apply-advanced;
    
            leaf smtp-profile {
              junos:must "("security utm feature-profile anti-spam sbl profile $$")";
              junos:must-message "anti-spam sbl profile must be defined";
              type string;
              description "Anti-spam profile";
            }
          }  // container anti-spam
    
          container traffic-options {
            status deprecated;
            description "Traffic options";
            uses apply-advanced;
    
            container sessions-per-client {
              description "Sessions per client";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 2000";
                  }
                }
                default "2000";
                description "Sessions limit";
              }
    
              leaf over-limit {
                type enumeration {
                  enum "log-and-permit" {
                    value 0;
                  }
                  enum "block" {
                    value 1;
                  }
                }
                description "Over limit number";
              }
            }  // container sessions-per-client
          }  // container traffic-options
        }  // grouping profile-setting
    
        grouping programmable-rpd-type {
          uses apply-advanced;
    
          container traceoptions {
            description "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 "client" {
                    value 0;
                    description "Client events";
                  }
                  enum "japi" {
                    value 1;
                    description
                      "JAPI related traces";
                  }
                  enum "routing-interface" {
                    value 2;
                    description
                      "Routing interface traces";
                  }
                  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";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          container purge-timeout {
            presence "enable purge-timeout";
            description
              "Purge timeout for all programmable-rpd clients in seconds";
            choice purge-parm {
              leaf never {
                type empty;
                description
                  "Client programmed objects are never purged";
              }
              leaf timeout {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 604800";
                  }
                }
                units "seconds";
                description
                  "Timeout value, in seconds, for purging client programmed objects";
              }
            }  // choice purge-parm
          }  // container purge-timeout
    
          list client {
            key "name";
            ordered-by user;
            description
              "Programmable-rpd client options";
            leaf name {
              type string {
                length "1 .. 255";
              }
              description "Client ID";
            }
    
            uses apply-advanced;
    
            list interface-notification {
              key "name";
              ordered-by user;
              description
                "Interfaces for notification";
              leaf name {
                type string {
                  length "1 .. 32";
                }
                description "Interface";
              }
    
              uses apply-advanced;
            }  // list interface-notification
          }  // list client
    
          container rib-service {
            presence "enable rib-service";
            description
              "RIB service API options";
            uses apply-advanced;
    
            container dynamic-next-hop-interface {
              presence
                "enable dynamic-next-hop-interface";
              description
                "Update routes for next-hop interface changes";
              uses apply-advanced;
    
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable dynamic next-hop interface handling";
                }
              }  // choice enable-disable
            }  // container dynamic-next-hop-interface
          }  // container rib-service
        }  // grouping programmable-rpd-type
    
        grouping proto-object {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          list tunable-name {
            key "name";
            ordered-by user;
            description "Protocol tunable name";
            uses tunable-object;
          }  // list tunable-name
        }  // grouping proto-object
    
        grouping qualified_nh_obj {
          leaf name {
            type union {
              type jt:ipaddr-or-interface;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Next hop to destination";
          }
    
          uses apply-advanced;
    
          leaf preference {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Preference of qualified next hop";
          }
    
          leaf metric {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Metric of qualified next hop";
          }
    
          leaf interface {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Interface of qualified next hop";
          }
    
          leaf mac-address {
            type jt:mac-unicast;
            description "Next-hop Mac Address";
          }
    
          leaf tag {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Tag string";
          }
    
          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 neighbor {
              type jt:ipaddr;
              description "BFD neighbor address";
            }
    
            leaf local-address {
              type jt:ipaddr;
              description
                "BFD local address (for multihop only)";
            }
    
            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";
            }
    
            leaf minimum-receive-ttl {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "1 .. 255";
                }
              }
              description
                "Minimum receive TTL below which to drop";
            }
          }  // container bfd-liveness-detection
        }  // grouping qualified_nh_obj
    
        grouping ragw-traceoptions {
          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 "brief" {
                value 0;
                description
                  "Brief debugging output";
              }
              enum "detail" {
                value 1;
                description
                  "Detailed debugging output";
              }
              enum "extensive" {
                value 2;
                description
                  "Extensive debugging output";
              }
              enum "verbose" {
                value 3;
                description
                  "Verbose debugging output";
              }
            }
            default "brief";
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "configuration" {
                  value 0;
                  description
                    "Trace CLI configuration events";
                }
                enum "tunnel" {
                  value 1;
                  description
                    "Trace tunnel install/encap/decap events";
                }
                enum "session" {
                  value 2;
                  description
                    "Trace session related events";
                }
                enum "all" {
                  value 3;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
        }  // grouping ragw-traceoptions
    
        grouping range-address-type {
          description "Range address";
          leaf name {
            type jt:ipv4addr;
            description
              "Lower limit of address range";
          }
    
          uses apply-advanced;
    
          container to {
            description "Port range upper limit";
            uses apply-advanced;
    
            leaf range-high {
              type jt:ipv4addr;
              description
                "Upper limit of address range";
            }
          }  // container to
        }  // grouping range-address-type
    
        grouping rate-limit-object {
          uses apply-advanced;
    
          leaf alarm-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 80000";
              }
            }
            description
              "Set alarm threshold for rate-limit";
          }
    
          leaf drop-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 80000";
              }
            }
            description
              "Set drop threshold for rate-limit";
          }
    
          container message {
            description
              "GTP limited message type";
            uses message-object;
          }  // container message
        }  // grouping rate-limit-object
    
        grouping reconfigure-trigger-type {
          description "DHCP reconfigure trigger";
          uses apply-advanced;
    
          leaf radius-disconnect {
            type empty;
            description
              "Trigger DHCP reconfigure by radius initiated disconnect";
          }
        }  // grouping reconfigure-trigger-type
    
        grouping relay-active-leasequery-v4-type {
          description
            "Configure active leasequery";
          uses apply-advanced;
    
          leaf topology-discover {
            junos:must "(".. peer-address")";
            junos:must-message "Must configure [peer-address] to configure topology-discover";
            type empty;
            description "Topology discovery";
          }
    
          list peer-address {
            key "name";
            ordered-by user;
            description "Server ip address";
            leaf name {
              type jt:ipaddr;
              description "Peer ip address";
            }
    
            uses apply-advanced;
          }  // list peer-address
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "120";
            description
              "Read/write timeout in seconds";
          }
    
          leaf idle-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "60";
            description
              "Idle timeout in seconds";
          }
        }  // grouping relay-active-leasequery-v4-type
    
        grouping relay-active-leasequery-v6-type {
          description
            "Configure active leasequery";
          uses apply-advanced;
    
          leaf topology-discover {
            junos:must "(".. peer-address")";
            junos:must-message "Must configure [peer-address] to configure topology-discover";
            type empty;
            description "Topology discovery";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "120";
            description
              "Read/write timeout in seconds";
          }
    
          leaf idle-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "60";
            description
              "Idle timeout in seconds";
          }
    
          list peer-address {
            key "name";
            ordered-by user;
            description "Peer ipv6 address";
            leaf name {
              type jt:ipv6addr;
              description "Peer ipv6 address";
            }
    
            uses apply-advanced;
          }  // list peer-address
        }  // grouping relay-active-leasequery-v6-type
    
        grouping relay-bulk-leasequery-v4-type {
          junos:must "(".. overrides always-write-option-82")";
          junos:must-message "Must configure [overrides always-write-option-82] to overwrite circuit-id for bulk-leasequery";
          junos:must "((".. relay-option-82 circuit-id" && !((".. relay-option-82 circuit-id use-interface-description" || ".. relay-option-82 circuit-id require-interface-description"))))";
          junos:must-message "Must configure [relay-option-82 circuit-id] without description to insert circuit-id for bulk-leasequery";
          description
            "Configure bulk leasequery";
          uses apply-advanced;
    
          leaf attempts {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 720";
              }
            }
            default "360";
            description
              "Number of retry attempts";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            units "seconds";
            default "10";
            description "Number of seconds";
          }
        }  // grouping relay-bulk-leasequery-v4-type
    
        grouping relay-bulk-leasequery-v6-type {
          junos:must "(".. relay-agent-interface-id")";
          junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id for bulk-leasequery";
          description
            "Configure bulk leasequery";
          uses apply-advanced;
    
          leaf attempts {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            default "6";
            description
              "Number of retry attempts";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            units "seconds";
            default "10";
            description "Number of seconds";
          }
    
          container trigger {
            description
              "Trigger for bulk leasequery";
            leaf automatic {
              type empty;
              description
                "Trigger automatically";
            }
          }  // container trigger
        }  // grouping relay-bulk-leasequery-v6-type
    
        grouping relay-leasequery-type {
          description "Configure leasequery";
          uses apply-advanced;
    
          leaf attempts {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            default "6";
            description
              "Number of retry attempts";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            units "seconds";
            default "10";
            description "Number of seconds";
          }
        }  // grouping relay-leasequery-type
    
        grouping relay-option-60-type-group {
          description
            "DHCP option-60 processing";
          uses apply-advanced;
    
          container vendor-option {
            description "Add vendor option";
            uses apply-advanced;
    
            container equals {
              description "Option 60 equals";
              uses relay-option-60-match-group;
            }  // container equals
    
            container not-equals {
              status deprecated;
              description
                "Option 60 does not equal";
              uses relay-option-60-match-group;
            }  // container not-equals
    
            container starts-with {
              description
                "Option 60 starts with";
              uses relay-option-60-match-group;
            }  // container starts-with
    
            choice server-group-choice {
              leaf default-relay-server-group {
                junos:must "(".. .. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is not made";
              }
              leaf default-local-server-group {
                junos:must "(".. .. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is not made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is not made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is not made";
              }
            }  // choice server-group-choice
          }  // container vendor-option
        }  // grouping relay-option-60-type-group
    
        grouping relay-option-60-match-group {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "(".. .. .. .. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "(".. .. .. .. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "(".. .. .. .. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "(".. .. .. .. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list hexadecimal
        }  // grouping relay-option-60-match-group
    
        grouping relay-option-60-type-top {
          description
            "DHCP option-60 processing";
          uses apply-advanced;
    
          container vendor-option {
            description "Add vendor option";
            uses apply-advanced;
    
            container equals {
              description "Option 60 equals";
              uses relay-option-60-match-top;
            }  // container equals
    
            container not-equals {
              status deprecated;
              description
                "Option 60 does not equal";
              uses relay-option-60-match-top;
            }  // container not-equals
    
            container starts-with {
              description
                "Option 60 starts with";
              uses relay-option-60-match-top;
            }  // container starts-with
    
            choice server-group-choice {
              leaf default-relay-server-group {
                junos:must "(".. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is not made";
              }
              leaf default-local-server-group {
                junos:must "(".. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is not made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is not made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is not made";
              }
            }  // choice server-group-choice
          }  // container vendor-option
        }  // grouping relay-option-60-type-top
    
        grouping relay-option-60-match-top {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "(".. .. .. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "(".. .. .. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "(".. .. .. .. .. server-group $$")";
                junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "(".. .. .. .. .. .. .. system services dhcp-local-server group $$")";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list hexadecimal
        }  // grouping relay-option-60-match-top
    
        grouping relay-option-82-type {
          description
            "DHCP option-82 processing";
          uses apply-advanced;
    
          container circuit-id {
            presence "enable circuit-id";
            description "Add circuit identifier";
            uses apply-advanced;
    
            container prefix {
              description
                "Add prefix to circuit/interface-id or remote-id";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Add router host name to circuit / interface-id or remote-id";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Add logical system name to circuit / interface-id or remote-id";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Add routing instance name to circuit / interface-id or remote-id";
              }
            }  // container prefix
    
            leaf use-interface-description {
              junos:must "(!(".. require-interface-description"))";
              junos:must-message "use-interface-description may not be set with require-interface-desciption";
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Use interface description instead of circuit identifier";
            }
    
            leaf use-vlan-id {
              junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))";
              junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured";
              type empty;
              description
                "Use VLAN id instead of name";
            }
    
            container vlan-id-only {
              junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. user-defined" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. require-interface-description")))))))))";
              junos:must-message "Vlan-id-only cannot be clubbed along with any other option-82 knob";
              presence "enable vlan-id-only";
              description "Use only VLAN id";
              uses apply-advanced;
            }  // container vlan-id-only
    
            leaf no-vlan-interface-name {
              type empty;
              description
                "Not include vlan or interface name";
            }
    
            leaf include-irb-and-l2 {
              type empty;
              description
                "Include IRB and L2 interface name";
            }
    
            leaf user-defined {
              junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. require-interface-description"))))))))";
              junos:must-message "The user defined description for option 82 must be defined in order to see the usage and doesnt coexist with prefix";
              type empty;
              description
                "Include user defined string";
            }
    
            leaf keep-incoming-circuit-id {
              type empty;
              description
                "Keep incoming circuit identifier";
            }
          }  // container circuit-id
    
          container remote-id {
            presence "enable remote-id";
            description "Add remote identifier";
            uses apply-advanced;
    
            container prefix {
              description
                "Add prefix to circuit/interface-id or remote-id";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Add router host name to circuit / interface-id or remote-id";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Add logical system name to circuit / interface-id or remote-id";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Add routing instance name to circuit / interface-id or remote-id";
              }
            }  // container prefix
    
            leaf use-interface-description {
              junos:must "(!(".. require-interface-description"))";
              junos:must-message "use-interface-description may not be set with require-interface-desciption";
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Use interface description instead of circuit identifier";
            }
    
            leaf use-vlan-id {
              junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))";
              junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured";
              type empty;
              description
                "Use VLAN id instead of name";
            }
    
            leaf no-vlan-interface-name {
              type empty;
              description
                "Not include vlan or interface name";
            }
    
            leaf include-irb-and-l2 {
              type empty;
              description
                "Include IRB and L2 interface name";
            }
    
            container hostname-only {
              junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-remote-id" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. use-string"))))))))";
              junos:must-message "Hostname-only cannot be clubbed with any other sub-option";
              presence "enable hostname-only";
              description
                "Include hostname only";
              uses apply-advanced;
            }  // container hostname-only
    
            leaf keep-incoming-remote-id {
              type empty;
              description
                "Keep incoming remote identifier";
            }
    
            leaf use-string {
              junos:must "(!((".. use-interface-description" || (".. require-interface-description" || (".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. no-vlan-interface-name" || ".. use-vlan-id")))))))";
              junos:must-message "use-string can only coexist with prefix";
              type string;
              description
                "Use raw string instead of the default remote id";
            }
          }  // container remote-id
    
          leaf server-id-override {
            junos:must "(!(".. link-selection"))";
            junos:must-message "server-id-override cannot be configured with link-selection";
            type empty;
            description
              "Add link-selection and server-id sub-options on packets to server";
          }
    
          leaf link-selection {
            junos:must "(!(".. server-id-override"))";
            junos:must-message "link-selection cannot be configured with server-id-override";
            type empty;
            description
              "Add link-selection suboption on packets to server";
          }
    
          leaf exclude-relay-agent-identifier {
            type empty;
            description
              "Exclude relay agent identifier from packets to server";
          }
    
          container vendor-specific {
            description
              "Add vendor-specific information";
            uses jdhcp-vendor-specific-type;
          }  // container vendor-specific
        }  // grouping relay-option-82-type
    
        grouping relay-v4-option-ascii-hex {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
                junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
                junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf local-server-group {
                junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))";
                junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP local server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list hexadecimal
        }  // grouping relay-v4-option-ascii-hex
    
        grouping relay-v6-option-ascii-hex {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
                junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
    
            choice server-group-choice {
              leaf relay-server-group {
                junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))";
                junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]";
                type string {
                  length "1 .. 64";
                }
                description
                  "Name of DHCP relay server group when match is made";
              }
              leaf drop {
                type empty;
                description
                  "Discard when a match is made";
              }
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
            }  // choice server-group-choice
          }  // list hexadecimal
        }  // grouping relay-v6-option-ascii-hex
    
        grouping remote-access-client-config {
          leaf name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of config object name";
          }
    
          uses apply-advanced;
    
          leaf connection-mode {
            type enumeration {
              enum "manual" {
                value 0;
                description
                  "Set to manual mode, default mode";
              }
              enum "always" {
                value 1;
                description "Set to always mode";
              }
            }
            default "manual";
            description
              "Set connection-mode of client";
          }
    
          leaf biometric-authentication {
            type empty;
            description
              "Enable biometric authentication";
          }
    
          container windows-logon {
            presence "enable windows-logon";
            uses apply-advanced;
    
            leaf mode {
              type enumeration {
                enum "manual" {
                  value 0;
                  description
                    "Manual Windows logon";
                }
                enum "automatic" {
                  value 1;
                  description
                    "Automatic Windows logon with configured credentials";
                }
              }
              default "manual";
              description
                "Set windows logon mode";
            }
    
            leaf domain {
              type string {
                length "1 .. 255";
              }
              description
                "Domain name for automatic windows logon";
            }
    
            leaf disconnect-at-logoff {
              type empty;
              description
                "Disconnect after logoff";
            }
    
            leaf flush-credential-at-logoff {
              type empty;
              description
                "Flush cached credentials upon after logoff";
            }
    
            leaf lead-time-duration {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 120";
                }
              }
              units "seconds";
              default "45";
              description
                "Lead time duration for domain logon (seconds)";
            }
    
            leaf eap-auth {
              type empty;
              description
                "EAP Authentication before profile selection";
            }
    
            leaf auto-dialog-open {
              type empty;
              description
                "Automatically open dialog for connection establishment";
            }
          }  // container windows-logon
    
          leaf no-dead-peer-detection {
            type empty;
            description
              "Disable dead-peer-detection on client";
          }
    
          container dead-peer-detection {
            description
              "Dead Peer Detection configuration";
            uses apply-advanced;
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 300";
                }
              }
              units "seconds";
              default "60";
              description
                "The time between DPD probe messages (seconds) Default :60";
            }
    
            leaf threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 5";
                }
              }
              default "5";
              description
                "Maximum number of DPD retransmissions Default :5";
            }
          }  // container dead-peer-detection
    
          leaf no-tcp-encap {
            type empty;
            description
              "Disable tcp encapsulation";
          }
    
          leaf no-eap-tls {
            type empty;
            description
              "Disable EAP-TLS IKEV2 method";
          }
    
          container certificate {
            description "Certificate identifier";
            uses apply-advanced;
    
            leaf no-expiry-warning {
              junos:must "(!(".. warn-before-expiry"))";
              junos:must-message "Certificate must not have both no-expiry-warning or warn-before-expiry configured";
              type empty;
              description
                "Disable certificate expiry warning";
            }
    
            leaf no-pin-request-per-connection {
              type empty;
              description
                "Disable certificate pin request per connection";
            }
    
            leaf warn-before-expiry {
              junos:must "(!(".. no-expiry-warning"))";
              junos:must-message "Certificate must not have both no-expiry-warning or warn-before-expiry configured";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 90";
                }
              }
              units "days";
              default "60";
              description
                "Certificate expiration warning days (1 - 90)";
            }
          }  // container certificate
        }  // grouping remote-access-client-config
    
        grouping remote-access-profile-config {
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Profile identifier";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 255";
            }
            description
              "Text description of remote-access profile";
          }
    
          leaf ipsec-vpn {
            junos:must "("security ipsec vpn $$")";
            junos:must-message "IPSec VPN object must be defined under [edit security ipsec vpn]";
            type string;
            description
              "Select the ipsec-vpn policy object";
          }
    
          leaf access-profile {
            junos:must "("access profile $$")";
            junos:must-message "Access profile must be defined under [edit access profile]";
            type string;
            description
              "Select the access-profile";
          }
    
          leaf client-config {
            junos:must "("security remote-access client-config $$")";
            junos:must-message "Referenced group must be defined under [edit security remote-access client-config]";
            type string;
            description
              "Select the client config object";
          }
        }  // grouping remote-access-profile-config
    
        grouping remote-access-traceoptions {
          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 "brief" {
                value 0;
                description
                  "Brief debugging output";
              }
              enum "detail" {
                value 1;
                description
                  "Detailed debugging output";
              }
              enum "extensive" {
                value 2;
                description
                  "Extensive debugging output";
              }
              enum "verbose" {
                value 3;
                description
                  "Verbose debugging output";
              }
            }
            default "brief";
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description "Tracing parameters";
            leaf name {
              type enumeration {
                enum "cli-configuration" {
                  value 0;
                  description
                    "Trace CLI configuration events";
                }
                enum "all" {
                  value 1;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
        }  // grouping remote-access-traceoptions
    
        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_aggregate_type {
          uses apply-advanced;
    
          container defaults {
            description "Global route options";
            uses apply-advanced;
    
            container metric {
              presence "enable metric";
              description "Metric value";
              uses rib_static_metric_type;
            }  // container metric
    
            container metric2 {
              presence "enable metric2";
              description "Metric value 2";
              uses rib_static_metric_type;
            }  // container metric2
    
            container metric3 {
              presence "enable metric3";
              description "Metric value 3";
              uses rib_static_metric_type;
            }  // container metric3
    
            container metric4 {
              presence "enable metric4";
              description "Metric value 4";
              uses rib_static_metric_type;
            }  // container metric4
    
            container tag {
              presence "enable tag";
              description "Tag string";
              uses rib_static_metric_type;
            }  // container tag
    
            container tag2 {
              presence "enable tag2";
              description "Tag string 2";
              uses rib_static_metric_type;
            }  // container tag2
    
            container preference {
              presence "enable preference";
              description "Preference value";
              uses rib_static_metric_type;
            }  // container preference
    
            container preference2 {
              presence "enable preference2";
              description "Preference value 2";
              uses rib_static_metric_type;
            }  // container preference2
    
            container color {
              presence "enable color";
              description
                "Color (preference) value";
              uses rib_static_metric_type;
            }  // container color
    
            container color2 {
              presence "enable color2";
              description
                "Color (preference) value 2";
              uses rib_static_metric_type;
            }  // container color2
    
            leaf-list community {
              type jt:community;
              ordered-by user;
              description
                "BGP community identifier";
            }
    
            container as-path {
              description
                "Autonomous system path";
              uses apply-advanced;
    
              leaf path {
                type string;
                description
                  "Autonomous system path";
              }
    
              leaf origin {
                type enumeration {
                  enum "igp" {
                    value 0;
                    description
                      "Path originated in the local IGP";
                  }
                  enum "egp" {
                    value 1;
                    description
                      "Path originated in another AS";
                  }
                  enum "incomplete" {
                    value 2;
                    description
                      "Path was learned by some other means";
                  }
                }
              }
    
              leaf atomic-aggregate {
                type empty;
                description
                  "Add ATOMIC_AGGREGATE path attribute to route";
              }
    
              container aggregator {
                presence "enable aggregator";
                description
                  "Add AGGREGATOR path attribute to route";
              }  // container aggregator
    
              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 address {
                type jt:ipv4addr;
                description
                  "Address of BGP system that formed the route";
              }
            }  // container as-path
    
            leaf discard {
              type empty;
              description
                "Drop packets to destination; send no ICMP unreachables";
            }
    
            leaf next-table {
              type string;
              description
                "Next hop to another table";
            }
    
            choice brief_flag {
              leaf brief {
                type empty;
                description
                  "Include longest common sequences from contributing paths";
              }
              leaf full {
                type empty;
                description
                  "Include all AS numbers from all contributing paths";
              }
            }  // choice brief_flag
    
            choice passive_flag {
              leaf active {
                type empty;
                description
                  "Remove inactive route from forwarding table";
              }
              leaf passive {
                type empty;
                description
                  "Retain inactive route in forwarding table";
              }
            }  // choice passive_flag
          }  // container defaults
    
          list route {
            key "name";
            ordered-by user;
            description
              "Individual route options";
            leaf name {
              type jt:ipprefix;
              description "Destination prefix";
            }
    
            uses apply-advanced;
    
            leaf-list policy {
              type jt:policy-algebra;
              ordered-by user;
              description "Policy filter";
            }
    
            container metric {
              presence "enable metric";
              description "Metric value";
              uses rib_static_metric_type;
            }  // container metric
    
            container metric2 {
              presence "enable metric2";
              description "Metric value 2";
              uses rib_static_metric_type;
            }  // container metric2
    
            container metric3 {
              presence "enable metric3";
              description "Metric value 3";
              uses rib_static_metric_type;
            }  // container metric3
    
            container metric4 {
              presence "enable metric4";
              description "Metric value 4";
              uses rib_static_metric_type;
            }  // container metric4
    
            container tag {
              presence "enable tag";
              description "Tag string";
              uses rib_static_metric_type;
            }  // container tag
    
            container tag2 {
              presence "enable tag2";
              description "Tag string 2";
              uses rib_static_metric_type;
            }  // container tag2
    
            container preference {
              presence "enable preference";
              description "Preference value";
              uses rib_static_metric_type;
            }  // container preference
    
            container preference2 {
              presence "enable preference2";
              description "Preference value 2";
              uses rib_static_metric_type;
            }  // container preference2
    
            container color {
              presence "enable color";
              description
                "Color (preference) value";
              uses rib_static_metric_type;
            }  // container color
    
            container color2 {
              presence "enable color2";
              description
                "Color (preference) value 2";
              uses rib_static_metric_type;
            }  // container color2
    
            leaf-list community {
              type jt:community;
              ordered-by user;
              description
                "BGP community identifier";
            }
    
            container as-path {
              description
                "Autonomous system path";
              uses apply-advanced;
    
              leaf path {
                type string;
                description
                  "Autonomous system path";
              }
    
              leaf origin {
                type enumeration {
                  enum "igp" {
                    value 0;
                    description
                      "Path originated in the local IGP";
                  }
                  enum "egp" {
                    value 1;
                    description
                      "Path originated in another AS";
                  }
                  enum "incomplete" {
                    value 2;
                    description
                      "Path was learned by some other means";
                  }
                }
              }
    
              leaf atomic-aggregate {
                type empty;
                description
                  "Add ATOMIC_AGGREGATE path attribute to route";
              }
    
              container aggregator {
                presence "enable aggregator";
                description
                  "Add AGGREGATOR path attribute to route";
              }  // container aggregator
    
              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 address {
                type jt:ipv4addr;
                description
                  "Address of BGP system that formed the route";
              }
            }  // container as-path
    
            leaf discard {
              type empty;
              description
                "Drop packets to destination; send no ICMP unreachables";
            }
    
            leaf next-table {
              type string;
              description
                "Next hop to another table";
            }
    
            choice brief_flag {
              leaf brief {
                type empty;
                description
                  "Include longest common sequences from contributing paths";
              }
              leaf full {
                type empty;
                description
                  "Include all AS numbers from all contributing paths";
              }
            }  // choice brief_flag
    
            choice passive_flag {
              leaf active {
                type empty;
                description
                  "Remove inactive route from forwarding table";
              }
              leaf passive {
                type empty;
                description
                  "Retain inactive route in forwarding table";
              }
            }  // choice passive_flag
          }  // list route
        }  // grouping rib_aggregate_type
    
        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 rib_static_metric_type {
          leaf metric-value {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Metric value";
          }
    
          leaf type {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 16";
              }
            }
            description "Metric type";
          }
        }  // grouping rib_static_metric_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 route_record_traceoptions {
          description
            "Traceoptions for sampling route record";
          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 route-record to enable debuging output";
            leaf name {
              type enumeration {
                enum "parse" {
                  value 0;
                  description
                    "Trace parsing code";
                }
                enum "all" {
                  value 1;
                  description
                    "Trace all area of jflow-service code";
                }
              }
            }
          }  // list flag
        }  // grouping route_record_traceoptions
    
        grouping rpd_rib_group_type {
          description "Routing table group";
          leaf name {
            type string;
            description "Routing table group";
          }
    
          uses apply-advanced;
    
          leaf export-rib {
            type string;
            description "Export routing table";
          }
    
          leaf-list import-rib {
            type string;
            ordered-by user;
            description "Import routing table";
          }
    
          leaf-list import-policy {
            type jt:policy-algebra;
            ordered-by user;
            description "Import policy";
          }
        }  // grouping rpd_rib_group_type
    
        grouping sampling_family_inet6_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_sampling_inet6_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline;
          }  // container inline-jflow
        }  // grouping sampling_family_inet6_output_type
    
        grouping cflowd_sampling_inet6_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version9 {
            junos:must "((!(any ".. .. .. .. inet output flow-server <*> version") || !(any ".. .. .. .. inet output interface <*>")))";
            junos:must-message "Select only one version or configure only RE based samping under family inet";
            junos:must "((any ".. .. interface <*>" || ".. .. inline-jflow"))";
            junos:must-message "Service PIC or inline-jflow (j-series and SRX only) must be specified for version9";
            presence "enable version9";
            description
              "Export data in version 9 format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version9 template $$ ipv6-template")";
                junos:must-message "Template type must match input protocol";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version9
        }  // grouping cflowd_sampling_inet6_sampling_type
    
        grouping packet_export_inline {
          uses apply-advanced;
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Address to use for generating monitored packets";
          }
    
          leaf flow-export-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 3200";
              }
            }
            description
              "Flow export rate of monitored packets in kpps";
          }
        }  // grouping packet_export_inline
    
        grouping sampling_family_input_type {
          description
            "Configure input options for packet sampling";
          uses apply-advanced;
    
          leaf rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Ratio of packets to be sampled (1 out of N)";
          }
    
          leaf run-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 20";
              }
            }
            default "0";
            description
              "Number of samples after initial trigger";
          }
    
          leaf max-packets-per-second {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "1000";
            description
              "Threshold of samples per second before dropping";
          }
    
          leaf maximum-packet-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 9192";
              }
            }
            units "bytes";
            default "0";
            description
              "Maximum length of the sampled packet";
          }
        }  // grouping sampling_family_input_type
    
        grouping sampling_input_type {
          description
            "Configure input options for packet sampling";
          uses apply-advanced;
    
          leaf rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Ratio of packets to be sampled (1 out of N)";
          }
    
          leaf run-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 20";
              }
            }
            default "0";
            description
              "Number of samples after initial trigger";
          }
    
          leaf max-packets-per-second {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "1000";
            description
              "Threshold of samples per second before dropping";
          }
    
          leaf maximum-packet-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 9192";
              }
            }
            units "bytes";
            default "0";
            description
              "Maximum length of the sampled packet";
          }
    
          container family {
            presence "enable family";
            status deprecated;
            description "Protocol family";
          }  // container family
        }  // grouping sampling_input_type
    
        grouping sampling_instance_bridge_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          list flow-server {
            junos:must "(".. inline-jflow")";
            junos:must-message "Output 'inline Jflow' should be configured with flow-server";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_instance_bridge_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline_instance;
          }  // container inline-jflow
        }  // grouping sampling_instance_bridge_output_type
    
        grouping cflowd_instance_bridge_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          container version-ipfix {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "inline Jflow must be specified for version-ipfix";
            presence "enable version-ipfix";
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version-ipfix template $$ bridge-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version-ipfix template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
        }  // grouping cflowd_instance_bridge_sampling_type
    
        grouping packet_export_inline_instance {
          uses apply-advanced;
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Address to use for generating monitored packets";
          }
    
          leaf flow-export-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 3200";
              }
            }
            description
              "Flow export rate of monitored packets in kpps";
          }
        }  // grouping packet_export_inline_instance
    
        grouping sampling_instance_inet6_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_instance_inet6_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline_instance;
          }  // container inline-jflow
        }  // grouping sampling_instance_inet6_output_type
    
        grouping cflowd_instance_inet6_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version9 {
            junos:must "((!(any ".. .. .. .. inet output flow-server <*> version") || !(any ".. .. .. .. inet output interface <*>")))";
            junos:must-message "Select only one version or configure only RE based samping under family inet";
            junos:must "((any ".. .. interface <*>" || ".. .. inline-jflow"))";
            junos:must-message "Service PIC or inline-jflow (j-series and SRX only) must be specified for version9";
            presence "enable version9";
            description
              "Export data in version 9 format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version9 template $$ ipv6-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version9 template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version9
    
          container version-ipfix {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "inline Jflow must be specified for version-ipfix";
            presence "enable version-ipfix";
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version-ipfix template $$ ipv6-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version-ipfix template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
        }  // grouping cflowd_instance_inet6_sampling_type
    
        grouping sampling_instance_inet_global_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          container file {
            junos:must "(!(any ".. extension-service <*>"))";
            junos:must-message "This configuration is not required with 'extension-service'";
            description
              "Configure parameters for dumping sampled packets";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable sampled packet dumps";
              }
            }  // choice enable-disable
    
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file to contain sampled packet dumps";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10000";
                }
              }
              default "10";
              description
                "Maximum number of sampled packet dump files";
            }
    
            leaf size {
              type string;
              description
                "Maximum sample dump file size";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the sampled dump";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the sampled dump";
              }
            }  // choice world-readable-choice
    
            choice stamp-choice {
              leaf stamp {
                type empty;
                description
                  "Timestamp every packet in the dump";
              }
              leaf no-stamp {
                type empty;
                description
                  "Don't timestamp every packet in the dump";
              }
            }  // choice stamp-choice
          }  // container file
    
          container port-mirroring {
            junos:must "(!(any ".. extension-service <*>"))";
            junos:must-message "This configuration is not required with 'extension-service'";
            presence "enable port-mirroring";
            description
              "Configure sending sampled traffic out through an interface";
            uses inet_pm_family_output_type;
          }  // container port-mirroring
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_sampling_inet_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline;
          }  // container inline-jflow
        }  // grouping sampling_instance_inet_global_output_type
    
        grouping cflowd_sampling_inet_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version9 {
            junos:must "((!(any ".. .. .. .. inet output flow-server <*> version") || !(any ".. .. .. .. inet output interface <*>")))";
            junos:must-message "Select only one version or configure only RE based samping under family inet";
            junos:must "((any ".. .. interface <*>" || ".. .. inline-jflow"))";
            junos:must-message "Service PIC or inline-jflow (j-series and SRX only) must be specified for version9";
            presence "enable version9";
            description
              "Export data in version 9 format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "(("services flow-monitoring version9 template $$ ipv4-template" || "services flow-monitoring version9 template $$ peer-as-billing-template"))";
                junos:must-message "Template type must match input protocol";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version9
    
          container version-ipfix {
            presence "enable version-ipfix";
            status deprecated;
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
    
          leaf version {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            type enumeration {
              enum "5" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 0;
                description
                  "Export cflowd aggregates in version 5 format";
              }
              enum "8" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 1;
                description
                  "Export cflowd aggregates in version 8 format";
              }
              enum "500" {
                junos:must "(!(".. .. interface"))";
                junos:must-message "This feature is only supported for RE based sampling";
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 2;
                description
                  "Export cflowd aggregates in ASN 500 format";
              }
            }
            default "5";
            description
              "Format of exported cflowd aggregates";
          }
        }  // grouping cflowd_sampling_inet_type
    
        grouping sampling_instance_inet_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            junos:must "((".. interface" || ".. inline-jflow"))";
            junos:must-message "Output 'interface' or 'inline Jflow' should be configured with flow-server";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_instance_inet_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline_instance;
          }  // container inline-jflow
        }  // grouping sampling_instance_inet_output_type
    
        grouping cflowd_instance_inet_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version9 {
            junos:must "((!(any ".. .. .. .. inet output flow-server <*> version") || !(any ".. .. .. .. inet output interface <*>")))";
            junos:must-message "Select only one version or configure only RE based samping under family inet";
            junos:must "((any ".. .. interface <*>" || ".. .. inline-jflow"))";
            junos:must-message "Service PIC or inline-jflow (j-series and SRX only) must be specified for version9";
            presence "enable version9";
            description
              "Export data in version 9 format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version9 template $$ ipv4-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version9 template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version9
    
          container version-ipfix {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "inline Jflow must be specified for version-ipfix";
            presence "enable version-ipfix";
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version-ipfix template $$ ipv4-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version-ipfix template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
    
          leaf version {
            junos:must "(!(any ".. .. .. .. .. family mpls output flow-server <*> version9"))";
            junos:must-message "Select only one version";
            junos:must "(!(any ".. .. .. .. .. family inet6 output flow-server <*> version9"))";
            junos:must-message "Select only one version";
            junos:must "(!(any ".. .. .. .. .. family inet output flow-server <*> version9"))";
            junos:must-message "Select only one version";
            junos:must "(!(any ".. .. flow-server <*> version-ipfix"))";
            junos:must-message "Select only one version";
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            type enumeration {
              enum "5" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 0;
                description
                  "Export cflowd aggregates in version 5 format";
              }
              enum "8" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 1;
                description
                  "Export cflowd aggregates in version 8 format";
              }
            }
            default "5";
            description
              "Format of exported cflowd aggregates";
          }
        }  // grouping cflowd_instance_inet_sampling_type
    
        grouping sampling_instance_input_type {
          description
            "Configure input options for packet sampling";
          uses apply-advanced;
    
          leaf rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Ratio of packets to be sampled (1 out of N)";
          }
    
          leaf run-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 20";
              }
            }
            default "0";
            description
              "Number of samples after initial trigger";
          }
    
          leaf max-packets-per-second {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            default "1000";
            description
              "Threshold of samples per second before dropping";
          }
    
          leaf maximum-packet-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 9192";
              }
            }
            units "bytes";
            default "0";
            description
              "Maximum length of the sampled packet";
          }
        }  // grouping sampling_instance_input_type
    
        grouping sampling_instance_mpls_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            junos:must "((".. interface" || ".. inline-jflow"))";
            junos:must-message "Output 'interface' or 'inline Jflow' should be configured with flow-server";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_instance_mpls_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline_instance;
          }  // container inline-jflow
        }  // grouping sampling_instance_mpls_output_type
    
        grouping cflowd_instance_mpls_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version-ipfix {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "inline Jflow must be specified for version-ipfix";
            presence "enable version-ipfix";
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "(("services flow-monitoring version-ipfix template $$ mpls-template" || ("services flow-monitoring version-ipfix template $$ mpls-ipv4-template" || "services flow-monitoring version-ipfix template $$ mpls-ipvx-template")))";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version-ipfix template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
        }  // grouping cflowd_instance_mpls_sampling_type
    
        grouping sampling_instance_vpls_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          list flow-server {
            junos:must "(".. inline-jflow")";
            junos:must-message "Output 'inline Jflow' should be configured with flow-server";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_instance_vpls_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline_instance;
          }  // container inline-jflow
        }  // grouping sampling_instance_vpls_output_type
    
        grouping cflowd_instance_vpls_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          container version-ipfix {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "inline Jflow must be specified for version-ipfix";
            presence "enable version-ipfix";
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "("services flow-monitoring version-ipfix template $$ vpls-template")";
                junos:must-message "Template type must match input protocol";
                junos:must "((!(".. .. .. .. inline-jflow source-address") || (".. .. .. .. inline-jflow source-address" && all ".. .. .. .. flow-server <*> version-ipfix template $$")))";
                junos:must-message "All the collector under same family should share the same template in Inline-Jflow";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
        }  // grouping cflowd_instance_vpls_sampling_type
    
        grouping sampling_output_type {
          description
            "Configure output options for packet sampling";
          uses apply-advanced;
    
          leaf aggregate-export-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "90 .. 1800";
              }
            }
            units "seconds";
            default "90";
            description
              "Interval of exporting aggregate accounting information";
          }
    
          container file {
            junos:must "(!(any ".. extension-service <*>"))";
            junos:must-message "This configuration is not required with 'extension-service'";
            description
              "Configure parameters for dumping sampled packets";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable sampled packet dumps";
              }
            }  // choice enable-disable
    
            leaf filename {
              type string {
                junos:posix-pattern "![/ %]";
                junos:pattern-message "Must not contain '/', % or a space";
                length "1 .. 1024";
              }
              description
                "Name of file to contain sampled packet dumps";
            }
    
            leaf files {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "2 .. 10000";
                }
              }
              default "10";
              description
                "Maximum number of sampled packet dump files";
            }
    
            leaf size {
              type string;
              description
                "Maximum sample dump file size";
            }
    
            choice world-readable-choice {
              leaf world-readable {
                type empty;
                description
                  "Allow any user to read the sampled dump";
              }
              leaf no-world-readable {
                type empty;
                description
                  "Don't allow any user to read the sampled dump";
              }
            }  // choice world-readable-choice
    
            choice stamp-choice {
              leaf stamp {
                type empty;
                description
                  "Timestamp every packet in the dump";
              }
              leaf no-stamp {
                type empty;
                description
                  "Don't timestamp every packet in the dump";
              }
            }  // choice stamp-choice
          }  // container file
    
          container port-mirroring {
            junos:must "(!(any ".. extension-service <*>"))";
            junos:must-message "This configuration is not required with 'extension-service'";
            presence "enable port-mirroring";
            description
              "Configure sending sampled traffic out through an interface";
            uses inet_pm_family_output_type;
          }  // container port-mirroring
    
          list flow-server {
            junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))";
            junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'";
            key "name";
            max-elements 8;
            description
              "Configure sending traffic aggregates in cflowd format";
            uses cflowd_sampling_type;
          }  // list flow-server
    
          container inline-jflow {
            junos:must "(any ".. flow-server <*>")";
            junos:must-message "'flow-server' must be specified with the inline Jflow";
            presence "enable inline-jflow";
            description
              "Inline processing of sampled packets";
            uses packet_export_inline;
          }  // container inline-jflow
        }  // grouping sampling_output_type
    
        grouping cflowd_sampling_type {
          leaf name {
            type jt:ipaddr;
            description
              "Name of host collecting cflowd packets";
          }
    
          uses apply-advanced;
    
          leaf port {
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "UDP port number on host collecting cflowd packets";
          }
    
          leaf dscp {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "DSCP can be configured for inline-jflow";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "0 .. 63";
              }
            }
            default "0";
            description
              "Numeric DSCP value in the range 0 to 63";
          }
    
          leaf forwarding-class {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "forwarding-class can be configured for inline-jflow";
            type string {
              length "1 .. 64";
            }
            description
              "Forwarding-class for exported jflow packets, applicable only for inline-jflow";
          }
    
          leaf routing-instance {
            junos:must "(".. .. inline-jflow")";
            junos:must-message "Routing Instances can be configured for inline-jflow";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)";
            type string;
            description
              "Name of routing instance on which flow collector is reachable";
          }
    
          leaf autonomous-system-type {
            type enumeration {
              enum "origin" {
                value 0;
                description
                  "Export origin-AS numbers";
              }
              enum "peer" {
                value 1;
                description
                  "Export peer-AS numbers";
              }
            }
            default "origin";
            description
              "Type of autonomous system number to export";
          }
    
          container aggregation {
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            description
              "Aggregations to perform for exported flows (version 8 only)";
            uses aggregation_type;
          }  // container aggregation
    
          choice local-dump-choice {
            leaf local-dump {
              type empty;
              description
                "Dump cflowd records to log file before exporting";
            }
            leaf no-local-dump {
              type empty;
              description
                "Don't dump cflowd records to log file before exporting";
            }
          }  // choice local-dump-choice
    
          leaf source-address {
            type jt:ipv4addr;
            description
              "Source IPv4 address for cflowd packets";
          }
    
          container version9 {
            junos:must "(!(any ".. .. flow-server <*> version"))";
            junos:must-message "Select only one version";
            junos:must "((any ".. .. interface <*>" || ".. .. inline-jflow"))";
            junos:must-message "Service PIC or inline-jflow (j-series and SRX only) must be specified for version9";
            presence "enable version9";
            description
              "Export data in version 9 format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                junos:must "((("services flow-monitoring version9 template $$ ipv4-template" && "forwarding-options sampling input family inet") || (("services flow-monitoring version9 template $$ ipv6-template" && "forwarding-options sampling input family inet6") || (("services flow-monitoring version9 template $$ mpls-template" && "forwarding-options sampling input family mpls") || (("services flow-monitoring version9 template $$ mpls-ipv4-template" && "forwarding-options sampling input family mpls") || ("services flow-monitoring version9 template $$ mpls-ipvx-template" && "forwarding-options sampling input family mpls"))))))";
                junos:must-message "Template type must match input protocol";
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version9
    
          container version-ipfix {
            presence "enable version-ipfix";
            status deprecated;
            description
              "Export data in version ipfix format";
            uses apply-advanced;
    
            container template {
              description
                "Template configuration";
              uses apply-advanced;
    
              leaf template-name {
                type string;
                description "Template name";
              }
            }  // container template
          }  // container version-ipfix
    
          leaf version {
            junos:must "("forwarding-options sampling input family inet")";
            junos:must-message "input 'family inet' must be configured";
            junos:must "(!(any ".. .. flow-server <*> version9"))";
            junos:must-message "Select only one version";
            type enumeration {
              enum "5" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 0;
                description
                  "Export cflowd aggregates in version 5 format";
              }
              enum "8" {
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 1;
                description
                  "Export cflowd aggregates in version 8 format";
              }
              enum "500" {
                junos:must "(!(".. .. interface"))";
                junos:must-message "This feature is only supported for RE based sampling";
                junos:must "("system ntp")";
                junos:must-message " NTP must be configured for sampling v5/8/500 to work properly";
                value 2;
                description
                  "Export cflowd aggregates in ASN 500 format";
              }
            }
            default "5";
            description
              "Format of exported cflowd aggregates";
          }
        }  // grouping cflowd_sampling_type
    
        grouping sampling_traceoptions_type {
          description
            "Configure packet sampling traceoptions";
          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
        }  // grouping sampling_traceoptions_type
    
        grouping sbl-type {
          description "SBL type";
          uses apply-advanced;
    
          list profile {
            key "name";
            ordered-by user;
            description "SBL profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description "SBL profile name";
            }
    
            uses apply-advanced;
    
            choice sbl-default-server-choice {
              leaf sbl-default-server {
                type empty;
                description "Default SBL server";
              }
              leaf no-sbl-default-server {
                type empty;
                description
                  "Don't default SBL server";
              }
            }  // choice sbl-default-server-choice
    
            leaf spam-action {
              type enumeration {
                enum "block" {
                  value 0;
                  description "Block e-mail";
                }
                enum "tag-header" {
                  value 1;
                  description
                    "Tag header of e-mail";
                }
                enum "tag-subject" {
                  value 2;
                  description
                    "Tag subject of e-mail";
                }
              }
              description "Anti-spam actions";
            }
    
            leaf custom-tag-string {
              type string {
                length "1 .. 512";
              }
              description "Custom tag string";
            }
    
            leaf address-whitelist {
              junos:must "("security utm custom-objects url-pattern $$")";
              junos:must-message "url-pattern must be defined";
              type string;
              description "Anti-spam whitelist";
            }
    
            leaf address-blacklist {
              junos:must "("security utm custom-objects url-pattern $$")";
              junos:must-message "url-pattern must be defined";
              type string;
              description "Anti-spam blacklist";
            }
          }  // list profile
        }  // grouping sbl-type
    
        grouping scheduler_object_type {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description
              "Name of security scheduler";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of scheduler";
          }
    
          list start-date {
            key "start-date stop-date";
            max-elements 2;
            ordered-by user;
            description
              "Start date and time ([YYYY-]MM-DD.hh:mm)";
            leaf start-date {
              type string {
                junos:posix-pattern "^((2[0-9][0-9][0-9][-])?(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[.][0-9]{2,2}[:][0-9]{2,2})$";
                junos:pattern-message "Invalid date format [YYYY-]MM-DD.hh:mm";
              }
              description
                "Start date and time ([YYYY-]MM-DD.hh:mm)";
            }
    
            leaf stop-date {
              type string {
                junos:posix-pattern "^((2[0-9][0-9][0-9][-])?(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[.][0-9]{2,2}[:][0-9]{2,2})$";
                junos:pattern-message "Invalid date format [YYYY-]MM-DD.hh:mm";
              }
              description
                "Stop date and time ([YYYY-]MM-DD.hh:mm)";
            }
    
            uses apply-advanced;
          }  // list start-date
    
          container daily {
            description
              "Everyday; can be overwritten by specific weekday";
            uses daily-object;
          }  // container daily
    
          container sunday {
            description "Every Sunday";
            uses daily-object;
          }  // container sunday
    
          container monday {
            description "Every Monday";
            uses daily-object;
          }  // container monday
    
          container tuesday {
            description "Every Tuesday";
            uses daily-object;
          }  // container tuesday
    
          container wednesday {
            description "Every Wednesday";
            uses daily-object;
          }  // container wednesday
    
          container thursday {
            description "Every Thursday";
            uses daily-object;
          }  // container thursday
    
          container friday {
            description "Every Friday";
            uses daily-object;
          }  // container friday
    
          container saturday {
            description "Every Saturday";
            uses daily-object;
          }  // container saturday
        }  // grouping scheduler_object_type
    
        grouping daily-object {
          description "Daily schedule";
          uses apply-advanced;
    
          choice daily_type {
            list start-time {
              key "start-time-value stop-time";
              max-elements 2;
              description "Time range for day";
              leaf start-time-value {
                type string {
                  junos:posix-pattern "^((0[0-9]|1[0-9]|2[0-3])([:][0-5][0-9])?([:][0-5][0-9])?)$";
                  junos:pattern-message "Must be a valid time in hh:mm format";
                }
                description
                  "Start time for day (hh:mm)";
              }
    
              leaf stop-time {
                type string {
                  junos:posix-pattern "^((0[0-9]|1[0-9]|2[0-3])([:][0-5][0-9])?([:][0-5][0-9])?)$";
                  junos:pattern-message "Must be a valid time in hh:mm format";
                }
                description
                  "Stop time for day (hh:mm)";
              }
    
              uses apply-advanced;
            }  // list start-time
            leaf exclude {
              type empty;
              description
                "Exclude day from week";
            }
            leaf all-day {
              type empty;
              description "Include complete day";
            }
          }  // choice daily_type
        }  // grouping daily-object
    
        grouping sctp-object {
          uses apply-advanced;
    
          list profile {
            key "name";
            description
              "Configure stream transmission protocol";
            leaf name {
              type string {
                junos:posix-pattern "^[0-9A-Za-z][_0-9A-Za-z-]{0,30}$";
                junos:pattern-message "Must be a string beginning with a letter or number, and consisting of no more than 31 total letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description
                "SCTP configuration name";
            }
    
            uses apply-advanced;
    
            leaf nat-only {
              type empty;
              description
                "Only do payload IPs translation for SCTP packet";
            }
    
            leaf association-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 1440";
                }
              }
              description
                "SCTP association timeout length, in minutes";
            }
    
            leaf handshake-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 30";
                }
              }
              description
                "SCTP handshake timeout, in seconds";
            }
    
            container drop {
              description
                "Disallowed SCTP payload message";
              uses apply-advanced;
    
              list m3ua-service {
                key "name";
                ordered-by user;
                description
                  "MTP level 3 (MTP3) user adaptation layer service";
                leaf name {
                  type enumeration {
                    enum "sccp" {
                      value 0;
                      description
                        "Signaling connection control part";
                    }
                    enum "tup" {
                      value 1;
                      description
                        "Telephone user part";
                    }
                    enum "isup" {
                      value 2;
                      description
                        "ISDN user part";
                    }
                  }
                }
              }  // list m3ua-service
    
              list payload-protocol {
                key "name";
                ordered-by user;
                description
                  "SCTP payload protocol identifier";
                leaf name {
                  type string;
                }
              }  // list payload-protocol
            }  // container drop
    
            container permit {
              description
                "Permit SCTP payload message";
              uses apply-advanced;
    
              list payload-protocol {
                key "name";
                ordered-by user;
                description
                  "SCTP payload protocol identifier";
                leaf name {
                  type string;
                }
              }  // list payload-protocol
            }  // container permit
    
            container limit {
              description "Packet limits";
              uses apply-advanced;
    
              list payload-protocol {
                key "name";
                ordered-by user;
                description "Payload Rate limit";
                leaf name {
                  type string;
                }
    
                leaf rate {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 12000";
                    }
                  }
                  description "Rate limit";
                }
              }  // list payload-protocol
    
              list address {
                key "name";
                ordered-by user;
                description
                  "Rate limit for a list of IP addresses";
                leaf name {
                  type jt:ipaddr;
                  description "IP address";
                }
    
                uses apply-advanced;
    
                list payload-protocol {
                  key "name";
                  ordered-by user;
                  description
                    "Payload Rate limit";
                  leaf name {
                    type string;
                  }
    
                  leaf rate {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 12000";
                      }
                    }
                    description "Rate limit";
                  }
                }  // list payload-protocol
              }  // list address
    
              container rate {
                description "Rate limit";
                uses apply-advanced;
    
                leaf sccp {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 12000";
                    }
                  }
                  description
                    "Global SCCP messages rate limit";
                }
    
                leaf ssp {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 12000";
                    }
                  }
                  description
                    "Global SSP messages rate limit";
                }
    
                leaf sst {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "1 .. 12000";
                    }
                  }
                  description
                    "Global SST messages rate limit";
                }
    
                list address {
                  key "name";
                  ordered-by user;
                  description
                    "Rate limit for a list of IP addresses";
                  leaf name {
                    type jt:ipaddr;
                    description "IP address";
                  }
    
                  uses apply-advanced;
    
                  leaf sccp {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 12000";
                      }
                    }
                    description
                      "SCCP messages rate limit";
                  }
    
                  leaf ssp {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 12000";
                      }
                    }
                    description
                      "SSP messages rate limit";
                  }
    
                  leaf sst {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1 .. 12000";
                      }
                    }
                    description
                      "SST messages rate limit";
                  }
                }  // list address
              }  // container rate
            }  // container limit
          }  // list profile
    
          container multichunk-inspection {
            description
              "Configure for SCTP multi chunks inspection";
            uses apply-advanced;
    
            choice multichunk-flag {
              leaf disable {
                type empty;
                description
                  "Set multichunk inspection flag to disable";
              }
            }  // choice multichunk-flag
          }  // container multichunk-inspection
    
          container nullpdu {
            description
              "Configure for SCTP NULLPDU protocol value";
            uses apply-advanced;
    
            container protocol {
              description
                "SCTP NULLPDU payload protocol identifier";
              uses apply-advanced;
    
              choice nullpdu-protocol {
                leaf ID-0x0000 {
                  type empty;
                  description
                    "Set 0x0000 to be NULLPDU ID value";
                }
                leaf ID-0xFFFF {
                  type empty;
                  description
                    "Set 0xFFFF to be NULLPDU ID value";
                }
              }  // choice nullpdu-protocol
            }  // container protocol
          }  // container nullpdu
    
          list log {
            key "name";
            ordered-by user;
            description
              "GPRS stream control transmission protocol logs";
            leaf name {
              type enumeration {
                enum "configuration" {
                  value 0;
                  description
                    "Log CLI configuration";
                }
                enum "rate-limit" {
                  value 1;
                  description
                    "Log exceeding rate limits";
                }
                enum "association" {
                  value 2;
                  description
                    "Log association event";
                }
                enum "data-message-drop" {
                  value 3;
                  description
                    "Log the drop of SCTP data message";
                }
                enum "control-message-drop" {
                  value 4;
                  description
                    "Log the drop of SCTP control message";
                }
                enum "control-message-all" {
                  value 5;
                  description
                    "Log SCTP control message both drop and pass";
                }
              }
            }
          }  // list log
    
          container traceoptions {
            description
              "Trace options for GPRS stream control transmission protocol";
            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 "detail" {
                    value 1;
                    description
                      "Trace detail events";
                  }
                  enum "flow" {
                    value 2;
                    description
                      "Trace flow events";
                  }
                  enum "parser" {
                    value 3;
                    description
                      "Trace parser events";
                  }
                  enum "chassis-cluster" {
                    value 4;
                    description
                      "Trace chassis cluster events";
                  }
                  enum "all" {
                    value 5;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping sctp-object
    
        grouping secintel-category-disable {
          description
            "Security intelligence category";
          leaf name {
            type enumeration {
              enum "IPFilter" {
                value 0;
                description "IPFilter";
              }
              enum "GeoIP" {
                value 1;
                description "GeoIP";
              }
              enum "CC" {
                value 2;
                description
                  "Command and control";
              }
              enum "Blacklist" {
                value 3;
                description "Blacklist";
              }
              enum "Whitelist" {
                value 4;
                description "Whitelist";
              }
              enum "Infected-Hosts" {
                value 5;
                description "Infected-Hosts";
              }
              enum "SecProfiling" {
                value 6;
                description "SecProfiling";
              }
              enum "DNS" {
                value 7;
                description "DNS";
              }
            }
            description
              "Name of security intelligence category";
          }
    
          uses apply-advanced;
    
          container disable {
            presence "enable disable";
            description
              "To disable category for feed update";
          }  // container disable
        }  // grouping secintel-category-disable
    
        grouping secintel-policy-setting {
          description
            "Security intelligence policy setting";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description
              "Security intelligence policy name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of policy";
          }
    
          list category-profiles {
            key "name";
            ordered-by user;
            description
              "Security intelligence category profiles";
            leaf name {
              type enumeration {
                enum "IPFilter" {
                  value 0;
                  description "IPFilter";
                }
                enum "GeoIP" {
                  value 1;
                  description "GeoIP";
                }
                enum "CC" {
                  value 2;
                  description
                    "Command and control";
                }
                enum "Infected-Hosts" {
                  value 3;
                  description "Infected-Hosts";
                }
                enum "DNS" {
                  value 4;
                  description "DNS";
                }
              }
              description
                "Name of security intelligence category";
            }
    
            uses apply-advanced;
    
            leaf profile-name {
              junos:must "("services security-intelligence profile $$")";
              junos:must-message "security intelligence profile must be defined";
              type string;
              description "Name of profile";
            }
          }  // list category-profiles
        }  // grouping secintel-policy-setting
    
        grouping secintel-profile-setting {
          description
            "Security intelligence profile settings";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description
              "Security intelligence profile name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of profile";
          }
    
          leaf category {
            type string;
            description "Profile category name";
          }
    
          list rule {
            key "name";
            ordered-by user;
            description "Profile rule name";
            uses secintel-profile-rule;
          }  // list rule
    
          container default-rule {
            presence "enable default-rule";
            description "Profile default rule";
            uses apply-advanced;
    
            container then {
              presence "enable then";
              description
                "Profile default rule action";
              uses apply-advanced;
    
              container action {
                description
                  "Security intelligence profile action";
                uses apply-advanced;
    
                choice action {
                  leaf permit {
                    type empty;
                    description "Permit action";
                  }
                  container block {
                    description "Block action";
                    uses apply-advanced;
    
                    choice action {
                      container drop {
                        presence "enable drop";
                        description
                          "Drop packet";
                      }  // container drop
                      container close {
                        junos:must "(!(".. .. .. .. .. category DNS"))";
                        junos:must-message "close action not available on DNS profiles";
                        presence "enable close";
                        description
                          "Close session";
                        uses apply-advanced;
    
                        container http {
                          description
                            "Http content for block action";
                          uses apply-advanced;
    
                          choice http-choice {
                            leaf file {
                              type string;
                              description
                                "File name for http response to client";
                            }
                            leaf message {
                              type string;
                              description
                                "Block message to client";
                            }
                            leaf redirect-url {
                              type string {
                                junos:posix-pattern "^https?://.*";
                                junos:pattern-message "URL must begin with http:// or https://";
                                length
                                  "1 .. 1023";
                              }
                              description
                                "Redirect url to client";
                            }
                          }  // choice http-choice
                        }  // container http
                      }  // container close
                    }  // choice action
                  }  // container block
                  container recommended {
                    junos:must "(!(".. .. .. .. category DNS"))";
                    junos:must-message "recommend action not available on DNS profiles";
                    presence
                      "enable recommended";
                    description
                      "Recommended action from feed server";
                  }  // container recommended
                  leaf sinkhole {
                    junos:must "(".. .. .. .. category DNS")";
                    junos:must-message "Sinkhole action requires DNS category profile";
                    type empty;
                    description
                      "DNS sinkhole for DNS profile";
                  }
                }  // choice action
              }  // container action
    
              choice log-choice {
                leaf log {
                  type empty;
                  description
                    "Log security intelligence block action";
                }
                leaf no-log {
                  type empty;
                  description
                    "Don't log security intelligence block action";
                }
              }  // choice log-choice
            }  // container then
          }  // container default-rule
        }  // grouping secintel-profile-setting
    
        grouping secintel-profile-rule {
          description
            "Security intelligence profile rule";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Profile rule name";
          }
    
          uses apply-advanced;
    
          container match {
            description
              "Profile matching feed name and threat levels";
            uses apply-advanced;
    
            list feed-name {
              key "name";
              max-elements 32;
              ordered-by user;
              description
                "Profile matching feed name";
              leaf name {
                type string {
                  junos:posix-pattern "^[^/;:|=,+*?&<>{}]*$";
                  junos:pattern-message "Must not be double quotation marks and other special characters as / ; : | = , + * ? & < > { }";
                  length "1 .. 63";
                }
              }
    
              uses apply-advanced;
            }  // list feed-name
    
            leaf-list threat-level {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              ordered-by user;
              description
                "Profile matching threat levels, higher number is more severe";
            }
          }  // container match
    
          container then {
            description "Profile action and log";
            uses apply-advanced;
    
            container action {
              description
                "Security intelligence profile action";
              uses apply-advanced;
    
              choice action {
                leaf permit {
                  type empty;
                  description "Permit action";
                }
                container block {
                  description "Block action";
                  uses apply-advanced;
    
                  choice action {
                    container drop {
                      presence "enable drop";
                      description "Drop packet";
                    }  // container drop
                    container close {
                      junos:must "(!(".. .. .. .. .. category DNS"))";
                      junos:must-message "close action not available on DNS profiles";
                      presence "enable close";
                      description
                        "Close session";
                      uses apply-advanced;
    
                      container http {
                        description
                          "Http content for block action";
                        uses apply-advanced;
    
                        choice http-choice {
                          leaf file {
                            type string;
                            description
                              "File name for http response to client";
                          }
                          leaf message {
                            type string;
                            description
                              "Block message to client";
                          }
                          leaf redirect-url {
                            type string {
                              junos:posix-pattern "^https?://.*";
                              junos:pattern-message "URL must begin with http:// or https://";
                              length "1 .. 1023";
                            }
                            description
                              "Redirect url to client";
                          }
                        }  // choice http-choice
                      }  // container http
                    }  // container close
                  }  // choice action
                }  // container block
                container recommended {
                  junos:must "(!(".. .. .. .. category DNS"))";
                  junos:must-message "recommend action not available on DNS profiles";
                  presence "enable recommended";
                  description
                    "Recommended action from feed server";
                }  // container recommended
                leaf sinkhole {
                  junos:must "(".. .. .. .. category DNS")";
                  junos:must-message "Sinkhole action requires DNS category profile";
                  type empty;
                  description
                    "DNS sinkhole for DNS profile";
                }
              }  // choice action
            }  // container action
    
            container log {
              presence "enable log";
              description
                "Log security intelligence block action";
            }  // container log
          }  // container then
        }  // grouping secintel-profile-rule
    
        grouping secintel-traceoptions {
          description
            "Security intelligence 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
    
          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";
              }
            }
            description
              "Level of debugging output";
          }
    
          list flag {
            key "name";
            ordered-by user;
            description "Trace flags";
            leaf name {
              type enumeration {
                enum "all" {
                  value 0;
                  description "Trace everything";
                }
                enum "blacklist" {
                  value 1;
                  description
                    "Trace security intelligence Blacklist category";
                }
                enum "cc" {
                  value 2;
                  description
                    "Trace security intelligence CC category";
                }
                enum "infected-hosts" {
                  value 3;
                  description
                    "Trace security intelligence Infected-Hosts category";
                }
                enum "control" {
                  value 4;
                  description
                    "Trace control plane";
                }
                enum "feed" {
                  value 5;
                  description
                    "Trace feed operation";
                }
                enum "ipc" {
                  value 6;
                  description "Trace ipc module";
                }
                enum "infrastucture" {
                  value 7;
                  description
                    "Trace infrastucture functions";
                }
                enum "jwas" {
                  value 8;
                  description
                    "Trace security intelligence JWAS category";
                }
                enum "plugin" {
                  value 9;
                  description
                    "Trace security intelligence plugin services";
                }
                enum "whitelist" {
                  value 10;
                  description
                    "Trace security intelligence Whitelist category";
                }
                enum "secprofiling" {
                  value 11;
                  description
                    "Trace security intelligence Secprofiling category";
                }
              }
            }
          }  // list flag
        }  // grouping secintel-traceoptions
    
        grouping secure-wire-type {
          description
            "Secure-wire cross connection";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Secure-wire name";
          }
    
          uses apply-advanced;
    
          leaf-list interface {
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            max-elements 2;
            description
              "Secure-wire logical interface";
          }
        }  // grouping secure-wire-type
    
        grouping security-authentication-key-chains {
          uses apply-advanced;
    
          list key-chain {
            key "name";
            description
              "Key chain configuration";
            leaf name {
              type string {
                junos:posix-pattern "!^((__.*__)|(.*[ ].*)|(.{33,}))$";
                junos:pattern-message "Must be string of 32 characters or less with no spaces";
              }
              description
                "Name of authentication key chain";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                length "1 .. 80";
              }
              description
                "Text description of this authentication-key-chain";
            }
    
            leaf tolerance {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4294967295";
                }
              }
              units "seconds";
              default "3600";
              description "Clock skew tolerance";
            }
    
            list key {
              key "name";
              description
                "Authentication element configuration";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 63";
                  }
                }
                description
                  "Authentication element identifier";
              }
    
              uses apply-advanced;
    
              leaf secret {
                type string {
                  length "1 .. 126";
                }
                description "Authentication key";
              }
    
              leaf key-name {
                type string {
                  junos:posix-pattern "^([0-9a-fA-F][0-9a-fA-F]){1,32}$";
                  junos:pattern-message "Must be an even-length string up to 64 hexadecimal digits (0-9, a-f, A-F)";
                  length "2 .. 64";
                }
                description
                  "Key name in hexadecimal format used for macsec";
              }
    
              leaf start-time {
                type jt:time;
                description
                  "Start time for key transmission (YYYY-MM-DD.HH:MM)";
              }
    
              leaf algorithm {
                type enumeration {
                  enum "md5" {
                    value 0;
                    description
                      "Message Digest 5";
                  }
                  enum "hmac-sha-1" {
                    junos:must "(".. options isis-enhanced")";
                    junos:must-message "sha algorithm required isis-enhanced";
                    value 1;
                    description
                      "Hash-based Message Authentication Code (SHA1) (96 bits)";
                  }
                  enum "ao" {
                    value 2;
                    description
                      "TCP Authentication Option";
                  }
                }
                default "md5";
                description
                  "Authentication algorithm";
              }
    
              leaf options {
                type enumeration {
                  enum "basic" {
                    value 0;
                    description
                      "Rudimentary encoding format";
                  }
                  enum "isis-enhanced" {
                    value 1;
                    description
                      "RFC 5310 based encoding";
                  }
                }
                default "basic";
                description
                  "Protocol's transmission encoding format";
              }
    
              container ao-attribute {
                junos:must "(!(".. authentication-key"))";
                junos:must-message "Cannot be configured with authentication-key";
                junos:must "(".. algorithm ao")";
                junos:must-message "Can only be configured with authentication-algorithm ao";
                description
                  "TCP Authentication option attributes";
                uses apply-advanced;
    
                leaf send-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "Send id for TCP-AO entry";
                }
    
                leaf recv-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 255";
                    }
                  }
                  description
                    "Recv id for TCP-AO entry";
                }
    
                leaf tcp-ao-option {
                  type enumeration {
                    enum "enabled" {
                      value 0;
                      description
                        "Include the TCP-AO option";
                    }
                    enum "disabled" {
                      value 1;
                      description
                        "Not include the TCP-AO option";
                    }
                  }
                  default "disabled";
                  description
                    "Include TCP-AO option within message header";
                }
    
                leaf cryptographic-algorithm {
                  type enumeration {
                    enum "hmac-sha-1-96" {
                      value 0;
                      description
                        "Hash-based Message Authentication Code (SHA1) (96 bits)";
                    }
                    enum "aes-128-cmac-96" {
                      value 1;
                      description
                        "Cipher-based Message Authentication Code (AES128) (96 bits)";
                    }
                  }
                  default "hmac-sha-1-96";
                  description
                    "Cryptographic algorithm for TCP-AO Traffic key and MAC digest generation";
                }
              }  // container ao-attribute
            }  // list key
          }  // list key-chain
        }  // grouping security-authentication-key-chains
    
        grouping security-dhcpv6-options-type {
          description "Configure DHCPv6 options";
          uses apply-advanced;
    
          container option-37 {
            presence "enable option-37";
            description
              "Configure DHCPv6 remote identifier option";
            uses apply-advanced;
    
            container prefix {
              description
                "Configure DHCPv6 remote identifier prefix";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Prefix router host name to DHCPv6 remote identifier";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Prefix logical system name to DHCPv6 remote identifier";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Prefix routing instance name to DHCPv6 remote identifier";
              }
    
              leaf vlan-name {
                type empty;
                description
                  "Prefix vlan name to DHCPv6 remote identifier";
              }
    
              leaf vlan-id {
                type empty;
                description
                  "Prefix vlan tag to DHCPv6 remote identifier";
              }
            }  // container prefix
    
            leaf use-interface-mac {
              type empty;
              description
                "Add incoming interface's MAC address to DHCPv6 remote identifier";
            }
    
            leaf use-interface-index {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface index";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface index";
                }
              }
              description
                "Add interface index to DHCPv6 remote identifier";
            }
    
            leaf use-interface-name {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface name";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface name";
                }
              }
              description
                "Add interface name to DHCPv6 remote identifier";
            }
    
            leaf use-interface-description {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Add interface description to DHCPv6 remote identifier";
            }
    
            leaf use-string {
              junos:must "(!(".. use-interface-description"))";
              junos:must-message "use-string and use-interface-description cannot be configured together";
              type string;
              description
                "Add custom string to DHCPv6 remote identifier";
            }
          }  // container option-37
    
          container option-18 {
            presence "enable option-18";
            description
              "Configure DHCPv6 interface identifier option";
            uses apply-advanced;
    
            container prefix {
              description
                "Configure DHCPv6 interface identifier prefix";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Prefix router host name to DHCPv6 interface identifier";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Prefix logical system name to DHCPv6 interface identifier";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Prefix routing instance name to DHCPv6 interface identifier";
              }
    
              leaf vlan-name {
                type empty;
                description
                  "Prefix vlan name to DHCPv6 interface identifier";
              }
    
              leaf vlan-id {
                type empty;
                description
                  "Prefix vlan tag to DHCPv6 interface identifier";
              }
            }  // container prefix
    
            leaf use-interface-mac {
              type empty;
              description
                "Add incoming interface's MAC address to DHCPv6 circuit identifier";
            }
    
            leaf use-interface-index {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface index";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface index";
                }
              }
              description
                "Add interface index to DHCPv6 interface identifier";
            }
    
            leaf use-interface-name {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface name";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface name";
                }
              }
              description
                "Add interface name to DHCPv6 remote identifier";
            }
    
            leaf use-interface-description {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Add interface description to DHCPv6 interface identifier";
            }
    
            leaf use-string {
              junos:must "(!(".. use-interface-description"))";
              junos:must-message "use-string and use-interface-description cannot be configured together";
              type string;
              description
                "Add custom string to DHCPv6 interface identifier";
            }
          }  // container option-18
    
          container option-16 {
            presence "enable option-16";
            description
              "Configure DHCPv6 vendor class identifier option. Overwrite if exists";
            uses apply-advanced;
    
            leaf use-string {
              type string;
              description
                "Add custom string to DHCPv6 vendor identifier";
            }
          }  // container option-16
    
          leaf option-79 {
            junos:must "(".. .. light-weight-dhcpv6-relay")";
            junos:must-message "Option-79 can be configured only on LDRAs";
            type empty;
            description
              "Configure DHCPv6 client link layer address option";
          }
        }  // grouping security-dhcpv6-options-type
    
        grouping security-group-vpn {
          uses apply-advanced;
    
          container member {
            junos:must "(!(".. server"))";
            junos:must-message "Configuring both group-vpn server and group-vpn member is not supported";
            description
              "Group VPN member configuration";
            uses gvpn-member;
          }  // container member
    
          container server {
            junos:must "(!(".. member"))";
            junos:must-message "Configuring both group-vpn server and group-vpn member is not supported";
            description
              "Group VPN server configuration";
            uses gvpn-server;
          }  // container server
        }  // grouping security-group-vpn
    
        grouping gvpn-member {
          uses apply-advanced;
    
          container ike {
            description
              "Group VPN IKE configuration";
            uses gvpn-member-ike;
          }  // container ike
    
          container ipsec {
            description
              "Group VPN IPsec configuration";
            uses gvpn-member-ipsec-vpn;
          }  // container ipsec
        }  // grouping gvpn-member
    
        grouping gvpn-member-ike {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for Group VPN Member";
            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 "timer" {
                    value 0;
                    description
                      "Trace internal timer events";
                  }
                  enum "routing-socket" {
                    value 1;
                    description
                      "Trace routing socket messages";
                  }
                  enum "parse" {
                    value 2;
                    description
                      "Trace configuration processing";
                  }
                  enum "config" {
                    value 3;
                    description
                      "Trace configuration download processing";
                  }
                  enum "ike" {
                    value 4;
                    description
                      "Trace IKE module processing";
                  }
                  enum "policy-manager" {
                    value 5;
                    description
                      "Trace policy manager processing";
                  }
                  enum "general" {
                    value 6;
                    description
                      "Trace general events";
                  }
                  enum "database" {
                    value 7;
                    description
                      "Trace security associations database events";
                  }
                  enum "certificates" {
                    value 8;
                    description
                      "Trace certificate events";
                  }
                  enum "snmp" {
                    value 9;
                    description
                      "Trace SNMP operations";
                  }
                  enum "thread" {
                    value 10;
                    description
                      "Trace thread processing";
                  }
                  enum "high-availability" {
                    value 11;
                    description
                      "Trace high-availability operations";
                  }
                  enum "next-hop-tunnels" {
                    value 12;
                    description
                      "Trace next-hop-tunnels operations";
                  }
                  enum "all" {
                    value 13;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
    
            container gateway-filter {
              description
                "Set gateway filter for trace";
              uses apply-advanced;
    
              leaf local-address {
                type jt:ipv4addr;
                description
                  "Use an IP address to identify the local gateway";
              }
    
              leaf remote-address {
                type jt:ipv4addr;
                description
                  "Use an IP address to identify the remote gateway";
              }
            }  // container gateway-filter
          }  // container traceoptions
    
          list proposal {
            key "name";
            ordered-by user;
            description "Define an IKE proposal";
            uses gvpn-member-ike-proposal;
          }  // list proposal
    
          list policy {
            key "name";
            ordered-by user;
            description "Define an IKE policy";
            uses gvpn-ike-policy;
          }  // list policy
    
          list gateway {
            key "name";
            ordered-by user;
            description "Define an IKE gateway";
            leaf name {
              junos:must "(!("security ike gateway $$"))";
              junos:must-message "Gateway already defined under [security ike]";
              type string {
                length "1 .. 32";
              }
              description
                "Label for the remote (peer) gateway";
            }
    
            uses apply-advanced;
    
            leaf ike-policy {
              junos:must "("security group-vpn member ike policy $$")";
              junos:must-message "Referenced IKE policy must be defined under [edit security group-vpn member ike policy]";
              type string {
                length "1 .. 32";
              }
              description
                "Name of the IKE policy";
            }
    
            leaf-list server-address {
              type jt:ipv4addr;
              max-elements 4;
              ordered-by user;
              description
                "Server Addresses upto 4";
            }
    
            container local-identity {
              description
                "Set the local IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The local IPv4 identity";
                  }
                }  // container inet
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The local hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The local user-FQDN";
                  }
                }  // container user-at-hostname
              }  // choice identity-type
            }  // container local-identity
    
            container remote-identity {
              description
                "Set the remote IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The remote IPv4 identity";
                  }
                }  // container inet
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The remote hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The remote user-FQDN";
                  }
                }  // container user-at-hostname
              }  // choice identity-type
            }  // container remote-identity
    
            leaf local-address {
              junos:must "(!(any "security group-vpn member ike gateway <*> server-address $$"))";
              junos:must-message "Member can not have the same local address as server";
              type jt:ipv4addr;
              description
                "Local IPv4 address for group member";
            }
    
            leaf routing-instance {
              junos:must "("routing-instances $$")";
              junos:must-message "Referenced routing-instance must be defined";
              type string;
              default "default";
              description
                "Name of routing instance that hosts local address";
            }
          }  // list gateway
        }  // grouping gvpn-member-ike
    
        grouping gvpn-ike-policy {
          leaf name {
            junos:must "((".. proposals" || ".. proposal-set"))";
            junos:must-message "IKE policy must have either proposals or proposal-set configured";
            junos:must "(((".. certificate local-certificate" || ".. pre-shared-key") && !((".. certificate local-certificate" && ".. pre-shared-key"))))";
            junos:must-message "IKE policy must have either local certificate or pre-shared key configured";
            type string {
              length "1 .. 32";
            }
            description "Name of policy";
          }
    
          uses apply-advanced;
    
          leaf mode {
            type enumeration {
              enum "main" {
                value 0;
                description "Main mode";
              }
              enum "aggressive" {
                value 1;
                description "Aggressive mode";
              }
            }
            default "main";
            description
              "Define the IKE mode for Phase 1";
          }
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IKE policy";
          }
    
          leaf-list proposals {
            junos:must "(".. .. .. proposal $$")";
            junos:must-message "Referenced proposal is not defined";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            ordered-by user;
            description "Name of the proposal";
          }
    
          container pre-shared-key {
            description "Define a preshared key";
            choice key-choice {
              leaf ascii-text {
                type string {
                  length "1 .. 255";
                }
                description "Format as text";
              }
              leaf hexadecimal {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  length "1 .. 255";
                }
                description
                  "Format as hexadecimal";
              }
            }  // choice key-choice
          }  // container pre-shared-key
        }  // grouping gvpn-ike-policy
    
        grouping gvpn-member-ike-proposal {
          leaf name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IKE proposal";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IKE proposal";
          }
    
          leaf authentication-method {
            type enumeration {
              enum "pre-shared-keys" {
                value 0;
                description "Preshared keys";
              }
            }
            description
              "Define authentication method";
          }
    
          leaf dh-group {
            type enumeration {
              enum "group14" {
                value 0;
                description
                  "Diffie-Hellman Group 14";
              }
              enum "group24" {
                value 1;
                description
                  "Diffie-Hellman Group 24";
              }
            }
            description
              "Define Diffie-Hellman group";
          }
    
          leaf authentication-algorithm {
            type enumeration {
              enum "sha-256" {
                value 0;
                description
                  "SHA 256-bit authentication algorithm";
              }
              enum "sha-384" {
                value 1;
                description
                  "SHA 384-bit authentication algorithm";
              }
            }
            description
              "Define authentication algorithm";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "aes-128-cbc" {
                value 0;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 1;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 2;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
    
          leaf lifetime-seconds {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "180 .. 86400";
              }
            }
            units "seconds";
            default "180";
            description "Lifetime, in seconds";
          }
        }  // grouping gvpn-member-ike-proposal
    
        grouping gvpn-member-ipsec-vpn {
          uses apply-advanced;
    
          list vpn {
            key "name";
            ordered-by user;
            description "Define an IPSec VPN";
            uses ipsec-gvpn-member-template;
          }  // list vpn
        }  // grouping gvpn-member-ipsec-vpn
    
        grouping gvpn-server {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for Group VPN debug";
            uses gvpn-server-traceoptions;
          }  // container traceoptions
    
          container ike {
            description
              "Group VPN IKE configuration";
            uses gvpn-server-ike;
          }  // container ike
    
          container ipsec {
            description
              "Group VPN IPsec configuration";
            uses gvpn-server-ipsec-vpn;
          }  // container ipsec
    
          list group {
            key "name";
            max-elements 50;
            ordered-by user;
            description
              "Define a Group VPN group";
            uses gvpn-server-group-template;
          }  // list group
        }  // grouping gvpn-server
    
        grouping gvpn-server-group-template {
          description
            "Configure a Group VPN group";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Name of the group";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of Group VPN group";
          }
    
          leaf group-id {
            junos:must "((".. no-group-check" || unique "security group-vpn server group <*> group-id $$"))";
            junos:must-message "Group id must be unique among groups";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Enable Group VPN by defining group id";
          }
    
          leaf member-threshold {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Maximum number of members in this group";
          }
    
          container server-cluster {
            description
              "Enable server cluster for this group";
            uses gvpn-server-cluster;
          }  // container server-cluster
    
          list ike-gateway {
            key "name";
            ordered-by user;
            description
              "Name of the IKE gateway";
            uses gvpn-server-ike-gateway;
          }  // list ike-gateway
    
          leaf activation-time-delay {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 900";
              }
            }
            default "15";
            status deprecated;
            description
              "Configure delay in seconds for Group VPN key activation";
          }
    
          leaf anti-replay-time-window {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 60000";
              }
            }
            description
              "Configure Anti Replay time in milliseconds";
          }
    
          container server-member-communication {
            description
              "Configure Server to Member communication parameters";
            uses gvpn-server-member-communication;
          }  // container server-member-communication
    
          list ipsec-sa {
            key "name";
            ordered-by user;
            description
              "Define a Group VPN group SA";
            uses gvpn-server-group-ipsecsa;
          }  // list ipsec-sa
        }  // grouping gvpn-server-group-template
    
        grouping gvpn-server-cluster {
          description
            "Server-Cluster for group VPN";
          uses apply-advanced;
    
          leaf server-role {
            type enumeration {
              enum "root-server" {
                value 0;
                description "Root-server";
              }
              enum "sub-server" {
                value 1;
                description "Sub-server";
              }
            }
            description
              "Primary or backup server";
          }
    
          list ike-gateway {
            key "name";
            ordered-by user;
            description
              "Name of the IKE gateway";
            uses gvpn-server-ike-gateway-sc;
          }  // list ike-gateway
    
          leaf retransmission-period {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 60";
              }
            }
            default "10";
            description
              "Configure retransmission period in seconds Default :10";
          }
        }  // grouping gvpn-server-cluster
    
        grouping gvpn-server-group-ipsecsa {
          description
            "Configure a Group VPN group SA";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Name of the SA";
          }
    
          uses apply-advanced;
    
          leaf proposal {
            junos:must "("security group-vpn server ipsec proposal $$")";
            junos:must-message "Referenced proposal is not defined";
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IPsec proposal";
          }
    
          list match-policy {
            key "name";
            max-elements 10;
            ordered-by user;
            description
              "Configure a Group VPN group SA";
            uses gvpn-server-group-ipsecsa-match;
          }  // list match-policy
        }  // grouping gvpn-server-group-ipsecsa
    
        grouping gvpn-server-group-ipsecsa-match {
          description
            "Configure a Group VPN group SA policy";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Name of the policy";
          }
    
          uses apply-advanced;
    
          leaf source {
            type jt:ipv4prefix-mandatory;
            description
              "Specify the source IP address to be matched (0.0.0.0/0 for any)";
          }
    
          leaf destination {
            type jt:ipv4prefix-mandatory;
            description
              "Specify the destination IP address to be matched (0.0.0.0/0 for any)";
          }
    
          leaf source-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Specify the source port to be matched (0 for any)";
          }
    
          leaf destination-port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Specify the destination port to be matched (0 for any)";
          }
    
          leaf protocol {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 254";
              }
            }
            description
              "Specify the protocol number to be matched (0 for any)";
          }
        }  // grouping gvpn-server-group-ipsecsa-match
    
        grouping gvpn-server-ike {
          uses apply-advanced;
    
          list proposal {
            key "name";
            ordered-by user;
            description "Define an IKE proposal";
            uses gvpn-server-ike-proposal;
          }  // list proposal
    
          list policy {
            key "name";
            ordered-by user;
            description "Define an IKE policy";
            uses gvpn-ike-policy;
          }  // list policy
    
          list gateway {
            key "name";
            ordered-by user;
            description "Define an IKE gateway";
            leaf name {
              type string {
                length "1 .. 32";
              }
              description
                "Label for the remote (peer) gateway";
            }
    
            uses apply-advanced;
    
            leaf ike-policy {
              junos:must "(!(("security group-vpn server ike policy $$ mode main" && ("security group-vpn server ike policy $$ pre-shared-key" && ".. dynamic"))))";
              junos:must-message "Main mode for dynamic peer with Preshared key based authentication is not allowed";
              junos:must "("security group-vpn server ike policy $$")";
              junos:must-message "Referenced IKE policy must be defined under [edit security group-vpn server ike policy]";
              type string {
                length "1 .. 32";
              }
              description
                "Name of the IKE policy";
            }
    
            choice remote-identifier {
              leaf address {
                type string {
                  length "1 .. 32";
                }
                description "IP address of peer";
              }
              container dynamic {
                description
                  "Site to site peer with dynamic IP address";
                uses apply-advanced;
    
                choice remote-id-type {
                  leaf hostname {
                    type string;
                    description
                      "Use a fully-qualified domain name";
                  }
                  leaf inet {
                    type jt:ipv4addr;
                    description
                      "Use an IPV4 address to identify the dynamic peer";
                  }
                  leaf user-at-hostname {
                    type string;
                    description
                      "Use an e-mail address";
                  }
                }  // choice remote-id-type
              }  // container dynamic
            }  // choice remote-identifier
    
            container dead-peer-detection {
              presence
                "enable dead-peer-detection";
              description
                "Enable Dead Peer Detection between group-server-cluster servers";
              uses apply-advanced;
    
              choice mode {
                leaf always-send {
                  type empty;
                  description
                    "Send probes periodically regardless of incoming and outgoing data traffic ";
                }
              }  // choice mode
    
              leaf interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "10 .. 60";
                  }
                }
                units "seconds";
                default "10";
                description
                  "The time between DPD probe messages  Default :10";
              }
    
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 5";
                  }
                }
                default "5";
                description
                  "Maximum number of DPD retransmissions Default :5";
              }
            }  // container dead-peer-detection
    
            container local-identity {
              description
                "Set the local IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The local IPv4 identity";
                  }
                }  // container inet
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The local hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The local user-FQDN";
                  }
                }  // container user-at-hostname
              }  // choice identity-type
            }  // container local-identity
    
            container remote-identity {
              junos:must "(!(".. dynamic"))";
              junos:must-message "Since the remote gateway is dynamic, Define remote identity under dynamic";
              description
                "Set the remote IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The remote IPv4 identity";
                  }
                }  // container inet
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The remote hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The remote user-FQDN";
                  }
                }  // container user-at-hostname
              }  // choice identity-type
            }  // container remote-identity
    
            leaf local-address {
              type jt:ipaddr;
              description
                "Local IP address for IKE negotiations";
            }
    
            leaf routing-instance {
              junos:must "("routing-instances $$")";
              junos:must-message "Referenced routing-instance must be defined";
              type string;
              default "default";
              description
                "Name of routing instance that hosts local address";
            }
          }  // list gateway
        }  // grouping gvpn-server-ike
    
        grouping gvpn-server-ike-gateway {
          description
            "Configure a set of IKE gateways";
          leaf name {
            junos:must "(!("security group-vpn server ike gateway $$ dead-peer-detection"))";
            junos:must-message "Referenced IKE gateway must NOT be defined with dead-peer-detection";
            junos:must "("security group-vpn server ike gateway $$")";
            junos:must-message "Referenced IKE gateway must be defined under [edit security group-vpn server ike gateway]";
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IKE gateway";
          }
    
          uses apply-advanced;
        }  // grouping gvpn-server-ike-gateway
    
        grouping gvpn-server-ike-gateway-sc {
          description
            "Configure a set of IKE gateways";
          leaf name {
            junos:must "(!("security group-vpn server ike gateway $$ dynamic"))";
            junos:must-message "Referenced IKE gateway must not be dynamic gateway";
            junos:must "("security group-vpn server ike gateway $$ dead-peer-detection always-send")";
            junos:must-message "Referenced IKE gateway must be defined with dead-peer-detection always-send mode";
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IKE gateway";
          }
    
          uses apply-advanced;
        }  // grouping gvpn-server-ike-gateway-sc
    
        grouping gvpn-server-ike-proposal {
          leaf name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IKE proposal";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IKE proposal";
          }
    
          leaf authentication-method {
            type enumeration {
              enum "pre-shared-keys" {
                value 0;
                description "Preshared keys";
              }
            }
            description
              "Define authentication method";
          }
    
          leaf authentication-algorithm {
            type enumeration {
              enum "sha-256" {
                value 0;
                description
                  "SHA 256-bit authentication algorithm";
              }
              enum "sha-384" {
                value 1;
                description
                  "SHA 384-bit authentication algorithm";
              }
            }
            description
              "Define authentication algorithm";
          }
    
          leaf dh-group {
            type enumeration {
              enum "group14" {
                value 0;
                description
                  "Diffie-Hellman Group 14";
              }
              enum "group24" {
                value 1;
                description
                  "Diffie-Hellman Group 24";
              }
            }
            description
              "Define Diffie-Hellman group";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "aes-128-cbc" {
                value 0;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 1;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 2;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
        }  // grouping gvpn-server-ike-proposal
    
        grouping gvpn-server-ipsec-vpn {
          uses apply-advanced;
    
          list proposal {
            key "name";
            ordered-by user;
            description
              "Define an IPSec proposal";
            uses gvpn-server-ipsec-proposal;
          }  // list proposal
        }  // grouping gvpn-server-ipsec-vpn
    
        grouping gvpn-server-ipsec-proposal {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            description
              "Name of the IPSec proposal";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IPSec proposal";
          }
    
          leaf authentication-algorithm {
            type enumeration {
              enum "hmac-sha-256-128" {
                value 0;
                description
                  "HMAC-SHA-256-128 authentication algorithm";
              }
            }
            description
              "Define authentication algorithm";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "aes-128-cbc" {
                value 0;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 1;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 2;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
    
          leaf lifetime-seconds {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "180 .. 86400";
              }
            }
            units "seconds";
            description "Lifetime, in seconds";
          }
        }  // grouping gvpn-server-ipsec-proposal
    
        grouping gvpn-server-member-communication {
          description
            "Group VPN Server to Member communication";
          uses apply-advanced;
    
          leaf communication-type {
            type enumeration {
              enum "unicast" {
                value 0;
                description "Unicast";
              }
            }
            description
              "Define type of server member communication";
          }
    
          leaf lifetime-seconds {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "300 .. 86400";
              }
            }
            default "3600";
            description
              "Configure lifetime in seconds";
          }
    
          leaf retransmission-period {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 60";
              }
            }
            default "10";
            description
              "Configure retransmission period in seconds";
          }
    
          leaf number-of-retransmission {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 60";
              }
            }
            default "2";
            description
              "Configure maximum number of retransmission attempts";
          }
    
          leaf heartbeat {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "60 .. 3600";
              }
            }
            default "300";
            status deprecated;
            description
              "Configure heartbeat period in seconds";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "aes-128-cbc" {
                value 0;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 1;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 2;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
    
          leaf sig-hash-algorithm {
            type enumeration {
              enum "sha-256" {
                value 0;
                description
                  "SHA 256-bit sig-hash algorithm";
              }
              enum "sha-384" {
                value 1;
                description
                  "SHA 384-bit sig-hash algorithm";
              }
            }
            description
              "Define sig-hash algorithm";
          }
    
          leaf certificate {
            type string {
              junos:posix-pattern "^.{1,32}$";
              junos:pattern-message "Must be string of 32 characters or less";
            }
            description "Certificate identifier";
          }
        }  // grouping gvpn-server-member-communication
    
        grouping gvpn-server-traceoptions {
          description
            "Group VPN server tracing 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
    
          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 for GKSD";
            leaf name {
              type enumeration {
                enum "timer" {
                  value 0;
                  description
                    "Trace internal timer events";
                }
                enum "routing-socket" {
                  value 1;
                  description
                    "Trace routing socket messages";
                }
                enum "parse" {
                  value 2;
                  description
                    "Trace configuration processing";
                }
                enum "config" {
                  value 3;
                  description
                    "Trace configuration download processing";
                }
                enum "ike" {
                  value 4;
                  description
                    "Trace IKE module processing";
                }
                enum "policy-manager" {
                  value 5;
                  description
                    "Trace policy manager processing";
                }
                enum "general" {
                  value 6;
                  description
                    "Trace general events";
                }
                enum "database" {
                  value 7;
                  description
                    "Trace security associations database events";
                }
                enum "certificates" {
                  value 8;
                  description
                    "Trace certificate events";
                }
                enum "snmp" {
                  value 9;
                  description
                    "Trace SNMP operations";
                }
                enum "thread" {
                  value 10;
                  description
                    "Trace thread processing";
                }
                enum "high-availability" {
                  value 11;
                  description
                    "Trace high-availability operations";
                }
                enum "next-hop-tunnels" {
                  value 12;
                  description
                    "Trace next-hop-tunnels operations";
                }
                enum "all" {
                  value 13;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
    
          container gateway-filter {
            description
              "Set gateway filter for trace";
            uses apply-advanced;
    
            leaf local-address {
              type jt:ipv4addr;
              description
                "Use an IPV4 address to identify the local gateway";
            }
    
            leaf remote-address {
              type jt:ipv4addr;
              description
                "Use an IPV4 address to identify the remote gateway";
            }
          }  // container gateway-filter
        }  // grouping gvpn-server-traceoptions
    
        grouping ipsec-gvpn-member-template {
          description "Configure a Group VPN";
          leaf name {
            junos:must "(!("security ipsec vpn $$"))";
            junos:must-message "VPN already defined under [security ipsec]";
            type string {
              length "1 .. 32";
            }
            description "Name of the VPN";
          }
    
          uses apply-advanced;
    
          leaf ike-gateway {
            junos:must "("security group-vpn member ike gateway $$")";
            junos:must-message "Referenced IKE gateway must be defined under [edit security group-vpn member ike gateway]";
            type string {
              length "1 .. 32";
            }
            description "Name of IKE gateway";
          }
    
          leaf group-vpn-external-interface {
            junos:must "(!("interfaces $$ family bridge"))";
            junos:must-message "Bridge interface is not allowed as external-interface";
            junos:must "("interfaces $$-IFL")";
            junos:must-message "Referenced interface must be configured under [edit interfaces] hierarchy";
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "External interface for Group VPN";
          }
    
          leaf group {
            junos:must "((".. no-group-check" || unique "security group-vpn member ipsec vpn <*> group $$"))";
            junos:must-message "Group id must be unique among group vpns";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Enable Group VPN by defining group id";
          }
    
          leaf heartbeat-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 10";
              }
            }
            default "3";
            status deprecated;
            description
              "Define heartbeat threshold for Group VPN";
          }
    
          leaf recovery-probe {
            type empty;
            description
              "Enable triggering recovery probe mechanism";
          }
    
          leaf df-bit {
            type enumeration {
              enum "clear" {
                value 0;
                description
                  "Clear DF bit of outer header";
              }
              enum "set" {
                value 1;
                description
                  "Set DF bit of outer header";
              }
              enum "copy" {
                value 2;
                description
                  "Copy DF bit from inner header";
              }
            }
            default "clear";
            description
              "Specifies how to handle the Don't Fragment bit";
          }
    
          container fail-open {
            description
              "List of fail open rules";
            uses ipsec_gvpn_fail_open_rule_object;
          }  // container fail-open
    
          container exclude {
            description "List of exclude rules";
            uses ipsec_gvpn_exclude_rule_object;
          }  // container exclude
        }  // grouping ipsec-gvpn-member-template
    
        grouping ipsec_gvpn_exclude_rule_object {
          uses apply-advanced;
    
          list rule {
            key "name";
            max-elements 10;
            ordered-by user;
            description
              "Define exlude rules upto 10";
            uses ipsec_gvpn_rule_address_object;
          }  // list rule
        }  // grouping ipsec_gvpn_exclude_rule_object
    
        grouping ipsec_gvpn_fail_open_rule_object {
          uses apply-advanced;
    
          list rule {
            key "name";
            max-elements 10;
            ordered-by user;
            description
              "Define fail open rules upto 10";
            uses ipsec_gvpn_rule_address_object;
          }  // list rule
        }  // grouping ipsec_gvpn_fail_open_rule_object
    
        grouping ipsec_gvpn_rule_address_object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Rule name";
          }
    
          uses apply-advanced;
    
          container source-address {
            presence "enable source-address";
            description
              "Match IP source address";
            uses ipsec_gvpn_addr_object;
          }  // container source-address
    
          container destination-address {
            presence
              "enable destination-address";
            description
              "Match IP destination address";
            uses ipsec_gvpn_addr_object;
          }  // container destination-address
    
          leaf application {
            junos:must "("applications application $$")";
            junos:must-message "Application must be defined";
            type string;
            description "Match application";
          }
        }  // grouping ipsec_gvpn_rule_address_object
    
        grouping ipsec_gvpn_addr_object {
          uses apply-advanced;
    
          leaf address {
            type jt:ipv4prefix-only;
            description "Prefix to match";
          }
        }  // grouping ipsec_gvpn_addr_object
    
        grouping security-ike {
          uses apply-advanced;
    
          container traceoptions {
            description
              "Trace options for IPSec key management";
            uses security-traceoptions;
          }  // container traceoptions
    
          container respond-bad-spi {
            presence "enable respond-bad-spi";
            description
              "Respond to IPSec packets with bad SPI values";
            leaf max-responses {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 30";
                }
              }
              default "5";
              description
                "Maximum number of times to respond";
            }
          }  // container respond-bad-spi
    
          list proposal {
            key "name";
            ordered-by user;
            description "Define an IKE proposal";
            uses ike-proposal;
          }  // list proposal
    
          list policy {
            key "name";
            ordered-by user;
            description "Define an IKE policy";
            uses ike-policy;
          }  // list policy
    
          list gateway {
            key "name";
            ordered-by user;
            description "Define an IKE gateway";
            leaf name {
              type string {
                length "1 .. 32";
              }
              description
                "Label for the remote (peer) gateway";
            }
    
            uses apply-advanced;
    
            leaf ike-policy {
              junos:must "(!(("security ike policy $$ reauth-frequency" && ".. aaa access-profile")))";
              junos:must-message "Reauth is not allowed with AAA access profile.";
              junos:must "(!((".. version v2-only" && ("security ike policy $$ pre-shared-key" && ".. dynamic ike-user-type"))))";
              junos:must-message "When dynamic ike-user-type is configured, IKEv2 with authentication-method pre-shared-key is not allowed";
              junos:must "(!(("security ike policy $$ mode main" && ("security ike policy $$ pre-shared-key" && ".. dynamic"))))";
              junos:must-message "Main mode for dynamic peer with Preshared key based authentication is not allowed";
              junos:must "("security ike policy $$")";
              junos:must-message "Referenced IKE policy must be defined under [edit security ike policy]";
              type string {
                length "1 .. 32";
              }
              description
                "Name of the IKE policy";
            }
    
            choice remote-identifier {
              leaf-list address {
                type string;
                ordered-by user;
                description
                  "Addresses or hostnames of peer:1 primary, upto 4 backups";
              }
              container dynamic {
                description
                  "Site to site peer with dynamic IP address";
                uses apply-advanced;
    
                choice remote-id-type {
                  container distinguished-name {
                    presence
                      "enable distinguished-name";
                    description
                      "Use a distinguished name: ";
                    uses apply-advanced;
    
                    choice name-type {
                      leaf container {
                        type string;
                        description
                          "Specify the container string";
                      }
                      leaf wildcard {
                        type string;
                        description
                          "Specify the wildcard string";
                      }
                    }  // choice name-type
                  }  // container distinguished-name
                  leaf hostname {
                    type string;
                    description
                      "Use a fully-qualified domain name";
                  }
                  leaf inet {
                    type jt:ipv4addr;
                    description
                      "Use an IPV4 address to identify the dynamic peer";
                  }
                  leaf inet6 {
                    type jt:ipv6addr;
                    description
                      "Use an IPV6 address to identify the dynamic peer";
                  }
                  leaf user-at-hostname {
                    type string;
                    description
                      "Use an e-mail address";
                  }
                }  // choice remote-id-type
    
                leaf connections-limit {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Maximum number of users connected to gateway";
                }
    
                leaf ike-user-type {
                  type enumeration {
                    enum "group-ike-id" {
                      value 0;
                      description
                        "Email address or FQDN shared as IKED ID by multiple users";
                    }
                    enum "shared-ike-id" {
                      junos:must "((" .. .. xauth" || " .. .. aaa"))";
                      junos:must-message "Need to configure aaa at [edit security ike gateway]";
                      value 1;
                      description
                        "Email address shared as IKED ID by multiple users";
                    }
                  }
                  description
                    "Type of the IKE ID";
                }
    
                leaf reject-duplicate-connection {
                  junos:must "(((".. ike-user-type shared-ike-id" || ".. ike-user-type group-ike-id") && !(".. .. aaa")))";
                  junos:must-message "Supported for shared-ike or group-ike and with non-AAA";
                  type empty;
                  description
                    "Reject new connection from duplicate IKE-id";
                }
              }  // container dynamic
            }  // choice remote-identifier
    
            container dead-peer-detection {
              presence
                "enable dead-peer-detection";
              description
                "Enable Dead Peer Detection ";
              uses apply-advanced;
    
              choice mode {
                leaf optimized {
                  type empty;
                  description
                    "Send probes only when there is outgoing and no incoming data traffic - RFC3706 (Default mode)";
                }
                leaf probe-idle-tunnel {
                  type empty;
                  description
                    "Send probes same as in optimized mode and also when there is no outgoing & incoming data traffic";
                }
                leaf always-send {
                  type empty;
                  description
                    "Send probes periodically regardless of incoming and outgoing data traffic ";
                }
              }  // choice mode
    
              leaf interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 60";
                  }
                }
                units "seconds";
                default "10";
                description
                  "The time between DPD probe messages  Default :10";
              }
    
              leaf threshold {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 5";
                  }
                }
                default "5";
                description
                  "Maximum number of DPD retransmissions Default :5";
              }
            }  // container dead-peer-detection
    
            leaf no-nat-traversal {
              type empty;
              description
                "Disable IPSec NAT traversal";
            }
    
            leaf nat-keepalive {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 300";
                }
              }
              units "seconds";
              default "20";
              description
                "Interval at which to send NAT keepalives";
            }
    
            container local-identity {
              description
                "Set the local IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The local IPv4 identity";
                  }
                }  // container inet
                container inet6 {
                  description
                    "Use an IPv6 address";
                  uses apply-advanced;
    
                  leaf identity-ipv6 {
                    type jt:ipv6addr;
                    description
                      "The local IPv6 identity";
                  }
                }  // container inet6
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The local hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The local user-FQDN";
                  }
                }  // container user-at-hostname
                leaf distinguished-name {
                  type empty;
                  description
                    "Use a distinguished name specified in local certificate";
                }
                container key-id {
                  description
                    "Key ID identification values in ASCII string";
                  uses apply-advanced;
    
                  leaf string-key-id {
                    type string {
                      length "1 .. 127";
                    }
                    description
                      "Key ID in ASCII string";
                  }
                }  // container key-id
              }  // choice identity-type
            }  // container local-identity
    
            container remote-identity {
              junos:must "(!(".. dynamic"))";
              junos:must-message "Since the remote gateway is dynamic, Define remote identity under dynamic";
              description
                "Set the remote IKE identity";
              choice identity-type {
                container inet {
                  description
                    "Use an IPv4 address";
                  uses apply-advanced;
    
                  leaf identity-ipv4 {
                    type jt:ipv4addr;
                    description
                      "The remote IPv4 identity";
                  }
                }  // container inet
                container inet6 {
                  description
                    "Use an IPv6 address";
                  uses apply-advanced;
    
                  leaf identity-ipv6 {
                    type jt:ipv6addr;
                    description
                      "The remote IPv6 identity";
                  }
                }  // container inet6
                container hostname {
                  description
                    "Use a fully-qualified domain name";
                  uses apply-advanced;
    
                  leaf identity-hostname {
                    type string;
                    description
                      "The remote hostname";
                  }
                }  // container hostname
                container user-at-hostname {
                  description
                    "Use an e-mail address";
                  uses apply-advanced;
    
                  leaf identity-user {
                    type string;
                    description
                      "The remote user-FQDN";
                  }
                }  // container user-at-hostname
                container distinguished-name {
                  presence
                    "enable distinguished-name";
                  description
                    "Use a distinguished name: ";
                  uses apply-advanced;
    
                  leaf container {
                    type string;
                    description
                      "Specify the container string";
                  }
    
                  leaf wildcard {
                    type string;
                    description
                      "Specify the wildcard string";
                  }
                }  // container distinguished-name
                container key-id {
                  description
                    "Key ID identification values in string";
                  uses apply-advanced;
    
                  leaf string-key-id {
                    type string {
                      length "1 .. 127";
                    }
                    description
                      "Key ID in ASCII string";
                  }
                }  // container key-id
              }  // choice identity-type
            }  // container remote-identity
    
            leaf external-interface {
              junos:must "(!("interfaces $$ family bridge"))";
              junos:must-message "Bridge interface is not allowed as external-interface";
              junos:must "("interfaces $$-IFL")";
              junos:must-message "Referenced interface must be configured under [edit interfaces] hierarchy";
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "External interface for IKE negotiations";
            }
    
            leaf local-address {
              type jt:ipaddr;
              description
                "Local IP address for IKE negotiations";
            }
    
            container aaa {
              junos:must "(!(".. xauth"))";
              junos:must-message "Keyword aaa is a replacement to xauth.";
              description
                "Use extended authentication";
              uses apply-advanced;
    
              list access-profile {
                key "name";
                max-elements 1;
                ordered-by user;
                description
                  "Access profile information";
                uses access-profile-template;
              }  // list access-profile
    
              container client {
                description
                  "AAA client info for authentication";
                leaf username {
                  junos:must "(!(" .. .. .. version v2-only"))";
                  junos:must-message "AAA client is supported for IKEv1 only, not IKEv2.";
                  type string {
                    length "1 .. 128";
                  }
                  description
                    "AAA client username with 1 to 128 characters";
                }
    
                leaf password {
                  junos:must "(".. username")";
                  junos:must-message "Username must be defined";
                  type string {
                    length "1 .. 128";
                  }
                  description
                    "AAA client password with 1 to 128 characters";
                }
              }  // container client
            }  // container aaa
    
            container xauth {
              status deprecated;
              description
                "Use extended authentication";
              uses apply-advanced;
    
              leaf access-profile {
                junos:must "(!(" .. client"))";
                junos:must-message "Cannot configure a gateway to be xauth server and client at the same time.";
                junos:must "("access profile $$")";
                junos:must-message "access profile needs to be configured";
                type string;
                description
                  "Access profile that contains authentication information";
              }
    
              container client {
                description
                  "Xauth client info for authentication";
                leaf username {
                  junos:must "(!(" .. .. .. version v2-only"))";
                  junos:must-message "Xauth is supported for IKEv1 only, not IKEv2.";
                  type string {
                    length "1 .. 128";
                  }
                  description
                    "XAuth client username with 1 to 128 characters";
                }
    
                leaf password {
                  junos:must "(".. username")";
                  junos:must-message "username must be defined";
                  type string {
                    length "1 .. 128";
                  }
                  description
                    "XAuth client password with 1 to 128 characters";
                }
              }  // container client
            }  // container xauth
    
            leaf general-ikeid {
              junos:must "(!(".. remote-identity"))";
              junos:must-message "general-ikeid option is not allowed when remote-identity is configured";
              junos:must "(!(".. dynamic"))";
              junos:must-message "general-ikd-id option is not available for dynamic peer.";
              type empty;
              description
                "Accept peer IKE-ID in general";
            }
    
            container advpn {
              junos:must "((!(".. xauth") && !(".. aaa")))";
              junos:must-message "AAA not available with advpn enabled gateway";
              presence "enable advpn";
              description
                "Enable Auto Discovery VPN";
              uses advpn-suggester-partner;
            }  // container advpn
    
            leaf version {
              type enumeration {
                enum "v1-only" {
                  value 0;
                  description
                    "The connection must be initiated using IKE version 1";
                }
                enum "v2-only" {
                  value 1;
                  description
                    "The connection must be initiated using IKE version 2";
                }
              }
              default "v1-only";
              description
                "Negotiate using either IKE v1 or IKE v2 protocol";
            }
    
            container fragmentation {
              junos:must "(".. version v2-only")";
              junos:must-message "IKEv2 must be configured to use fragementation.";
              description
                "IKEv2 fragmentation configuration";
              uses apply-advanced;
    
              leaf disable {
                type empty;
                description
                  "Disable IKEv2 fragmentation";
              }
    
              leaf size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "570 .. 1320";
                  }
                }
                description
                  "Default 576 bytes for ipv4 and 1280 bytes for ipv6";
              }
            }  // container fragmentation
    
            leaf tcp-encap-profile {
              junos:must "("security tcp-encap profile $$")";
              junos:must-message "Referenced tcp-encap profile must be defined";
              type string;
              description
                "Ike over tcp profile name";
            }
          }  // list gateway
        }  // grouping security-ike
    
        grouping access-profile-template {
          description
            "Configure an access profile";
          leaf name {
            junos:must "((!(".. .. .. dynamic") || ".. .. .. dynamic ike-user-type"))";
            junos:must-message "DEP is not allowed with XAUTH/AAA access profile.";
            junos:must "(!(".. .. .. address"))";
            junos:must-message "For site-to-site tunnels, aaa access-profile configuration is not allowed";
            junos:must "(!(" .. .. client"))";
            junos:must-message "Cannot configure a gateway to be XAUTH/AAA server and client at the same time.";
            junos:must "("access profile $$")";
            junos:must-message "Access profile needs to be configured";
            type string;
            description
              "Access profile name used to authenticate with XAUTH/AAA server";
          }
    
          uses apply-advanced;
    
          leaf config-payload-password {
            type string {
              length "1 .. 128";
            }
            description
              "Common client password for IKEv2 config-payload with 1 to 128 characters";
          }
        }  // grouping access-profile-template
    
        grouping advpn-suggester-partner {
          description
            "Configure ADVPN Suggester Partner";
          uses apply-advanced;
    
          container suggester {
            presence "enable suggester";
            description
              "Configure Shortcut Suggester parameters";
            uses apply-advanced;
    
            leaf disable {
              type empty;
              description
                "Disable Suggester capability";
            }
          }  // container suggester
    
          container partner {
            presence "enable partner";
            description
              "Configure Shortcut Partner parameters";
            uses apply-advanced;
    
            leaf connection-limit {
              junos:must "(!(".. .. .. dynamic"))";
              junos:must-message "ADVPN partner can only be configured on s2s gateway";
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Maximum number of shortcut connections (default: varies per platform)";
            }
    
            leaf idle-time {
              junos:must "(!(".. .. .. dynamic"))";
              junos:must-message "ADVPN partner can only be configured on s2s gateway";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "60 .. 86400";
                }
              }
              units "seconds";
              default "300";
              description
                "The duration (in sec) after which shortcut is torn down (default: 300 sec)";
            }
    
            leaf idle-threshold {
              junos:must "(!(".. .. .. dynamic"))";
              junos:must-message "ADVPN partner can only be configured on s2s gateway";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3 .. 5000";
                }
              }
              default "5";
              description
                "The packet rate below which shortcut is torn down (default: 5 packets/sec)";
            }
    
            leaf disable {
              type empty;
              description
                "Disable Partner capability";
            }
          }  // container partner
        }  // grouping advpn-suggester-partner
    
        grouping ike-policy {
          leaf name {
            junos:must "(((".. certificate local-certificate" || ".. pre-shared-key") && !((".. certificate local-certificate" && ".. pre-shared-key"))))";
            junos:must-message "IKE policy must have either local certificate or pre-shared key configured";
            type string {
              length "1 .. 32";
            }
            description "Name of policy";
          }
    
          uses apply-advanced;
    
          leaf mode {
            type enumeration {
              enum "main" {
                value 0;
                description "Main mode";
              }
              enum "aggressive" {
                value 1;
                description "Aggressive mode";
              }
            }
            default "main";
            description
              "Define the IKE mode for Phase 1";
          }
    
          leaf reauth-frequency {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            default "0";
            description
              "Re-auth Peer after reauth-frequency times hard lifetime. (0-100) Default:0=Disabled";
          }
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IKE policy";
          }
    
          leaf-list proposals {
            junos:must "(".. .. .. proposal $$")";
            junos:must-message "Referenced proposal is not defined";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            ordered-by user;
            description "Name of the proposal";
          }
    
          container certificate {
            description
              "Certificate configuration";
            uses apply-advanced;
    
            leaf local-certificate {
              type string {
                junos:posix-pattern "^.{1,32}$";
                junos:pattern-message "Must be string of 32 characters or less";
              }
              description
                "Local certificate identifier";
            }
    
            container trusted-ca {
              description
                "Specify the CA to use";
              choice ca {
                leaf ca-index {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  status deprecated;
                  description
                    "Index of the preferred CA to use";
                }
                leaf use-all {
                  type empty;
                  status deprecated;
                  description
                    "Use all configured CAs";
                }
                leaf ca-profile {
                  junos:must "("security pki ca-profile $$")";
                  junos:must-message "Referenced profile must be defined under [edit security pki ca-profile]";
                  type string;
                  description
                    "Name of the preferred CA to use";
                }
                leaf trusted-ca-group {
                  junos:must "("security pki trusted-ca-group $$")";
                  junos:must-message "Referenced group must be defined under [edit security pki trusted-ca-group]";
                  type string;
                  description
                    "Name of the preferred CA group to use";
                }
              }  // choice ca
            }  // container trusted-ca
    
            leaf peer-certificate-type {
              type enumeration {
                enum "pkcs7" {
                  value 0;
                  description "PKCS7 encoding";
                }
                enum "x509-signature" {
                  value 1;
                  description
                    "X509 signature encoding";
                }
              }
              default "x509-signature";
              description
                "Preferred type of certificate from peer";
            }
    
            leaf-list policy-oids {
              type string {
                length "1 .. 63";
              }
              max-elements 5;
              ordered-by user;
              description
                "Certificate policy object identifiers (maximum 5)";
            }
          }  // container certificate
    
          leaf proposal-set {
            type enumeration {
              enum "basic" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 0;
                description
                  "IKE proposal-set for basic";
              }
              enum "compatible" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 1;
                description
                  "IKE proposal-set for compatible";
              }
              enum "standard" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 2;
                description
                  "IKE proposal-set for standard";
              }
              enum "suiteb-gcm-128" {
                junos:must "((".. certificate local-certificate" && !(".. pre-shared-key")))";
                junos:must-message "Suite B proposal-sets require certificate-based authentication.";
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 3;
                description
                  "IKE proposal-set for Suite-B-GCM-128";
              }
              enum "suiteb-gcm-256" {
                junos:must "((".. certificate local-certificate" && !(".. pre-shared-key")))";
                junos:must-message "Suite B proposal-sets require certificate-based authentication.";
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 4;
                description
                  "IKE proposal-set for Suite-B-GCM-256";
              }
              enum "prime-128" {
                junos:must "((".. certificate local-certificate" && !(".. pre-shared-key")))";
                junos:must-message "PRIME proposal-sets require certificate-based authentication.";
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 5;
                description
                  "IKE proposal-set for PRIME-128";
              }
              enum "prime-256" {
                junos:must "((".. certificate local-certificate" && !(".. pre-shared-key")))";
                junos:must-message "PRIME proposal-sets require certificate-based authentication.";
                junos:must "(!(".. proposals"))";
                junos:must-message "IKE policy must not have both proposals and proposal-set configured";
                value 6;
                description
                  "IKE proposal-set for PRIME-256";
              }
            }
            description
              "Types of default IKE proposal-set";
          }
    
          container pre-shared-key {
            description "Define a preshared key";
            choice key-choice {
              leaf ascii-text {
                type string {
                  length "1 .. 255";
                }
                description "Format as text";
              }
              leaf hexadecimal {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  length "1 .. 255";
                }
                description
                  "Format as hexadecimal";
              }
            }  // choice key-choice
          }  // container pre-shared-key
        }  // grouping ike-policy
    
        grouping ike-proposal {
          leaf name {
            type string {
              length "1 .. 32";
            }
            description
              "Name of the IKE proposal";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IKE proposal";
          }
    
          leaf authentication-method {
            type enumeration {
              enum "pre-shared-keys" {
                value 0;
                description "Preshared keys";
              }
              enum "rsa-signatures" {
                value 1;
                description "RSA signatures";
              }
              enum "dsa-signatures" {
                value 2;
                description "DSA signatures";
              }
              enum "ecdsa-signatures-256" {
                value 3;
                description
                  "ECDSA signatures (256 bit modulus)";
              }
              enum "ecdsa-signatures-384" {
                value 4;
                description
                  "ECDSA signatures (384 bit modulus)";
              }
            }
            description
              "Define authentication method";
          }
    
          leaf dh-group {
            type enumeration {
              enum "group1" {
                value 0;
                description
                  "Diffie-Hellman Group 1";
              }
              enum "group2" {
                value 1;
                description
                  "Diffie-Hellman Group 2";
              }
              enum "group5" {
                value 2;
                description
                  "Diffie-Hellman Group 5";
              }
              enum "group14" {
                value 3;
                description
                  "Diffie-Hellman Group 14";
              }
              enum "group15" {
                value 4;
                description
                  "Diffie-Hellman Group 15";
              }
              enum "group16" {
                value 5;
                description
                  "Diffie-Hellman Group 16";
              }
              enum "group19" {
                value 6;
                description
                  "Diffie-Hellman Group 19";
              }
              enum "group20" {
                value 7;
                description
                  "Diffie-Hellman Group 20";
              }
              enum "group24" {
                value 8;
                description
                  "Diffie-Hellman Group 24";
              }
            }
            description
              "Define Diffie-Hellman group";
          }
    
          leaf authentication-algorithm {
            type enumeration {
              enum "md5" {
                value 0;
                description
                  "MD5 authentication algorithm";
              }
              enum "sha1" {
                value 1;
                description
                  "SHA1 authentication algorithm";
              }
              enum "sha-256" {
                value 2;
                description
                  "SHA 256-bit authentication algorithm";
              }
              enum "sha-384" {
                value 3;
                description
                  "SHA 384-bit authentication algorithm";
              }
            }
            description
              "Define authentication algorithm";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "des-cbc" {
                value 0;
                description
                  "DES-CBC encryption algorithm";
              }
              enum "3des-cbc" {
                value 1;
                description
                  "3DES-CBC encryption algorithm";
              }
              enum "aes-128-cbc" {
                value 2;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 3;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 4;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
              enum "aes-128-gcm" {
                junos:must "(!(".. authentication-algorithm"))";
                junos:must-message "When using aes-gcm for Encryption the Authentication Algorithm must not be set.";
                value 5;
                description
                  "AES-GCM 128-bit encryption algorithm";
              }
              enum "aes-256-gcm" {
                junos:must "(!(".. authentication-algorithm"))";
                junos:must-message "When using aes-gcm for Encryption the Authentication Algorithm must not be set.";
                value 6;
                description
                  "AES-GCM 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
    
          leaf lifetime-seconds {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "180 .. 86400";
              }
            }
            units "seconds";
            description "Lifetime, in seconds";
          }
        }  // grouping ike-proposal
    
        grouping security-ipsec-policies {
          uses apply-advanced;
    
          list from-zone {
            key "from-zone-name to-zone";
            ordered-by user;
            description
              "Define ipsec policy context";
            uses security-ipsec-policy;
          }  // list from-zone
        }  // grouping security-ipsec-policies
    
        grouping security-ipsec-policy {
          leaf from-zone-name {
            junos:must "("security zones security-zone $$")";
            junos:must-message "Security zone must be defined";
            type string {
              length "1 .. 63";
            }
            description "Incoming zone";
          }
    
          leaf to-zone {
            junos:must "("security zones security-zone $$")";
            junos:must-message "Security zone must be defined";
            type string {
              length "1 .. 63";
            }
            description "Outgoing zone";
          }
    
          uses apply-advanced;
    
          leaf ipsec-group-vpn {
            junos:must "(unique "security ipsec-policy from-zone <*> to-zone <*> ipsec-group-vpn $$")";
            junos:must-message "Group VPN can only be referenced by one pair of from-zone and to-zone";
            junos:must "("security group-vpn member ipsec vpn $$")";
            junos:must-message "Group VPN must be defined";
            type string {
              length "1 .. 32";
            }
            description "Group VPN name";
          }
        }  // grouping security-ipsec-policy
    
        grouping security-ipsec-vpn {
          uses apply-advanced;
    
          container internal {
            presence "enable internal";
            description
              "Define an IPSec SA for internal RE-RE communication";
            uses apply-advanced;
    
            container security-association {
              presence
                "enable security-association";
              description
                "Define an IPsec security association";
              uses ipsec-internal-sa;
            }  // container security-association
          }  // container internal
    
          container traceoptions {
            description
              "Trace options for IPSec data-plane debug";
            uses ipsec-traceoptions;
          }  // container traceoptions
    
          container vpn-monitor-options {
            presence
              "enable vpn-monitor-options";
            description
              "Global options for VPN liveliness monitoring";
            uses ipsec-vpn-monitor;
          }  // container vpn-monitor-options
    
          list proposal {
            key "name";
            ordered-by user;
            description
              "Define an IPSec proposal";
            uses ipsec-proposal;
          }  // list proposal
    
          list policy {
            key "name";
            ordered-by user;
            description "Define an IPSec policy";
            uses ipsec-policy;
          }  // list policy
    
          list vpn {
            key "name";
            ordered-by user;
            description "Define an IPSec VPN";
            uses ipsec-vpn-template;
          }  // list vpn
    
          list security-association {
            key "name";
            ordered-by user;
            description
              "Define a manual control plane SA ";
            uses ipsec-sa;
          }  // list security-association
        }  // grouping security-ipsec-vpn
    
        grouping ipsec-internal-sa {
          uses apply-advanced;
    
          container manual {
            description
              "Define a manual security association";
            uses apply-advanced;
    
            container encryption {
              description
                "Define encryption parameters";
              uses apply-advanced;
    
              leaf algorithm {
                type enumeration {
                  enum "3des-cbc" {
                    value 0;
                    description
                      "3DES-CBC encryption algorithm";
                  }
                  enum "aes-128-cbc" {
                    value 1;
                    description
                      "AES-CBC 128-bit encryption algorithm";
                  }
                }
                description
                  "Define encryption algorithm";
              }
    
              leaf ike-ha-link-encryption {
                type enumeration {
                  enum "enable" {
                    value 0;
                    description
                      "Enable HA link encryption IKE internal messages";
                  }
                }
                description
                  "Enable HA link encryption IKE internal messages";
              }
    
              container key {
                description
                  "Define an encryption key";
                choice key-choice {
                  leaf ascii-text {
                    type jt:unreadable;
                    description "Format as text";
                  }
                }  // choice key-choice
              }  // container key
            }  // container encryption
          }  // container manual
        }  // grouping ipsec-internal-sa
    
        grouping ipsec-policy {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            description
              "Name of the IPSec policy";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IPSec policy";
          }
    
          container perfect-forward-secrecy {
            description
              "Define perfect forward secrecy";
            uses apply-advanced;
    
            leaf keys {
              type enumeration {
                enum "group1" {
                  value 0;
                  description
                    "Diffie-Hellman Group 1";
                }
                enum "group2" {
                  value 1;
                  description
                    "Diffie-Hellman Group 2";
                }
                enum "group5" {
                  value 2;
                  description
                    "Diffie-Hellman Group 5";
                }
                enum "group14" {
                  value 3;
                  description
                    "Diffie-Hellman Group 14";
                }
                enum "group15" {
                  value 4;
                  description
                    "Diffie-Hellman Group 15";
                }
                enum "group16" {
                  value 5;
                  description
                    "Diffie-Hellman Group 16";
                }
                enum "group19" {
                  value 6;
                  description
                    "Diffie-Hellman Group 19";
                }
                enum "group20" {
                  value 7;
                  description
                    "Diffie-Hellman Group 20";
                }
                enum "group24" {
                  value 8;
                  description
                    "Diffie-Hellman Group 24";
                }
              }
              description
                "Define Diffie-Hellman group";
            }
          }  // container perfect-forward-secrecy
    
          leaf-list proposals {
            junos:must "(".. .. .. proposal $$")";
            junos:must-message "Referenced proposal is not defined";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            ordered-by user;
            description "Name of the proposal";
          }
    
          leaf proposal-set {
            type enumeration {
              enum "basic" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 0;
                description
                  "IPSEC basic proposal-set";
              }
              enum "compatible" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 1;
                description
                  "IPSEC compatible proposal-set";
              }
              enum "standard" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 2;
                description
                  "IPSEC standard proposal-set";
              }
              enum "suiteb-gcm-128" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 3;
                description
                  "IPSec proposal-set for Suite-B-GCM-128";
              }
              enum "suiteb-gcm-256" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 4;
                description
                  "IPSec proposal-set for Suite-B-GCM-256";
              }
              enum "prime-128" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 5;
                description
                  "IPSec proposal-set for PRIME-128";
              }
              enum "prime-256" {
                junos:must "(!(".. proposals"))";
                junos:must-message "IPSec policy must not have both proposals and proposal-set configured";
                value 6;
                description
                  "IPSec proposal-set for PRIME-256";
              }
            }
            description
              "Types of default IPSEC proposal-set";
          }
        }  // grouping ipsec-policy
    
        grouping ipsec-proposal {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            description
              "Name of the IPSec proposal";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of IPSec proposal";
          }
    
          leaf protocol {
            type enumeration {
              enum "ah" {
                junos:must "(!(".. encryption-algorithm"))";
                junos:must-message "Encryption algorithm must not be defined for AH";
                value 0;
                description
                  "Authentication header";
              }
              enum "esp" {
                value 1;
                description
                  "Encapsulated Security Payload header";
              }
            }
            description
              "Define an IPSec protocol for the proposal";
          }
    
          leaf authentication-algorithm {
            type enumeration {
              enum "hmac-md5-96" {
                value 0;
                description
                  "HMAC-MD5-96 authentication algorithm";
              }
              enum "hmac-sha1-96" {
                value 1;
                description
                  "HMAC-SHA1-96 authentication algorithm";
              }
              enum "hmac-sha-256-128" {
                value 2;
                description
                  "HMAC-SHA-256-128 authentication algorithm";
              }
              enum "hmac-sha-256-96" {
                value 3;
                description
                  "HMAC-SHA-256-96 authentication algorithm (non-RFC compliant)";
              }
            }
            description
              "Define authentication algorithm";
          }
    
          leaf encryption-algorithm {
            type enumeration {
              enum "des-cbc" {
                value 0;
                description
                  "DES-CBC encryption algorithm";
              }
              enum "3des-cbc" {
                value 1;
                description
                  "3DES-CBC encryption algorithm";
              }
              enum "aes-128-cbc" {
                value 2;
                description
                  "AES-CBC 128-bit encryption algorithm";
              }
              enum "aes-192-cbc" {
                value 3;
                description
                  "AES-CBC 192-bit encryption algorithm";
              }
              enum "aes-256-cbc" {
                value 4;
                description
                  "AES-CBC 256-bit encryption algorithm";
              }
              enum "aes-128-gcm" {
                junos:must "(!(".. authentication-algorithm"))";
                junos:must-message "HMAC Authentication is not compatible with AES-GCM";
                value 5;
                description
                  "AES-GCM 128-bit encryption algorithm";
              }
              enum "aes-192-gcm" {
                junos:must "(!(".. authentication-algorithm"))";
                junos:must-message "HMAC Authentication is not compatible with AES-GCM";
                value 6;
                description
                  "AES-GCM 192-bit encryption algorithm";
              }
              enum "aes-256-gcm" {
                junos:must "(!(".. authentication-algorithm"))";
                junos:must-message "HMAC Authentication is not compatible with AES-GCM";
                value 7;
                description
                  "AES-GCM 256-bit encryption algorithm";
              }
            }
            description
              "Define encryption algorithm";
          }
    
          leaf lifetime-seconds {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "180 .. 86400";
              }
            }
            units "seconds";
            description "Lifetime, in seconds";
          }
    
          leaf lifetime-kilobytes {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "64 .. 4294967294";
              }
            }
            units "kilobytes";
            description "Lifetime, in kilobytes";
          }
        }  // grouping ipsec-proposal
    
        grouping ipsec-sa {
          leaf name {
            junos:must "(".. manual")";
            junos:must-message "Type must be defined for security-association";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 32";
            }
            description
              "Name of IPSec security association";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              length "1 .. 80";
            }
            description
              "Text description of security association";
          }
    
          leaf mode {
            type enumeration {
              enum "transport" {
                junos:must "(".. manual")";
                junos:must-message "Manual block must be configured for transport mode security association";
                value 0;
                description "Transport mode";
              }
            }
            default "transport";
            description
              "Define security association mode";
          }
    
          choice sa_choice {
            container manual {
              description
                "Define a manual security association";
              uses security-association-manual;
            }  // container manual
          }  // choice sa_choice
        }  // grouping ipsec-sa
    
        grouping ipsec-traceoptions {
          description
            "Data-plane IPSec tracing options";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Events to include in data-plane IPSec trace output";
            leaf name {
              type enumeration {
                enum "packet-processing" {
                  value 0;
                  description
                    "Trace data packet processing events";
                }
                enum "packet-drops" {
                  value 1;
                  description
                    "Trace packet drops";
                }
                enum "security-associations" {
                  value 2;
                  description
                    "Trace security association management events";
                }
                enum "next-hop-tunnel-binding" {
                  value 3;
                  description
                    "Trace next-hop tunnel binding events";
                }
                enum "all" {
                  value 4;
                  description
                    "Trace with all flags enabled";
                }
              }
            }
          }  // list flag
        }  // grouping ipsec-traceoptions
    
        grouping ipsec-vpn-monitor {
          description "Configure VPN monitoring";
          uses apply-advanced;
    
          leaf interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "2 .. 3600";
              }
            }
            units "seconds";
            default "10";
            description
              "Monitor interval in seconds";
          }
    
          leaf threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65536";
              }
            }
            default "10";
            description
              "Number of consecutive failures to determine connectivity";
          }
        }  // grouping ipsec-vpn-monitor
    
        grouping ipsec-vpn-template {
          description "Configure an IPSec VPN";
          leaf name {
            type string {
              length "1 .. 32";
            }
            description "Name of the VPN";
          }
    
          uses apply-advanced;
    
          leaf ha-link-encryption {
            junos:must "(!(".. manual"))";
            junos:must-message "When ha-link-encryption is enabled, manual sa configuration is not allowed";
            junos:must "(!(".. df-bit"))";
            junos:must-message "When ha-link-encryption is enabled, df-bit configuration is not allowed";
            junos:must "(!(".. udp-encapsulate"))";
            junos:must-message "When ha-link-encryption is enabled, udp-encapsulate configuration is not allowed";
            junos:must "(!(".. ike no-anti-replay"))";
            junos:must-message "When ha-link-encryption is enabled, no-anti-replay configuration is not allowed";
            junos:must "(!(".. ike proxy-identity"))";
            junos:must-message "When ha-link-encryption is enabled, ike proxy-identity configuration is not allowed";
            junos:must "(!(".. ike idle-time"))";
            junos:must-message "When ha-link-encryption is enabled, ike idle-time configuration is not allowed";
            junos:must "(!(".. ike install-interval"))";
            junos:must-message "When ha-link-encryption is enabled, ike install-interval configuration is not allowed";
            junos:must "(!(".. establish-tunnels responder-only-no-rekey"))";
            junos:must-message "When ha-link-encryption is enabled, establish-tunnels responder-only-no-rekey configuration is not allowed";
            junos:must "(!(".. establish-tunnels responder-only"))";
            junos:must-message "When ha-link-encryption is enabled, establish-tunnels responder-only configuration is not allowed";
            junos:must "(!(".. establish-tunnels on-traffic"))";
            junos:must-message "When ha-link-encryption is enabled, establish-tunnels on-traffic configuration is not allowed";
            junos:must "(!(".. establish-tunnels immediately"))";
            junos:must-message "When ha-link-encryption is enabled, establish-tunnels immediately configuration is not allowed";
            junos:must "(!(".. traffic-selector"))";
            junos:must-message "When ha-link-encryption is enabled, traffic-selector configuration is not allowed";
            junos:must "(!(".. vpn-monitor"))";
            junos:must-message "When ha-link-encryption is enabled, vpn-monitor configuration is not allowed";
            junos:must "(!(".. copy-outer-dscp"))";
            junos:must-message "When ha-link-encryption is enabled, copy-outer-dscp configuration is not allowed";
            junos:must "(!(".. multi-sa"))";
            junos:must-message "When ha-link-encryption is enabled, multi-sa configuration is not allowed";
            junos:must "(!(".. bind-interface"))";
            junos:must-message "When ha-link-encryption is enabled, bind-interface configuration is not applicable";
            type empty;
            description
              "Enable HA link encryption";
          }
    
          leaf bind-interface {
            junos:must "(!(("interfaces $$-IFL multipoint" && ".. aaa access-profile")))";
            junos:must-message "When aaa access-profile is configured under security ike gateway, vpn-monitor configuration is not allowed";
            junos:must "(("interfaces $$-IFL" || any "logical-systems <*> interfaces $$-IFL"))";
            junos:must-message "Referenced interface must be configured under [edit interfaces] hierarchy";
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Bind to tunnel interface (route-based VPN)";
          }
    
          leaf df-bit {
            type enumeration {
              enum "clear" {
                value 0;
                description
                  "Clear DF bit of outer header";
              }
              enum "set" {
                value 1;
                description
                  "Set DF bit of outer header";
              }
              enum "copy" {
                value 2;
                description
                  "Copy DF bit from inner header";
              }
            }
            description
              "Specifies how to handle the Don't Fragment bit";
          }
    
          container multi-sa {
            junos:must "(!(".. vpn-monitor"))";
            junos:must-message "vpn-monitor with multi-sa is not supported";
            presence "enable multi-sa";
            description
              "Negotiate multiple SAs based on configuration choice";
            uses apply-advanced;
    
            choice sa_map {
              list forwarding-class {
                key "name";
                ordered-by user;
                leaf name {
                  type string {
                    length "1 .. 32";
                  }
                  description
                    "Name of forwarding classes";
                }
    
                uses apply-advanced;
              }  // list forwarding-class
            }  // choice sa_map
          }  // container multi-sa
    
          leaf copy-outer-dscp {
            type empty;
            description
              "Enable copying outer IP header DSCP and ECN to inner IP header";
          }
    
          container vpn-monitor {
            presence "enable vpn-monitor";
            description "Monitor VPN liveliness";
            uses ipsec-template-monitor;
          }  // container vpn-monitor
    
          choice negotiation {
            container manual {
              junos:must "(!(".. traffic-selector"))";
              junos:must-message "Manual vpn with traffic selector is not allowed";
              description
                "Define a manual security association";
              uses apply-advanced;
    
              leaf gateway {
                type jt:hostname;
                description
                  "Define the IPSec peer";
              }
    
              leaf external-interface {
                junos:must "(!("interfaces $$ family bridge"))";
                junos:must-message "Bridge interface is not allowed as external-interface";
                junos:must "("interfaces $$-IFL")";
                junos:must-message "Referenced interface must be configured under [edit interfaces] hierarchy";
                type union {
                  type jt:interface-unit;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "External interface for the security association";
              }
    
              leaf protocol {
                type enumeration {
                  enum "ah" {
                    junos:must "(!(".. encryption"))";
                    junos:must-message "Encryption must not be defined for AH";
                    junos:must "(".. authentication")";
                    junos:must-message "Authentication must be defined for AH";
                    value 0;
                    description
                      "Authentication header";
                  }
                  enum "esp" {
                    junos:must "((".. authentication" || ".. encryption"))";
                    junos:must-message "Either authentication or encryption must be defined for ESP";
                    value 1;
                    description
                      "Encapsulated Security Payload header";
                  }
                }
                description
                  "Define an IPSec protocol for the security association";
              }
    
              leaf spi {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "256 .. 16639";
                  }
                }
                description
                  "Define security parameter index";
              }
    
              container authentication {
                description
                  "Define authentication parameters";
                uses apply-advanced;
    
                leaf algorithm {
                  type enumeration {
                    enum "hmac-md5-96" {
                      value 0;
                      description
                        "HMAC-MD5-96 authentication algorithm";
                    }
                    enum "hmac-sha1-96" {
                      value 1;
                      description
                        "HMAC-SHA1-96 authentication algorithm";
                    }
                    enum "hmac-sha-256-128" {
                      value 2;
                      description
                        "HMAC-SHA-256-128 authentication algorithm";
                    }
                    enum "hmac-sha-256-96" {
                      value 3;
                      description
                        "HMAC-SHA-256-96 authentication algorithm (non-RFC compliant)";
                    }
                  }
                  description
                    "Define authentication algorithm";
                }
    
                container key {
                  description
                    "Define an authentication key";
                  choice key-choice {
                    leaf ascii-text {
                      type string {
                        length "1 .. 255";
                      }
                      description
                        "Format as text";
                    }
                    leaf hexadecimal {
                      type string {
                        junos:posix-pattern "^[[:xdigit:]]+$";
                        junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                        length "1 .. 255";
                      }
                      description
                        "Format as hexadecimal";
                    }
                  }  // choice key-choice
                }  // container key
              }  // container authentication
    
              container encryption {
                description
                  "Define encryption parameters";
                uses apply-advanced;
    
                leaf algorithm {
                  type enumeration {
                    enum "des-cbc" {
                      value 0;
                      description
                        "DES-CBC encryption algorithm";
                    }
                    enum "3des-cbc" {
                      value 1;
                      description
                        "3DES-CBC encryption algorithm";
                    }
                    enum "aes-128-cbc" {
                      value 2;
                      description
                        "AES-CBC 128-bit encryption algorithm";
                    }
                    enum "aes-192-cbc" {
                      value 3;
                      description
                        "AES-CBC 192-bit encryption algorithm";
                    }
                    enum "aes-256-cbc" {
                      value 4;
                      description
                        "AES-CBC 256-bit encryption algorithm";
                    }
                    enum "aes-128-gcm" {
                      junos:must "(!(".. authentication-algorithm"))";
                      junos:must-message "When using aes-gcm for Encryption the Authentication Algorithm must not be set.";
                      value 5;
                      description
                        "AES-GCM 128-bit encryption algorithm";
                    }
                    enum "aes-256-gcm" {
                      junos:must "(!(".. authentication-algorithm"))";
                      junos:must-message "When using aes-gcm for Encryption the Authentication Algorithm must not be set.";
                      value 6;
                      description
                        "AES-GCM 256-bit encryption algorithm";
                    }
                  }
                  description
                    "Define encryption algorithm";
                }
    
                container key {
                  description
                    "Define an encryption key";
                  choice key-choice {
                    leaf ascii-text {
                      type string {
                        length "1 .. 255";
                      }
                      description
                        "Format as text";
                    }
                    leaf hexadecimal {
                      type string {
                        junos:posix-pattern "^[[:xdigit:]]+$";
                        junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                        length "1 .. 255";
                      }
                      description
                        "Format as hexadecimal";
                    }
                  }  // choice key-choice
                }  // container key
              }  // container encryption
            }  // container manual
            container ike {
              description
                "Define an IKE-keyed IPSec vpn";
              uses apply-advanced;
    
              leaf gateway {
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ external-interface")))";
                junos:must-message "When ha-link-encryption is enabled, external-interface is pre-defined and cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ address")))";
                junos:must-message "When ha-link-encryption is enabled, peer address is pre-defined and cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ no-nat-traversal")))";
                junos:must-message "When ha-link-encryption is enabled, Disable NAT-Traversal is not applicable in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ local-identity")))";
                junos:must-message "When ha-link-encryption is enabled, local-identity cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ general-ikeid")))";
                junos:must-message "When ha-link-encryption is enabled, General-IKEID is not applicable in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ dynamic")))";
                junos:must-message "When ha-link-encryption is enabled, Dynamic is not applicable in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ advpn")))";
                junos:must-message "When ha-link-encryption is enabled, ADVPN is not applicable in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ remote-identity")))";
                junos:must-message "When ha-link-encryption is enabled, remote-identity cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ tcp-encap-profile")))";
                junos:must-message "When ha-link-encryption is enabled, tcp-encap-profile is not applicable on associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ nat-keepalive")))";
                junos:must-message "When ha-link-encryption is enabled,  nat-keepalive is not applicable on associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ local-address")))";
                junos:must-message "When ha-link-encryption is enabled, local-address is pre-defined and cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ dead-peer-detection")))";
                junos:must-message "When ha-link-encryption is enabled, dead-peer-detection (mode:always-send, Interval: 3 sec, Threshold:10) is pre-defined and cannot be configured in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && "security ike gateway $$ aaa")))";
                junos:must-message "When ha-link-encryption is enabled, AAA is not applicable in associated IKE Gateway";
                junos:must "(!((".. .. ha-link-encryption" && !("security ike gateway $$ version v2-only"))))";
                junos:must-message "When ha-link-encryption is enabled, associated IKE Gateway must be version 2";
                junos:must "(!((!(".. .. ha-link-encryption") && (!(".. .. bind-interface") && "security ike gateway $$ version v2-only"))))";
                junos:must-message "IKEv2 requires bind-interface configuration as only route-based is supported";
                junos:must "(!(("security ike gateway $$ advpn" && ".. proxy-identity")))";
                junos:must-message "No proxy-identity support on an advpn enabled gateway";
                junos:must "(!(("security ike gateway $$ aaa access-profile" && ".. .. vpn-monitor")))";
                junos:must-message "When aaa access-profile is configured under security ike gateway, vpn-monitor configuration is not allowed";
                junos:must "(!(("security ike gateway $$ advpn" && ".. .. vpn-monitor destination-ip")))";
                junos:must-message "No destination ip support for vpn-monitor in vpn referring to an advpn enabled gateway";
                junos:must "(!(("security ike gateway $$ dynamic ike-user-type" && ".. .. vpn-monitor destination-ip")))";
                junos:must-message "No destination ip support for vpn-monitor in vpn using shared or group ike";
                junos:must "("security ike gateway $$")";
                junos:must-message "Referenced IKE gateway must be defined under [edit security ike gateway]";
                type string {
                  junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                  junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                  length "1 .. 32";
                }
                description
                  "Name of remote gateway";
              }
    
              leaf idle-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "60 .. 999999";
                  }
                }
                units "seconds";
                description
                  "Idle time to delete SA";
              }
    
              leaf no-anti-replay {
                type empty;
                description
                  "Disable the anti-replay check";
              }
    
              container proxy-identity {
                presence "enable proxy-identity";
                description
                  "IPSec proxy-id to use in IKE negotiations";
                uses ipsec-template-proxy-id;
              }  // container proxy-identity
    
              leaf ipsec-policy {
                junos:must "("security ipsec policy $$")";
                junos:must-message "Referenced IPSec policy must be defined under [edit security ipsec policy]";
                type string {
                  junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                  junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                  length "1 .. 32";
                }
                description
                  "Name of the IPSec policy";
              }
    
              leaf install-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 10";
                  }
                }
                units "seconds";
                default "1";
                description
                  "Delay installation of rekeyed outbound SAs on initiator";
              }
            }  // container ike
          }  // choice negotiation
    
          list traffic-selector {
            junos:must "(!(".. ike proxy-identity"))";
            junos:must-message "Proxy-identity must not be configured with traffic-selector";
            junos:must "(".. bind-interface")";
            junos:must-message "Bind-interface must be configured under [edit security ipsec vpn] hierarchy";
            key "name";
            max-elements 200;
            ordered-by user;
            description "Traffic selector";
            leaf name {
              type string {
                length "1 .. 31";
              }
              description
                "Name of traffic selector";
            }
    
            uses apply-advanced;
    
            leaf local-ip {
              type jt:ipprefix-mandatory;
              description
                "IP address of local traffic-selector";
            }
    
            leaf remote-ip {
              type jt:ipprefix-mandatory;
              description
                "IP address of remote traffic-selector";
            }
          }  // list traffic-selector
    
          leaf establish-tunnels {
            junos:must "(".. ike")";
            junos:must-message "VPN must be IKE-keyed to define establish-tunnel method";
            type enumeration {
              enum "immediately" {
                value 0;
                description
                  "Establish tunnels immediately";
              }
              enum "on-traffic" {
                value 1;
                description
                  "Establish tunnels on traffic";
              }
            }
            default "on-traffic";
            description
              "Define the criteria to establish tunnels";
          }
    
          container udp-encapsulate {
            presence "enable udp-encapsulate";
            description
              "UDP encapsulation of IPsec data traffic";
            leaf dest-port {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1025 .. 65536";
                }
              }
              default "4565";
              description "UDP destination port";
            }
          }  // container udp-encapsulate
        }  // grouping ipsec-vpn-template
    
        grouping ipsec-template-monitor {
          junos:must "(!(".. traffic-selector"))";
          junos:must-message "vpn-monitor with traffic selector is not supported";
          description "Configure VPN monitoring";
          uses apply-advanced;
    
          leaf optimized {
            type empty;
            description
              "Optimize for scalability";
          }
    
          leaf source-interface {
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Source interface for monitor message";
          }
    
          leaf destination-ip {
            type jt:ipaddr;
            description
              "Destination IP addres for monitor message";
          }
    
          container verify-path {
            presence "enable verify-path";
            description
              "Verify IPSec path using vpn-monitor before bring up st0 state";
            uses apply-advanced;
    
            leaf destination-ip {
              type jt:ipaddr;
              description
                "Destination IP addres for verify IPSec path";
            }
    
            leaf packet-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "64 .. 1350";
                }
              }
              default "64";
              description "Size of the packet";
            }
          }  // container verify-path
        }  // grouping ipsec-template-monitor
    
        grouping ipsec-template-proxy-id {
          description "Proxy identity settings";
          uses apply-advanced;
    
          leaf local {
            type jt:ipprefix-mandatory;
            description
              "Local IP address/prefix length";
          }
    
          leaf remote {
            type jt:ipprefix-mandatory;
            description
              "Remote IP address/prefix length";
          }
    
          leaf service {
            type string {
              length "1 .. 32";
            }
            description
              "Name of serivce that passes through, any enables all services";
          }
        }  // grouping ipsec-template-proxy-id
    
        grouping security-association-manual {
          uses apply-advanced;
    
          list direction {
            key "name";
            ordered-by user;
            description
              "Define the direction of the security association";
            leaf name {
              type enumeration {
                enum "bidirectional" {
                  junos:must "((!(".. .. direction $$={inbound}") && !(".. .. direction $$={outbound}")))";
                  junos:must-message "Outbound or inbound blocks must not be configured";
                  value 0;
                  description
                    "Bidirectional security association";
                }
              }
            }
    
            uses apply-advanced;
    
            leaf protocol {
              type enumeration {
                enum "ah" {
                  junos:must "(!(".. encryption"))";
                  junos:must-message "Encryption must not be defined for AH";
                  junos:must "(".. authentication")";
                  junos:must-message "Authentication must be defined for AH";
                  value 0;
                  description
                    "Authentication header";
                }
                enum "esp" {
                  junos:must "((".. authentication" || ".. encryption"))";
                  junos:must-message "Either authentication or encryption must be defined for ESP";
                  value 1;
                  description
                    "Encapsulated Security Payload header";
                }
              }
              description
                "Define an IPSec protocol for the security association";
            }
    
            leaf spi {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "256 .. 16639";
                }
              }
              description
                "Define security parameter index";
            }
    
            container authentication {
              description
                "Define authentication parameters";
              uses apply-advanced;
    
              leaf algorithm {
                type enumeration {
                  enum "hmac-md5-96" {
                    value 0;
                    description
                      "HMAC-MD5-96 authentication algorithm";
                  }
                  enum "hmac-sha1-96" {
                    value 1;
                    description
                      "HMAC-SHA1-96 authentication algorithm";
                  }
                }
                description
                  "Define authentication algorithm";
              }
    
              container key {
                description
                  "Define an authentication key";
                choice key-choice {
                  leaf ascii-text {
                    type string {
                      length "1 .. 255";
                    }
                    description "Format as text";
                  }
                  leaf hexadecimal {
                    type string {
                      junos:posix-pattern "^[[:xdigit:]]+$";
                      junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                      length "1 .. 255";
                    }
                    description
                      "Format as hexadecimal";
                  }
                }  // choice key-choice
              }  // container key
            }  // container authentication
    
            container encryption {
              description
                "Define encryption parameters";
              uses apply-advanced;
    
              leaf algorithm {
                type enumeration {
                  enum "des-cbc" {
                    value 0;
                    description
                      "DES-CBC encryption algorithm";
                  }
                  enum "3des-cbc" {
                    value 1;
                    description
                      "3DES-CBC encryption algorithm";
                  }
                }
                description
                  "Define encryption algorithm";
              }
    
              container key {
                description
                  "Define an encryption key";
                choice key-choice {
                  leaf ascii-text {
                    type string {
                      length "1 .. 255";
                    }
                    description "Format as text";
                  }
                  leaf hexadecimal {
                    type string {
                      junos:posix-pattern "^[[:xdigit:]]+$";
                      junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                      length "1 .. 255";
                    }
                    description
                      "Format as hexadecimal";
                  }
                }  // choice key-choice
              }  // container key
            }  // container encryption
          }  // list direction
        }  // grouping security-association-manual
    
        grouping security-macsec {
          uses apply-advanced;
    
          container traceoptions {
            presence "enable traceoptions";
            description
              "Tracing options for debugging protocol operation";
            uses macsec-trace-options;
          }  // container traceoptions
    
          list connectivity-association {
            key "name";
            ordered-by user;
            description
              "Configure connectivity association properties";
            leaf name {
              type string {
                length "1 .. 32";
              }
              description
                "Connectivity association name";
            }
    
            uses apply-advanced;
    
            leaf cipher-suite {
              type enumeration {
                enum "gcm-aes-128" {
                  value 0;
                  description
                    "GCM-AES-128 cipher suite";
                }
                enum "gcm-aes-256" {
                  junos:must "(!(".. security-mode static-sak"))";
                  junos:must-message "GCM-AES-256 cipher suite not allowed for static-sak mode";
                  value 1;
                  description
                    "GCM-AES-256 cipher suite";
                }
                enum "gcm-aes-xpn-128" {
                  junos:must "(!(".. security-mode static-sak"))";
                  junos:must-message "GCM-AES-XPN-128 cipher suite not allowed for static-sak mode";
                  value 2;
                  description
                    "GCM-AES-XPN-128 cipher suite";
                }
                enum "gcm-aes-xpn-256" {
                  junos:must "(!(".. security-mode static-sak"))";
                  junos:must-message "GCM-AES-XPN-256 cipher suite not allowed for static-sak mode";
                  value 3;
                  description
                    "GCM-AES-XPN-256 cipher suite";
                }
              }
              description
                "Cipher suite to be used for encryption";
            }
    
            leaf security-mode {
              junos:must "((!(".. security-mode static-cak") || (".. pre-shared-key cak" || (".. pre-shared-key-chain" || ".. fallback-key cak"))))";
              junos:must-message "Pre-shared key or fallback-key or pre-shared-key-chain required for static-cak mode";
              type enumeration {
                enum "dynamic" {
                  value 0;
                  description
                    "Dynamic connectivity and secure association mode (MKA and dot1x)";
                }
                enum "static-sak" {
                  value 1;
                  description
                    "Static secure association key mode (no MKA)";
                }
                enum "static-cak" {
                  value 2;
                  description
                    "Static connectivity association key mode (MKA and Pre-shared key)";
                }
              }
              description
                "Connectivity association mode";
            }
    
            leaf sak-hash-128 {
              junos:must "((".. cipher-suite gcm-aes-256" || ".. cipher-suite gcm-aes-xpn-256"))";
              junos:must-message "Allowed only for cipher-suite gcm-aes-256 or gcm-aes-xpn-256";
              type empty;
              description
                "Configure to generate 128bit SAK hash to program HW";
            }
    
            list secure-channel {
              junos:must "(".. security-mode static-sak")";
              junos:must-message "Secure-channel configuration allowed only for static-sak mode";
              key "name";
              ordered-by user;
              description
                "Configure secure channel properties";
              leaf name {
                type string;
                description
                  "Secure channel name";
              }
    
              uses apply-advanced;
    
              container id {
                description
                  "Secure channel identifier";
                uses apply-advanced;
    
                leaf mac-address {
                  type jt:mac-addr;
                  description "MAC addresses";
                }
    
                leaf port-id {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description "Port identifier";
                }
              }  // container id
    
              leaf direction {
                type enumeration {
                  enum "inbound" {
                    value 0;
                  }
                  enum "outbound" {
                    value 1;
                  }
                }
                description
                  "Secure channel direction";
              }
    
              leaf encryption {
                type empty;
                description "Enable Encryption";
              }
    
              leaf offset {
                type enumeration {
                  enum "0" {
                    value 0;
                    description
                      "Confidentiality protected for all octets of MACSec PDU data";
                  }
                  enum "30" {
                    value 1;
                    description
                      "Confidentiality not protected for initial 30 octets of MACSec PDU data";
                  }
                  enum "50" {
                    value 2;
                    description
                      "Confidentiality not protected for initial 50 octets of MACSec PDU data";
                  }
                }
                description
                  "Confidentiality offset";
              }
    
              leaf include-sci {
                type empty;
                description
                  "Include secure channel identifier in MAC Security PDU";
              }
    
              list security-association {
                key "name";
                ordered-by user;
                description
                  "Security association";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 3";
                    }
                  }
                  description
                    "Security association number";
                }
    
                uses apply-advanced;
    
                leaf key {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F) of length 32";
                    length "32";
                  }
                  description
                    "Security association key in hexadecimal format of length 32";
                }
              }  // list security-association
            }  // list secure-channel
    
            container mka {
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "MKA configuration can be set only for dynamic/static-cak modes";
              presence "enable mka";
              description
                "Configure MAC Security Key Agreement protocol properties";
              uses apply-advanced;
    
              leaf transmit-interval {
                junos:must "(!(".. bounded-delay"))";
                junos:must-message "Might not be configured with bounded-delay";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2000 .. 10000";
                  }
                }
                units "milliseconds";
                description
                  "Configure MKA periodic transmit interval";
              }
    
              leaf sak-rekey-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "60 .. 86400";
                  }
                }
                units "seconds";
                description
                  "Configure SAK rekeying interval";
              }
    
              leaf bounded-delay {
                junos:must "(".. .. replay-protect replay-window-size")";
                junos:must-message "replay-window-size must be configured with bounded-delay";
                type empty;
                description
                  "Configure Bounded Hello Time";
              }
    
              leaf key-server-priority {
                junos:must "(".. .. security-mode static-cak")";
                junos:must-message "Allowed only for static-cak mode";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                default "16";
                description
                  "Configure MKA key server priority";
              }
    
              leaf must-secure {
                junos:must "(".. .. security-mode dynamic")";
                junos:must-message "Allowed only for dynamic mode";
                type empty;
                description
                  "Allow only secure dot1x traffic";
              }
    
              leaf should-secure {
                junos:must "(".. .. security-mode static-cak")";
                junos:must-message "Allowed only for static mode";
                type empty;
                description
                  "Configure fail open mode for MKA protocol";
              }
    
              leaf eapol-address {
                junos:must "(".. .. security-mode static-cak")";
                junos:must-message "Allowed only for static-cak mode";
                type string;
                default "pae";
                description
                  "Configure EAPOL destination group address";
              }
            }  // container mka
    
            container replay-protect {
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "Not allowed for static-sak mode";
              description
                "Configure replay protection";
              uses apply-advanced;
    
              leaf replay-window-size {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 65535";
                  }
                }
                units "packets";
                description
                  "Configure replay protection window size";
              }
            }  // container replay-protect
    
            leaf no-encryption {
              junos:must "(!(".. offset"))";
              junos:must-message "Offset can be configured only with encryption";
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "Encryption for static-sak mode should be configured under secure-channel";
              type empty;
              description "Disable encryption";
            }
    
            leaf disable-preceding-key {
              junos:must "(".. security-mode static-cak")";
              junos:must-message "Enabling configuration allowed only in static-cak mode";
              type empty;
              description
                "Disable CA preceding key duing key switch-over";
            }
    
            leaf offset {
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "Offset for static-sak mode should be configured under secure-channel";
              type enumeration {
                enum "0" {
                  value 0;
                  description
                    "Confidentiality provided for all octets of data";
                }
                enum "30" {
                  value 1;
                  description
                    "Confidentiality not provided for initial 30 octets of data";
                }
                enum "50" {
                  value 2;
                  description
                    "Confidentiality not provided for initial 50 octets of data";
                }
              }
              default "0";
              description
                "Confidentiality offset";
            }
    
            leaf include-sci {
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "Not allowed for static-sak mode";
              type empty;
              description
                "Include secure channel identifier in MAC Security PDU";
            }
    
            container pre-shared-key {
              junos:must "(".. security-mode static-cak")";
              junos:must-message "Pre-shared key configuration allowed only in static-cak mode";
              presence "enable pre-shared-key";
              description
                "Configure pre-shared connectivity association key";
              uses apply-advanced;
    
              leaf ckn {
                type string {
                  junos:posix-pattern "^([0-9a-fA-F][0-9a-fA-F]){1,32}$";
                  junos:pattern-message "Must be an even-length string up to 64 hexadecimal digits (0-9, a-f, A-F)";
                  length "2 .. 64";
                }
                description
                  "Connectivity association key name in hexadecimal format";
              }
    
              leaf cak {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  length "1 .. 64";
                }
                description
                  "Connectivity association key in hexadecimal format";
              }
            }  // container pre-shared-key
    
            container fallback-key {
              junos:must "(".. security-mode static-cak")";
              junos:must-message "Fallback key configuration allowed only in static-cak mode";
              presence "enable fallback-key";
              description
                "Configure fallback key for connectivity association";
              uses apply-advanced;
    
              leaf ckn {
                junos:must "(!(".. .. pre-shared-key ckn $$"))";
                junos:must-message "fallback-key CKN cannot be same as pre-shared-key CKN";
                type string {
                  junos:posix-pattern "^([0-9a-fA-F][0-9a-fA-F]){1,32}$";
                  junos:pattern-message "Must be an even-length string up to 64 hexadecimal digits (0-9, a-f, A-F)";
                  length "2 .. 64";
                }
                description
                  "Connectivity association fallback key name in hexadecimal format";
              }
    
              leaf cak {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  length "1 .. 64";
                }
                description
                  "Connectivity association fallback key secret in hexadecimal format";
              }
            }  // container fallback-key
    
            leaf pre-shared-key-chain {
              junos:must "(!(".. pre-shared-key"))";
              junos:must-message "May not be configured with pre-shared-key";
              junos:must "("security authentication-key-chains key-chain $$")";
              junos:must-message "authentication-key-chains not defined !!";
              type string {
                junos:posix-pattern "^.{1,32}$";
                junos:pattern-message "Must be string of 32 characters or less";
              }
              description
                "Pre-shared key chain name for connectivity association";
            }
    
            list exclude-protocol {
              junos:must "((".. security-mode static-cak" || ".. security-mode dynamic"))";
              junos:must-message "Not allowed for static-sak mode";
              key "name";
              ordered-by user;
              description
                "Configure protocols to exclude from MAC Security";
              leaf name {
                type enumeration {
                  enum "cdp" {
                    value 0;
                    description
                      "Cisco Discovery Protocol";
                  }
                  enum "lldp" {
                    value 1;
                    description
                      "Link Level Discovery Protocol";
                  }
                  enum "lacp" {
                    value 2;
                    description
                      "Link Aggregation Control Protocol";
                  }
                }
              }
            }  // list exclude-protocol
          }  // list connectivity-association
    
          list interfaces {
            key "name";
            description
              "Interfaces on which macsec configuration is applied";
            leaf name {
              type union {
                type jt:interface-device;
                type string {
                  pattern "<.*>|$.*";
                }
              }
            }
    
            uses apply-advanced;
    
            leaf connectivity-association {
              junos:must "("security macsec connectivity-association $$")";
              junos:must-message "Connectivity association not defined";
              type string;
              description
                "Connectivity association name";
            }
    
            container traceoptions {
              junos:must "(".. connectivity-association")";
              junos:must-message "Connectivity association should be configured on interface to enable traceoptions";
              presence "enable traceoptions";
              description
                "Tracing options of MKA protocol";
              uses mka-trace-options;
            }  // container traceoptions
          }  // list interfaces
    
          list cluster-control-port {
            key "name";
            description
              "Cluster control port on which macsec configuration is applied";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 1";
                }
              }
              description "Port identifier";
            }
    
            uses apply-advanced;
    
            leaf connectivity-association {
              junos:must "(!("security macsec connectivity-association $$ pre-shared-key-chain"))";
              junos:must-message "Pre-shared keychain is not supported on cluster control port";
              junos:must "("security macsec connectivity-association $$")";
              junos:must-message "Connectivity association not defined";
              type string;
              description
                "Connectivity association name";
            }
    
            container traceoptions {
              presence "enable traceoptions";
              description
                "Tracing options of MKA protocol";
              uses mka-trace-options;
            }  // container traceoptions
          }  // list cluster-control-port
    
          list cluster-data-port {
            key "name";
            description
              "Cluster data port on which macsec configuration is applied";
            leaf name {
              junos:must "(!("security macsec connectivity-association $$ pre-shared-key-chain"))";
              junos:must-message "Pre-shared keychain is not supported on cluster data port";
              type union {
                type jt:interface-device;
                type string {
                  pattern "<.*>|$.*";
                }
              }
            }
    
            uses apply-advanced;
    
            leaf connectivity-association {
              junos:must "("security macsec connectivity-association $$")";
              junos:must-message "Connectivity association not defined";
              type string;
              description
                "Connectivity association name";
            }
    
            container traceoptions {
              presence "enable traceoptions";
              description
                "Tracing options of MKA protocol";
              uses mka-trace-options;
            }  // container traceoptions
          }  // list cluster-data-port
        }  // grouping security-macsec
    
        grouping macsec-trace-options {
          description
            "Trace options for MACSec 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 "config" {
                  value 0;
                  description
                    "Trace configuration messages";
                }
                enum "debug" {
                  value 1;
                  description
                    "Trace debug messages";
                }
                enum "normal" {
                  value 2;
                  description
                    "Trace normal messages";
                }
                enum "all" {
                  value 3;
                  description "Trace all";
                }
              }
            }
          }  // list flag
        }  // grouping macsec-trace-options
    
        grouping mka-trace-options {
          description
            "Trace options for MKA 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 "mka-packets" {
                  value 0;
                  description
                    "Trace MKA input and output packets";
                }
                enum "state" {
                  value 1;
                  description
                    "Trace MKA state information";
                }
                enum "to-secy" {
                  value 2;
                  description
                    "Trace MKA to SecY state changes";
                }
                enum "keys" {
                  value 3;
                  description
                    "Trace key creation/generation information";
                }
                enum "normal" {
                  value 4;
                  description
                    "Trace normal events";
                }
                enum "all" {
                  value 5;
                  description "Trace all";
                }
              }
            }
          }  // list flag
        }  // grouping mka-trace-options
    
        grouping security-option-82-type {
          description
            "DHCP option-82 processing";
          uses apply-advanced;
    
          container circuit-id {
            presence "enable circuit-id";
            description
              "Configure DHCP option 82 circuit id";
            uses apply-advanced;
    
            container prefix {
              description
                "Configure DHCP option 82 circuit id prefix";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Add router host name to DHCP option-82 circuit id";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Add logical system name to DHCP option-82 circuit id";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Add routing instance name to DHCP option-82 circuit id";
              }
            }  // container prefix
    
            leaf use-interface-description {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Use interface description instead of circuit identifier";
            }
    
            leaf use-vlan-id {
              type empty;
              description
                "Use VLAN id instead of name";
            }
          }  // container circuit-id
    
          container remote-id {
            presence "enable remote-id";
            description
              "Configure DHCP option 82 remote id";
            uses apply-advanced;
    
            leaf host-name {
              type empty;
              description
                "Add router host name to DHCP option-82 remote id";
            }
    
            leaf use-interface-description {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Use interface description instead of interface name";
            }
    
            leaf use-string {
              junos:must "(!(".. use-interface-description"))";
              junos:must-message "use-string and use-interface-description cannot be configured together";
              type string;
              description
                "Use raw string instead of the default remote id";
            }
    
            leaf mac {
              type empty;
              description
                "Add chassis MAC Address to DHCP option-82 remote id";
            }
          }  // container remote-id
    
          container vendor-id {
            presence "enable vendor-id";
            description
              "Configure DHCP option 82 vendor id";
            uses apply-advanced;
    
            leaf use-string {
              type string;
              default "Juniper Networks";
              description
                "Use raw string instead of the default vendor id";
            }
          }  // container vendor-id
        }  // grouping security-option-82-type
    
        grouping security-pki {
          uses apply-advanced;
    
          list ca-profile {
            key "name";
            ordered-by user;
            description
              "Certificate authority profile configuration";
            leaf name {
              type string {
                junos:posix-pattern "![/%. ]";
                junos:pattern-message "Must not contain '/', %, '.' or a space";
                length "1 .. 32";
              }
              description
                "Name of certificate authority profile";
            }
    
            uses apply-advanced;
    
            leaf ca-identity {
              type string;
              description
                "Certificate authority identifier";
            }
    
            leaf source-address {
              type jt:ipaddr;
              description
                "Use specified address as source address";
            }
    
            leaf proxy-profile {
              junos:must "("services proxy profile $$")";
              junos:must-message "Referenced Proxy profile must be defined under [edit services proxy profile]";
              type string;
              description
                "Use specified proxy server";
            }
    
            leaf routing-instance {
              junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
              junos:must-message "referenced routing-instance must be defined";
              type string;
              description
                "Use specified routing instance";
            }
    
            container enrollment {
              description
                "Enrollment parameters for certificate authority";
              uses apply-advanced;
    
              leaf url {
                type string;
                description
                  "Enrollment URL of certificate authority";
              }
    
              leaf retry {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 1080";
                  }
                }
                default "1000";
                description
                  "Number of enrollment retry attempts before aborting";
              }
    
              leaf retry-interval {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 3600";
                  }
                }
                default "600";
                description
                  "Interval in seconds between the enrollment retries";
              }
            }  // container enrollment
    
            container revocation-check {
              description
                "Method for checking certificate revocations";
              uses apply-advanced;
    
              choice revocation-check-options {
                leaf use-crl {
                  type empty;
                  description
                    "Use CRL for revocation check";
                }
                leaf use-ocsp {
                  type empty;
                  description
                    "Use OCSP for revocation check";
                }
                leaf disable {
                  type empty;
                  description
                    "Disable revocation check";
                }
              }  // choice revocation-check-options
    
              container ocsp {
                presence "enable ocsp";
                description
                  "Online Certificate Status Protocol (OCSP) configuration";
                uses apply-advanced;
    
                list url {
                  key "name";
                  ordered-by user;
                  leaf name {
                    type string {
                      length "1 .. 500";
                    }
                    description
                      "HTTP URL for OCSP access location";
                  }
    
                  uses apply-advanced;
                }  // list url
    
                leaf nonce-payload {
                  type enumeration {
                    enum "enable" {
                      value 0;
                      description
                        "Send nonce paylod in OCSP request";
                    }
                    enum "disable" {
                      value 1;
                      description
                        "Do not send nonce payload in OCSP request";
                    }
                  }
                  description
                    "Include nonce payload in OCSP requests";
                }
    
                leaf disable-responder-revocation-check {
                  type empty;
                  description
                    "Disable OCSP responder certificate revocation check";
                }
    
                leaf accept-unknown-status {
                  type empty;
                  description
                    "Accept certificates with unknown status";
                }
    
                container connection-failure {
                  presence
                    "enable connection-failure";
                  description
                    "Actions on failure to connect to OCSP Responder";
                  uses apply-advanced;
    
                  choice connection-failure-options {
                    leaf fallback-crl {
                      type empty;
                      description
                        "Use CRL for revocation check";
                    }
                    leaf disable {
                      type empty;
                      description
                        "Disable OCSP check on connection failure";
                    }
                  }  // choice connection-failure-options
                }  // container connection-failure
              }  // container ocsp
    
              container crl {
                description
                  "Certificate revocation list configuration";
                uses apply-advanced;
    
                container disable {
                  leaf on-download-failure {
                    type empty;
                    description
                      "Check revocation status with existing CRL file if present, otherwise skip. This feature must be enabled for manual CRL download.";
                  }
                }  // container disable
    
                list url {
                  key "name";
                  ordered-by user;
                  leaf name {
                    type string {
                      length "1 .. 500";
                    }
                    description
                      "URL of CRL distribution point for certificate authority";
                  }
    
                  uses apply-advanced;
    
                  leaf password {
                    type jt:unreadable;
                    description
                      "Password for authentication with the server";
                  }
                }  // list url
    
                leaf refresh-interval {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 8784";
                    }
                  }
                  units "hours";
                  description
                    "CRL refresh interval";
                }
              }  // container crl
            }  // container revocation-check
    
            container administrator {
              description
                "Administrator information";
              uses apply-advanced;
    
              leaf email-address {
                type string;
                description
                  "Administrator e-mail to which to send certificate requests";
              }
            }  // container administrator
          }  // list ca-profile
    
          list trusted-ca-group {
            key "name";
            ordered-by user;
            description
              "Trusted Certificate Authority group configuration";
            leaf name {
              type string {
                length "1 .. 63";
              }
              description
                "Name of the trusted CA group";
            }
    
            uses apply-advanced;
    
            leaf-list ca-profiles {
              type string {
                length "1 .. 63";
              }
              max-elements 20;
              ordered-by user;
              description
                "Name of the CA profiles (maximum 20)";
            }
          }  // list trusted-ca-group
    
          container trap {
            presence "enable trap";
            description
              "Trap options for PKI certificates";
            uses apply-advanced;
    
            list certificate-id {
              key "name";
              ordered-by user;
              description
                "Local certificate identifier";
              leaf name {
                type string;
                description "Local cert id";
              }
    
              uses apply-advanced;
    
              leaf days {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                default "60";
                description
                  "Number of days to generate trap (default 60)";
              }
            }  // list certificate-id
    
            list ca-identity {
              key "name";
              ordered-by user;
              description "CA identity";
              leaf name {
                junos:must "("security pki ca-profile $$")";
                junos:must-message "Referenced ca-profile must be defined under [edit security pki ca-profile]";
                type string;
                description "CA profile";
              }
    
              uses apply-advanced;
    
              leaf days {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                default "60";
                description
                  "Number of days to generate trap (default 60)";
              }
            }  // list ca-identity
    
            container all-certificates {
              presence "enable all-certificates";
              description
                "Trap config for all certificates";
              uses apply-advanced;
    
              leaf days {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 100";
                  }
                }
                default "60";
                description
                  "Number of days to generate trap (default 60)";
              }
            }  // container all-certificates
          }  // container trap
    
          container auto-re-enrollment {
            description
              "Auto re-enroll of certificate";
            uses apply-advanced;
    
            container cmpv2 {
              presence "enable cmpv2";
              description
                "CMPv2 auto re-enrollment configuration";
              uses apply-advanced;
    
              list certificate-id {
                key "name";
                ordered-by user;
                description
                  "CMPv2 auto re-enrollment configuration for certificate-id";
                leaf name {
                  type string {
                    junos:posix-pattern "^.{1,32}$";
                    junos:pattern-message "Must be string of 32 characters or less";
                  }
                  description
                    "Certificate identifier that needs auto re-enrollment";
                }
    
                uses apply-advanced;
    
                leaf ca-profile-name {
                  junos:must "("security pki ca-profile $$ enrollment url")";
                  junos:must-message "Referenced ca-profile must have enrollment url configured under [edit security pki ca-profile <ca-profile-name> enrollment url]";
                  junos:must "("security pki ca-profile $$")";
                  junos:must-message "Referenced ca-profile must be defined under [edit security pki ca-profile]";
                  type string {
                    junos:posix-pattern "^.{1,32}$";
                    junos:pattern-message "Must be string of 32 characters or less";
                  }
                  description
                    "Name of certificate authority profile";
                }
    
                leaf re-enroll-trigger-time-percentage {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 99";
                    }
                  }
                  description
                    "Re-enrollment trigger time before expiration as percentage";
                }
    
                leaf re-generate-keypair {
                  type empty;
                  description
                    "Generate new key-pair for auto-re-enrollment";
                }
              }  // list certificate-id
            }  // container cmpv2
    
            container scep {
              presence "enable scep";
              description
                "SCEP auto re-enrollment configuration";
              uses apply-advanced;
    
              list certificate-id {
                key "name";
                ordered-by user;
                description
                  "SCEP auto re-enrollment configuration for certificate-id";
                leaf name {
                  type string {
                    junos:posix-pattern "^.{1,32}$";
                    junos:pattern-message "Must be string of 32 characters or less";
                  }
                  description
                    "Certificate identifier that needs auto re-enrollment";
                }
    
                uses apply-advanced;
    
                leaf ca-profile-name {
                  junos:must "("security pki ca-profile $$ enrollment url")";
                  junos:must-message "Referenced ca-profile must have enrollment url configured under [edit security pki ca-profile <ca-profile-name> enrollment url]";
                  junos:must "("security pki ca-profile $$")";
                  junos:must-message "Referenced ca-profile must be defined under [edit security pki ca-profile]";
                  type string {
                    junos:posix-pattern "^.{1,32}$";
                    junos:pattern-message "Must be string of 32 characters or less";
                  }
                  description
                    "Name of certificate authority profile";
                }
    
                leaf re-generate-keypair {
                  type empty;
                  description
                    "Generate new key-pair for auto-re-enrollment";
                }
    
                leaf re-enroll-trigger-time-percentage {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 99";
                    }
                  }
                  description
                    "Re-enrollment trigger time before expiration as percentage";
                }
    
                leaf challenge-password {
                  type jt:unreadable;
                  description
                    "Password used by CA for enrollment and revocation";
                }
    
                container scep-encryption-algorithm {
                  presence
                    "enable scep-encryption-algorithm";
                  description
                    "SCEP encryption algorithm";
                  uses apply-advanced;
    
                  choice scep-encryption-algorithm-options {
                    leaf des {
                      type empty;
                      description
                        "Use DES as SCEP encryption algorithm";
                    }
                    leaf des3 {
                      type empty;
                      description
                        "Use DES3 as SCEP encryption algorithm";
                    }
                  }  // choice scep-encryption-algorithm-options
                }  // container scep-encryption-algorithm
    
                container scep-digest-algorithm {
                  presence
                    "enable scep-digest-algorithm";
                  description
                    "SCEP digest algorithm";
                  uses apply-advanced;
    
                  choice scep-digest-algorithm-options {
                    leaf md5 {
                      type empty;
                      description
                        "Use MD5 as SCEP digest algorithm";
                    }
                    leaf sha1 {
                      type empty;
                      description
                        "Use SHA1 as SCEP digest algorithm";
                    }
                  }  // choice scep-digest-algorithm-options
                }  // container scep-digest-algorithm
              }  // list certificate-id
            }  // container scep
    
            list certificate-id {
              key "name";
              ordered-by user;
              description
                "Auto re-enrollment configuration for certificate-id";
              leaf name {
                type string {
                  junos:posix-pattern "^.{1,32}$";
                  junos:pattern-message "Must be string of 32 characters or less";
                }
                description
                  "Certificate identifier that needs auto re-enrollment";
              }
    
              uses apply-advanced;
    
              leaf ca-profile-name {
                junos:must "("security pki ca-profile $$ enrollment url")";
                junos:must-message "Referenced ca-profile must have enrollment url configured under [edit security pki ca-profile <ca-profile-name> enrollment url]";
                junos:must "("security pki ca-profile $$")";
                junos:must-message "Referenced ca-profile must be defined under [edit security pki ca-profile]";
                type string {
                  junos:posix-pattern "^.{1,32}$";
                  junos:pattern-message "Must be string of 32 characters or less";
                }
                description
                  "Name of certificate authority profile";
              }
    
              leaf re-generate-keypair {
                type empty;
                description
                  "Generate new key-pair for auto-re-enrollment";
              }
    
              leaf re-enroll-trigger-time-percentage {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 99";
                  }
                }
                description
                  "Re-enrollment trigger time before expiration as percentage";
              }
    
              leaf challenge-password {
                type jt:unreadable;
                description
                  "Password used by CA for enrollment and revocation";
              }
    
              container scep-encryption-algorithm {
                presence
                  "enable scep-encryption-algorithm";
                description
                  "SCEP encryption algorithm";
                uses apply-advanced;
    
                choice scep-encryption-algorithm-options {
                  leaf des {
                    type empty;
                    description
                      "Use DES as SCEP encryption algorithm";
                  }
                  leaf des3 {
                    type empty;
                    description
                      "Use DES3 as SCEP encryption algorithm";
                  }
                }  // choice scep-encryption-algorithm-options
              }  // container scep-encryption-algorithm
    
              container scep-digest-algorithm {
                presence
                  "enable scep-digest-algorithm";
                description
                  "SCEP digest algorithm";
                uses apply-advanced;
    
                choice scep-digest-algorithm-options {
                  leaf md5 {
                    type empty;
                    description
                      "Use MD5 as SCEP digest algorithm";
                  }
                  leaf sha1 {
                    type empty;
                    description
                      "Use SHA1 as SCEP digest algorithm";
                  }
                }  // choice scep-digest-algorithm-options
              }  // container scep-digest-algorithm
            }  // list certificate-id
          }  // container auto-re-enrollment
    
          container traceoptions {
            description "PKI 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
                    "certificate-verification" {
                    value 0;
                    description
                      "PKI certificate verification tracing";
                  }
                  enum "online-crl-check" {
                    value 1;
                    description
                      "PKI online crl tracing";
                  }
                  enum "enrollment" {
                    value 2;
                    description
                      "PKI certificate enrollment tracing";
                  }
                  enum "all" {
                    value 3;
                    description
                      "Trace with all flags enabled";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping security-pki
    
        grouping security-traceoptions {
          description
            "Trace options for key management 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 rate-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            default "0";
            description
              "Limit the incoming rate of trace messages";
          }
    
          container filter {
            description
              "Filter parameters for IKE traceoptions";
            uses apply-advanced;
    
            leaf fpc {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description "FPC slot number";
            }
    
            leaf pic {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description "PIC slot number";
            }
          }  // container filter
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Tracing parameters for IKE";
            leaf name {
              type enumeration {
                enum "timer" {
                  value 0;
                  description
                    "Trace internal timer events";
                }
                enum "routing-socket" {
                  value 1;
                  description
                    "Trace routing socket messages";
                }
                enum "parse" {
                  value 2;
                  description
                    "Trace configuration processing";
                }
                enum "config" {
                  value 3;
                  description
                    "Trace configuration download processing";
                }
                enum "ike" {
                  value 4;
                  description
                    "Trace IKE module processing";
                }
                enum "policy-manager" {
                  value 5;
                  description
                    "Trace policy manager processing";
                }
                enum "general" {
                  value 6;
                  description
                    "Trace general events";
                }
                enum "database" {
                  value 7;
                  description
                    "Trace security associations database events";
                }
                enum "certificates" {
                  value 8;
                  description
                    "Trace certificate events";
                }
                enum "snmp" {
                  value 9;
                  description
                    "Trace SNMP operations";
                }
                enum "thread" {
                  value 10;
                  description
                    "Trace thread processing";
                }
                enum "high-availability" {
                  value 11;
                  description
                    "Trace high-availability operations";
                }
                enum "next-hop-tunnels" {
                  value 12;
                  description
                    "Trace next-hop-tunnels operations";
                }
                enum "all" {
                  value 13;
                  description "Trace everything";
                }
              }
            }
          }  // list flag
        }  // grouping security-traceoptions
    
        grouping security-zone-type {
          description "Security zone";
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]._-]+$";
              junos:pattern-message "Must be a string consisting of letters, numbers, dashes and underscores";
              length "1 .. 63";
            }
            description "Name of the zone";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of zone";
          }
    
          leaf tcp-rst {
            type empty;
            description
              "Send RST for NON-SYN packet not matching TCP session";
          }
    
          container address-book {
            junos:must "(!("security address-book"))";
            junos:must-message "Zone specific address books are not allowed when there are global address books defined";
            description "Address book entries";
            uses address-book-type;
          }  // container address-book
    
          leaf screen {
            junos:must "("security screen ids-option $$")";
            junos:must-message "referenced ids-object must be defined under [security screen ids-option]";
            type string {
              length "1 .. 32";
            }
            description
              "Name of ids option object applied to the zone";
          }
    
          container host-inbound-traffic {
            description
              "Allowed system services & protocols";
            uses zone_host_inbound_traffic_t;
          }  // container host-inbound-traffic
    
          list interfaces {
            key "name";
            ordered-by user;
            description
              "Interfaces that are part of this zone";
            uses zone-interface-list-type;
          }  // list interfaces
    
          leaf application-tracking {
            type empty;
            description
              "Enable Application tracking support for this zone";
          }
    
          leaf source-identity-log {
            type empty;
            description
              "Show user and group info in session log for this zone";
          }
    
          container advance-policy-based-routing-profile {
            description
              "Enable Advance Policy Based Routing on this zone";
            uses apply-advanced;
    
            leaf profile {
              type string {
                length "1 .. 63";
              }
              description
                "Advance policy based routing profile name";
            }
          }  // container advance-policy-based-routing-profile
    
          leaf enable-reverse-reroute {
            type empty;
            description
              "Enable Reverse route lookup when there is change in ingress interface";
          }
    
          leaf unidirectional-session-refreshing {
            type empty;
            description
              "Enable unidirectional session refreshing on this zone";
          }
    
          container advanced-connection-tracking {
            description
              "Enable Advance Policy Based Routing on this zone";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Timeout value in seconds for advanced-connection-tracking table for this zone";
            }
    
            leaf mode {
              type enumeration {
                enum "allow-any-host" {
                  value 0;
                  description
                    "Create allow-any-host table, thus policies whose to-zone is this zone can lookup";
                }
                enum "allow-target-host" {
                  value 1;
                  description
                    "Create allow-target-host table, thus policies whose to-zone is this zone can lookup";
                }
                enum "allow-target-host-port" {
                  value 2;
                  description
                    "Create allow-target-host-port table, thus policies whose to-zone is this zone can lookup";
                }
              }
            }
    
            leaf track-all-policies-to-this-zone {
              type empty;
              description
                "Mandate all policies with to-zone set to this zone to do connection track table lookup";
            }
          }  // container advanced-connection-tracking
        }  // grouping security-zone-type
    
        grouping address-book-type {
          description
            "Configure security address book for the zone";
          uses apply-advanced;
    
          list address {
            key "name";
            ordered-by user;
            description
              "Define a security address";
            uses address_type;
          }  // list address
    
          list address-set {
            key "name";
            ordered-by user;
            description
              "Define a security address set";
            uses address_set_type;
          }  // list address-set
        }  // grouping address-book-type
    
        grouping security_intelligence_feeds {
          description
            "Specify the feed post action";
          uses apply-advanced;
    
          container add-source-ip-to-feed {
            description "Add Source IP to Feed";
            uses apply-advanced;
    
            leaf name-of-feed {
              type string {
                length "1 .. 64";
              }
              description
                "Specify the desired feed-name";
            }
          }  // container add-source-ip-to-feed
    
          container add-destination-ip-to-feed {
            description
              "Add Destination IP to Feed";
            uses apply-advanced;
    
            leaf name-of-feed {
              type string {
                length "1 .. 64";
              }
              description
                "Specify the desired feed-name";
            }
          }  // container add-destination-ip-to-feed
    
          container add-source-identity-to-feed {
            description
              "Add Source Identity to Feed";
            uses apply-advanced;
    
            leaf name-of-feed {
              type string {
                length "1 .. 64";
              }
              description
                "Specify the desired feed-name";
            }
          }  // container add-source-identity-to-feed
    
          container add-destination-identity-to-feed {
            description
              "Add Destination Identity to Feed";
            uses apply-advanced;
    
            leaf name-of-feed {
              type string {
                length "1 .. 64";
              }
              description
                "Specify the desired feed-name";
            }
          }  // container add-destination-identity-to-feed
        }  // grouping security_intelligence_feeds
    
        grouping server {
          description "Server settings";
          uses apply-advanced;
    
          leaf host {
            type string;
            description
              "Server host IP address or string host name";
          }
    
          leaf port {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1024 .. 65535";
              }
            }
            description "Server port";
          }
    
          leaf routing-instance {
            junos:must "("routing-instances $$")";
            junos:must-message "Routing-instance must be defined";
            type string;
            description "Routing instance name";
          }
    
          leaf source-address {
            type jt:ipaddr;
            description
              "Source ip address used to connect server";
          }
        }  // grouping server
    
        grouping server-active-leasequery-type {
          description "Allow active leasequery";
          uses apply-advanced;
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "120";
            description
              "Read/write timeout in seconds";
          }
    
          leaf idle-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "10 .. 3600";
              }
            }
            units "seconds";
            default "60";
            description
              "Idle-timeout in seconds";
          }
        }  // grouping server-active-leasequery-type
    
        grouping server-bulk-leasequery-type {
          description "Allow bulk leasequery";
          uses apply-advanced;
    
          leaf max-connections {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 10";
              }
            }
            default "3";
            description
              "Max TCP connections allowed at a time";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1000";
              }
            }
            units "seconds";
            default "120";
            description
              "Timeout for blocked connection";
          }
    
          leaf max-empty-replies {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 100";
              }
            }
            units "seconds";
            default "5";
            description
              "Maximum number of empty replies for a connection";
          }
    
          leaf restricted-requestor {
            type empty;
            description
              "Allow bulk leasequery only from restricted requestors";
          }
        }  // grouping server-bulk-leasequery-type
    
        grouping server-connection-type {
          description
            "Connection parameters per server";
          uses apply-advanced;
    
          leaf address {
            type jt:ipaddr;
            description "IP address";
          }
    
          leaf ca-certificate {
            type string {
              length "1 .. 256";
            }
            description
              "Ca-certificate file name";
          }
    
          leaf client-id {
            type string {
              length "1 .. 64";
            }
            description
              "Client ID for OAuth2 grant";
          }
    
          leaf client-secret {
            type string {
              length "1 .. 128";
            }
            description
              "Client secret for OAuth2 grant";
          }
        }  // grouping server-connection-type
    
        grouping server-group-type {
          uses apply-advanced;
    
          list server-group {
            key "name";
            ordered-by user;
            description
              "One or more server groups";
            leaf name {
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
                junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                length "1 .. 64";
              }
              description "Server group name";
            }
    
            uses apply-advanced;
    
            list address {
              key "name";
              max-elements 32;
              ordered-by user;
              description
                "IP Address of one or more DHCP servers";
              leaf name {
                type jt:ipaddr;
                description
                  "IP Address of DHCP server";
              }
    
              uses apply-advanced;
            }  // list address
          }  // list server-group
        }  // grouping server-group-type
    
        grouping server-leasequery-type {
          description "Allow leasequery";
          uses apply-advanced;
    
          leaf restricted-requestor {
            type empty;
            description
              "Allow leasequery only from restricted requestors";
          }
        }  // grouping server-leasequery-type
    
        grouping server-match-action-choice {
          uses apply-advanced;
    
          choice v4-action-choice {
            leaf forward-only {
              type empty;
              description
                "Forward without subscriber services";
            }
            leaf create-relay-entry {
              type empty;
              description
                "Create relay entry and allow subscriber services";
            }
          }  // choice v4-action-choice
        }  // grouping server-match-action-choice
    
        grouping server-match-v6-ascii-hex {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
    
            choice server-match-action-choice {
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
              leaf create-relay-entry {
                type empty;
                description
                  "Create relay entry and allow subscriber services";
              }
            }  // choice server-match-action-choice
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
    
            choice server-match-action-choice {
              leaf forward-only {
                type empty;
                description
                  "Forward without subscriber services when a match is made";
              }
              leaf create-relay-entry {
                type empty;
                description
                  "Create relay entry and allow subscriber services";
              }
            }  // choice server-match-action-choice
          }  // list hexadecimal
        }  // grouping server-match-v6-ascii-hex
    
        grouping server-v6-option-ascii-hex {
          uses apply-advanced;
    
          list ascii {
            key "name";
            description "ASCII string";
            leaf name {
              type string {
                length "1 .. 256";
              }
              description "ASCII string";
            }
    
            uses apply-advanced;
          }  // list ascii
    
          list hexadecimal {
            key "name";
            description "Hexadecimal string";
            leaf name {
              type string {
                junos:posix-pattern "^[[:xdigit:]]+$";
                junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                length "1 .. 512";
              }
              description "Hexadecimal string";
            }
    
            uses apply-advanced;
          }  // list hexadecimal
        }  // grouping server-v6-option-ascii-hex
    
        grouping session_timeout_type {
          uses apply-advanced;
    
          leaf tcp {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for tcp sessions";
          }
    
          leaf udp {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for udp sessions";
          }
    
          leaf ospf {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for ospf sessions";
          }
    
          leaf icmp {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for icmp sessions";
          }
    
          leaf icmp6 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for icmp6 sessions";
          }
    
          leaf others {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 86400";
              }
            }
            units "seconds";
            description
              "Timeout value for other sessions";
          }
        }  // grouping session_timeout_type
    
        grouping sla_policy_type {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "APBR policy name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of policy";
          }
    
          container match {
            description
              "Specify sla policy match-criteria";
            uses apply-advanced;
    
            choice source-address_choice {
              leaf-list source-address {
                type string;
                ordered-by user;
              }
            }  // choice source-address_choice
    
            choice destination-address_choice {
              leaf-list destination-address {
                type string;
                ordered-by user;
              }
            }  // choice destination-address_choice
    
            leaf source-address-excluded {
              type empty;
              description
                "Exclude source addresses";
            }
    
            leaf destination-address-excluded {
              type empty;
              description
                "Exclude destination addresses";
            }
    
            choice application_type_choice {
              leaf-list application {
                junos:must "((".. .. .. .. .. .. .. applications application $$" || (".. .. .. .. .. .. .. applications application-set $$" || (".. .. .. .. .. .. .. .. applications application $$" || ".. .. .. .. .. .. .. .. applications application-set $$"))))";
                junos:must-message "application or application-set must be defined";
                type string {
                  length "1 .. 63";
                }
                ordered-by user;
                description
                  "Specify application or application-set name to match";
              }
            }  // choice application_type_choice
    
            choice source_identity_choice {
              leaf-list source-identity {
                type string;
                ordered-by user;
              }
            }  // choice source_identity_choice
          }  // container match
    
          container then {
            description
              "Specify policy action to take when packet match criteria";
            uses apply-advanced;
    
            choice action {
              container application-services {
                description
                  "Application Services";
                uses sla_application_services_type;
              }  // container application-services
            }  // choice action
          }  // container then
    
          leaf scheduler-name {
            junos:must "("schedulers scheduler $$")";
            junos:must-message "scheduler must be defined";
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Name of scheduler";
          }
        }  // grouping sla_policy_type
    
        grouping sla_application_services_type {
          description "Application Services";
          uses apply-advanced;
    
          leaf advance-policy-based-routing-profile {
            junos:must "("security advance-policy-based-routing profile $$")";
            junos:must-message "advance-policy-based-routing profile must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Specify APBR profile name";
          }
        }  // grouping sla_application_services_type
    
        grouping softwires-object {
          description
            "Configure softwire feature";
          uses apply-advanced;
    
          list softwire-name {
            key "name";
            description
              "Configure softwire object";
            uses softwire-option-type;
          }  // list softwire-name
    
          container softwire-types {
            description
              "Configure softwire objects";
            uses apply-advanced;
    
            list v6rd {
              key "name";
              description
                "Configure v6rd object";
              uses softwire-option-type;
            }  // list v6rd
    
            list ds-lite {
              key "name";
              description
                "Configure ds-lite object";
              uses softwire-option-type;
            }  // list ds-lite
    
            list map-e {
              key "name";
              ordered-by user;
              description
                "Configure Map-e object";
              uses map-e-domain;
            }  // list map-e
          }  // container softwire-types
    
          list map-e {
            key "name";
            max-elements 1;
            ordered-by user;
            description
              "Configure a MAP-E domain and domain rules";
            uses map-e-domain;
          }  // list map-e
    
          container traceoptions {
            description
              "Trace options for Network Security DS-Lite";
            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 "flow" {
                    value 1;
                    description
                      "Trace flow events";
                  }
                  enum "all" {
                    value 2;
                    description
                      "Trace everything";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
    
          list rule-set {
            key "name";
            ordered-by user;
            description
              "Define a softwire rule set";
            uses sw-rule-set-object;
          }  // list rule-set
        }  // grouping softwires-object
    
        grouping map-e-domain {
          description "Configure a MAP-E domain";
          leaf name {
            type string {
              junos:posix-pattern "![_]";
              junos:pattern-message "A special character _ is not allowed";
              length "1 .. 11";
            }
            description "MAP-E domain name";
          }
    
          uses apply-advanced;
    
          leaf confidentiality {
            type empty;
            description
              "Configure JUNOS MAP-E confidentiality";
          }
    
          leaf br-address {
            type jt:unreadable;
            description "Ipv6 address of BR";
          }
    
          container end-user-prefix {
            description
              "Configure end-user-prefix value or source interface for obtaining end-user-prefix";
            uses apply-advanced;
    
            leaf prefix-value {
              junos:must "(!(".. auto"))";
              junos:must-message "Explicit end-user-prefix is not allowed when auto is configured";
              type jt:ipv6prefix;
              description "End user prefix";
            }
          }  // container end-user-prefix
    
          list rule {
            key "name";
            max-elements 101;
            ordered-by user;
            description
              "Configure a BMR or FMR rule for map-e ";
            uses map-e-rule;
          }  // list rule
    
          leaf role {
            type enumeration {
              enum "CE" {
                value 0;
                description "CE deployment";
              }
            }
            description
              "Define a role of the MAP-E";
          }
    
          leaf version {
            type enumeration {
              enum "3" {
                value 0;
                description
                  "Version 3: draft-ietf-softwire-map-03";
              }
            }
            description
              "Define version of the MAP-E";
          }
        }  // grouping map-e-domain
    
        grouping map-e-rule {
          description "Configure a MAP-E rule";
          leaf name {
            type string {
              junos:posix-pattern "![_]";
              junos:pattern-message "A special character _ is not allowed";
              length "1 .. 11";
            }
            description "MAP-E rule name";
          }
    
          uses apply-advanced;
    
          leaf rule-type {
            type enumeration {
              enum "BMR" {
                value 0;
                description
                  "Define BMR rule type";
              }
              enum "FMR" {
                value 1;
                description
                  "Define FMR rule type";
              }
            }
            description
              "Define a rule type of MAP-E";
          }
    
          leaf ipv4-prefix {
            type jt:unreadable;
            description "Ipv4 prefix";
          }
    
          leaf ipv6-prefix {
            type jt:unreadable;
            description "Ipv6 prefix";
          }
    
          leaf ea-bits-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 48";
              }
            }
            description "EA bits length";
          }
    
          leaf psid-offset {
            type jt:unreadable;
            description "PSID offset";
          }
    
          leaf psid-len {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 16";
              }
            }
            description "PSID length";
          }
    
          leaf mtu-v6 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1280 .. 9192";
              }
            }
            default "9192";
            description
              "MTU for the softwire tunnel";
          }
    
          leaf v4-reassembly {
            type empty;
            description
              "MAP-E IPv4 reassembly support";
          }
    
          leaf v6-reassembly {
            type empty;
            description
              "MAP-E IPv6 reassembly support";
          }
    
          leaf disable-auto-route {
            type empty;
            description
              "MAP-E Disable Auto Route";
          }
        }  // grouping map-e-rule
    
        grouping softwire-option-type {
          description
            "Configure softwire object";
          leaf name {
            type string {
              length "1 .. 23";
            }
            description
              "DS-Lite/Softwire object name";
          }
    
          uses apply-advanced;
    
          leaf softwire-concentrator {
            type jt:ipaddr;
            description "Concentrator address";
          }
    
          leaf softwire-type {
            type enumeration {
              enum "IPv4-in-IPv6" {
                value 0;
                description "Ipv4-in-IPv6";
              }
              enum "v6rd" {
                value 1;
                description "V6rd";
              }
            }
            default "IPv4-in-IPv6";
            description "Softwire-type";
          }
    
          leaf ipv4-prefix {
            type jt:ipv4prefix;
            description
              "6rd customer edge IPV4 prefix";
          }
    
          leaf v6rd-prefix {
            type jt:ipv6prefix;
            description
              "6rd domain's IPV6 prefix";
          }
    
          leaf mtu-v4 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "576 .. 9192";
              }
            }
            description
              "MTU for the softwire tunnel";
          }
    
          leaf mtu-v6 {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1280 .. 9192";
              }
            }
            description
              "MTU for the softwire tunnel";
          }
    
          leaf auto-update-mtu {
            type empty;
            description
              "Auto update MTU from received ICMPv6 messages";
          }
    
          leaf copy-dscp {
            type empty;
            description
              "Copy DSCP (type of service) from IPv6 to IPv4 header";
          }
    
          leaf flow-limit {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 16384";
              }
            }
            default "0";
            description
              "Max Number of IPv4 flows per Softwire";
          }
    
          leaf session-limit-per-prefix {
            junos:must "(!(".. flow-limit"))";
            junos:must-message "Cannot configure both flow-limit and session-limit-per-prefix in same softwire-concentrator";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 16384";
              }
            }
            default "0";
            description
              "Max number of sessions allowed per Softwire prefix";
          }
        }  // grouping softwire-option-type
    
        grouping sophos-scan-options {
          description "Anti-virus scan options";
          uses apply-advanced;
    
          choice uri-check-choice {
            leaf uri-check {
              type empty;
              description "Anti-virus uri-check";
            }
            leaf no-uri-check {
              type empty;
              description
                "Don't anti-virus uri-check";
            }
          }  // choice uri-check-choice
    
          leaf content-size-limit {
            type string;
            units "kilobytes";
            description "Content size limit";
          }
    
          leaf timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 1800";
              }
            }
            units "seconds";
            description "Scan engine timeout";
          }
        }  // grouping sophos-scan-options
    
        grouping spring-te-template-map {
          description
            "SPRING-TE template color map";
          leaf name {
            junos:must "("protocols source-packet-routing source-routing-path-template $$ primary")";
            junos:must-message "Referenced spring-te template doesn't exist or primary not configured in it";
            type string;
            description
              "Name of SPRING-TE template";
          }
    
          uses apply-advanced;
    
          choice colors {
            leaf-list color {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Set of color list to be mapped to corresponding SPRING-TE template";
            }
            leaf color-any {
              type empty;
              description
                "Map any color to corresponding SPRING-TE template";
            }
          }  // choice colors
        }  // grouping spring-te-template-map
    
        grouping springte_lsp_nh_obj {
          uses apply-advanced;
    
          leaf nexthop {
            type string {
              length "1 .. 128";
            }
            description
              "SPRING-TE LSP to use to reach destination";
          }
    
          container lsp-source {
            description
              "Source of tunnel creation";
            uses apply-advanced;
    
            choice lsp-src-choice {
              leaf pcep {
                type empty;
                description
                  "Path computation element protocol";
              }
              leaf static {
                type empty;
                description
                  "Static configuration";
              }
              leaf dtm {
                type empty;
                description
                  "Dynamic tunnel module";
              }
              leaf bgp {
                type empty;
                description "BGP SRTE";
              }
            }  // choice lsp-src-choice
          }  // container lsp-source
        }  // grouping springte_lsp_nh_obj
    
        grouping ssg-destination-nat-object {
          uses apply-advanced;
    
          list pool {
            key "name";
            ordered-by user;
            description
              "Define a destination address pool";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description "Pool name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of pool";
            }
    
            container routing-instance {
              description "Routing instance";
              uses apply-advanced;
    
              choice ri-name-choice {
                leaf default {
                  type empty;
                  description
                    "Default routing-instance";
                }
                leaf ri-name {
                  junos:must "(("routing-instances $$ instance-type virtual-router" || "routing-instances $$ instance-type vrf"))";
                  junos:must-message "Instance-type virtual-router or vrf must be defined under [routing-instances]";
                  junos:must "("routing-instances $$")";
                  junos:must-message "Routing-instance must be defined";
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                  }
                  description
                    "Routing-instance name";
                }
              }  // choice ri-name-choice
            }  // container routing-instance
    
            container address {
              description
                "Add address or address range to pool";
              leaf ipaddr {
                type jt:ipprefix;
                description
                  "IPv4 or IPv6 address or address range";
              }
    
              choice range-port-choice {
                container to {
                  description
                    "Upper limit of address range";
                  uses apply-advanced;
    
                  leaf ipaddr {
                    type jt:ipprefix;
                    description
                      "IPv4 or IPv6 upper limit of address range";
                  }
                }  // container to
                leaf port {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Specify the port value";
                }
              }  // choice range-port-choice
            }  // container address
          }  // list pool
    
          list port-forwarding {
            key "name";
            ordered-by user;
            description
              "Define a port-forwarding mapping pool";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description
                "Port Forwarding mapping name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of port forwarding mapping";
            }
    
            list destined-port {
              key "port translated-port";
              max-elements 32;
              ordered-by user;
              description
                "Port forwarding mappings";
              leaf port {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Destination port";
              }
    
              leaf translated-port {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "Translated port";
              }
            }  // list destined-port
          }  // list port-forwarding
    
          list rule-set {
            key "name";
            ordered-by user;
            description
              "Configurate a set of rules";
            leaf name {
              junos:must "((!("services nat source rule-set $$") && !("services nat static rule-set $$")))";
              junos:must-message "the rule set name should be unique across all types of nat";
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description "Rule-set name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of rule set";
            }
    
            container from {
              description
                "Where is the traffic from";
              choice from-context-choice {
                leaf-list routing-instance {
                  type string;
                  max-elements 8;
                  description
                    "Source routing instance list";
                }
                leaf-list routing-group {
                  type string;
                  max-elements 8;
                  description
                    "Source routing group list";
                }
                leaf-list zone {
                  type string;
                  max-elements 8;
                  description "Source zone list";
                }
                leaf-list interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  max-elements 8;
                  description
                    "Source interface list";
                }
              }  // choice from-context-choice
            }  // container from
    
            list rule {
              key "name";
              ordered-by user;
              description "Destination NAT rule";
              uses dest-nat-rule-object;
            }  // list rule
    
            leaf match-direction {
              type enumeration {
                enum "input" {
                  value 0;
                  description
                    "Match on input to interface";
                }
                enum "output" {
                  value 1;
                  description
                    "Match on output from interface";
                }
              }
              description "Match direction";
            }
          }  // list rule-set
        }  // grouping ssg-destination-nat-object
    
        grouping dest-nat-rule-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 31";
            }
            description "Rule name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of rule";
          }
    
          container dest-nat-rule-match {
            description
              "Specify Destination NAT rule match criteria";
            uses apply-advanced;
    
            leaf-list source-address {
              type string;
              max-elements 8;
              ordered-by user;
              description "Source address";
            }
    
            leaf-list source-address-name {
              type string;
              max-elements 8;
              ordered-by user;
              description
                "Address/address-set from address book";
            }
    
            choice dst-choice {
              container destination-address {
                description
                  "Destination address";
                choice dst-addr-choice {
                  leaf dst-addr {
                    type jt:ipprefix;
                    description
                      "IPv4 or IPv6 destination address";
                  }
                  leaf any-unicast {
                    type empty;
                    description
                      "Match any unicast address";
                  }
                }  // choice dst-addr-choice
              }  // container destination-address
              container destination-address-name {
                description
                  "Address from address book";
                leaf dst-addr-name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Address from address book";
                }
              }  // container destination-address-name
            }  // choice dst-choice
    
            list destination-port {
              key "name";
              max-elements 8;
              ordered-by user;
              description "Destination port";
              leaf name {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port or lower limit of port range";
              }
    
              container to {
                description
                  "Port range upper limit";
                uses apply-advanced;
    
                leaf high {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Upper limit of port range";
                }
              }  // container to
            }  // list destination-port
    
            leaf-list protocol {
              type string;
              max-elements 4;
              ordered-by user;
              description "IP Protocol";
            }
    
            leaf-list application {
              type string;
              ordered-by user;
            }
          }  // container dest-nat-rule-match
    
          container then {
            description "Then action";
            uses apply-advanced;
    
            container destination-nat {
              description
                "Destination NAT action";
              uses apply-advanced;
    
              choice action {
                leaf off {
                  type empty;
                  description "No action";
                }
                container pool {
                  description
                    "Use Destination NAT pool";
                  uses apply-advanced;
    
                  leaf pool-name {
                    junos:must "(".. .. .. .. .. .. .. .. nat destination pool $$")";
                    junos:must-message "Destination NAT pool name must be defined";
                    type string {
                      length "1 .. 31";
                    }
                    description
                      "Name of Destination NAT pool";
                  }
                }  // container pool
                leaf destination-prefix {
                  type jt:ipprefix-only;
                  description
                    "Destination prefix to be used for NAT64 and 464 translation type";
                }
              }  // choice action
    
              container xlat-source-rule {
                junos:must "(".. destination-prefix")";
                junos:must-message "'xlat-source-rule' can be configured only for NAT464 destination rule";
                description
                  "Set source nat rule to match for NAT464";
                uses apply-advanced;
    
                list rule-set {
                  key "name";
                  max-elements 1;
                  ordered-by user;
                  description
                    "Source nat rule-set";
                  leaf name {
                    junos:must "("services nat source rule-set $$")";
                    junos:must-message "source rule-set must be defined under 'services nat'";
                    type string {
                      junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                      junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                      length "1 .. 31";
                    }
                    description
                      "Source nat rule-set name";
                  }
    
                  uses apply-advanced;
    
                  leaf rule {
                    type string {
                      junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                      junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                      length "1 .. 31";
                    }
                    description
                      "Source NAT rule name";
                  }
                }  // list rule-set
              }  // container xlat-source-rule
    
              container port-forwarding-mappings {
                description
                  "Use Destination NAT port forwarding mapping pool";
                uses apply-advanced;
    
                leaf pf-name {
                  junos:must "(".. .. .. .. .. .. .. .. nat destination port-forwarding $$")";
                  junos:must-message "Port forwarding pool mappings must be defined";
                  type string {
                    length "1 .. 31";
                  }
                  description
                    "Name of Port forwarding mappings";
                }
              }  // container port-forwarding-mappings
    
              container rule-session-count-alarm {
                description
                  "Config rule-session-count-alarm to destination rule";
                uses nat-rule-session-count-alarm-object;
              }  // container rule-session-count-alarm
            }  // container destination-nat
    
            leaf syslog {
              type empty;
              description
                "System log information about the packet";
            }
          }  // container then
        }  // grouping dest-nat-rule-object
    
        grouping nat-rule-session-count-alarm-object {
          uses apply-advanced;
    
          leaf raise-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Raise threshold for rule session count alarm";
          }
    
          leaf clear-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 4294967295";
              }
            }
            description
              "Clear threshold for session count hit alarm";
          }
        }  // grouping nat-rule-session-count-alarm-object
    
        grouping ssg-proxy-arp-object {
          uses apply-advanced;
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface with proxy arp configured";
            uses ssg-interface-object;
          }  // list interface
        }  // grouping ssg-proxy-arp-object
    
        grouping ssg-interface-object {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          uses apply-advanced;
    
          list address {
            key "name";
            ordered-by user;
            description "Proxy ARP address";
            leaf name {
              type jt:ipv4prefix;
              description
                "Address or address range";
            }
    
            container to {
              description
                "Upper limit of address range";
              uses apply-advanced;
    
              leaf ipaddr {
                type jt:ipv4prefix;
                description
                  "Upper limit of address range";
              }
            }  // container to
          }  // list address
        }  // grouping ssg-interface-object
    
        grouping ssg-proxy-ndp-object {
          uses apply-advanced;
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface with proxy arp configured";
            uses ssg-proxy-ndp-interface-object;
          }  // list interface
        }  // grouping ssg-proxy-ndp-object
    
        grouping ssg-proxy-ndp-interface-object {
          leaf name {
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          uses apply-advanced;
    
          list address {
            key "name";
            ordered-by user;
            description "Proxy ndp address";
            leaf name {
              type jt:ipv6prefix;
              description
                "Address or address range";
            }
    
            container to {
              description
                "Upper limit of address range";
              uses apply-advanced;
    
              leaf ipv6addr {
                type jt:ipv6addr;
                description
                  "Upper limit of address range";
              }
            }  // container to
          }  // list address
        }  // grouping ssg-proxy-ndp-interface-object
    
        grouping ssg-source-nat-object {
          uses apply-advanced;
    
          container persistent-nat {
            description "Persistent NAT info";
            container log {
              description
                "Configure persistent NAT log";
              choice enable-disable {
                leaf disable {
                  type empty;
                  description
                    "Disable Persistent NAT log";
                }
              }  // choice enable-disable
            }  // container log
          }  // container persistent-nat
    
          list pool {
            key "name";
            ordered-by user;
            description
              "Define a source address pool";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description "Pool name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of pool";
            }
    
            container routing-instance {
              description "Routing instance";
              uses apply-advanced;
    
              leaf ri-name {
                junos:must "("routing-instances $$ instance-type virtual-router")";
                junos:must-message "Instance-type virtual-router must be defined under [routing-instances]";
                junos:must "("routing-instances $$")";
                junos:must-message "Routing-instance must be defined";
                type string {
                  junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                  junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                }
                description
                  "Routing instance name";
              }
            }  // container routing-instance
    
            list address {
              key "name";
              max-elements 8;
              ordered-by user;
              description "Add address to pool";
              leaf name {
                type jt:ipprefix;
                description
                  "IPv4 or IPv6 address or address range";
              }
    
              container to {
                description
                  "Upper limit of address range";
                uses apply-advanced;
    
                leaf ipaddr {
                  type jt:ipprefix;
                  description
                    "IPv4 or IPv6 upper limit of address range";
                }
              }  // container to
            }  // list address
    
            container host-address-base {
              description
                "The base of host address";
              leaf ipaddr {
                junos:must "(!(".. .. port range"))";
                junos:must-message "'port range...' must not be configured when configure host-address-base";
                type jt:ipprefix;
                description
                  "IPv4 or IPv6 base address";
              }
            }  // container host-address-base
    
            container port {
              description
                "Config port attribute to pool";
              uses apply-advanced;
    
              choice port-choice {
                leaf no-translation {
                  junos:must "(!(".. automatic"))";
                  junos:must-message "'automatic' must not be configured when configure port no-translation";
                  junos:must "(!(".. preserve-range"))";
                  junos:must-message "'preserve-range' must not be configured when configure port no-translation";
                  junos:must "(!(".. preserve-parity"))";
                  junos:must-message "'preserve-parity' must not be configured when configure port no-translation";
                  type empty;
                  description
                    "Do not perform port translation";
                }
                container range {
                  description "Port range";
                  uses apply-advanced;
    
                  choice port-assign-choice {
                    leaf random-allocation {
                      junos:must "(!(".. .. .. .. .. .. source pool $$ port no-translation"))";
                      junos:must-message "'port no-translation' must not be configured when configure port assignment as random";
                      type empty;
                      description
                        "Allocate port randomly";
                    }
                    leaf round-robin {
                      junos:must "(!(".. .. .. .. .. .. source pool $$ port no-translation"))";
                      junos:must-message "'port no-translation' must not be configured when configure port assignment as round-robin";
                      type empty;
                      description
                        "Allocate port round-robin";
                    }
                  }  // choice port-assign-choice
    
                  leaf low {
                    junos:must "(!(".. .. .. host-address-base"))";
                    junos:must-message "'host-address-base' must not be configured when configure port range";
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint16 {
                        range "1024 .. 65535";
                      }
                    }
                    description
                      "Lower limit of port range";
                  }
    
                  container to {
                    description
                      "Port range upper limit";
                    uses apply-advanced;
    
                    leaf high {
                      junos:must "(!(".. .. .. .. host-address-base"))";
                      junos:must-message "'host-address-base' must not be configured when configure port range";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1024 .. 65535";
                        }
                      }
                      description
                        "Upper limit of port range";
                    }
                  }  // container to
    
                  container twin-port {
                    description
                      "Twin port range";
                    uses apply-advanced;
    
                    leaf low {
                      junos:must "(!(".. .. .. .. host-address-base"))";
                      junos:must-message "'host-address-base' must not be configured when configure twin port range";
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "63488 .. 65535";
                        }
                      }
                      description
                        "Lower limit of twin port range";
                    }
    
                    container to {
                      description
                        "Twin port range upper limit";
                      uses apply-advanced;
    
                      leaf high {
                        junos:must "(!(".. .. .. .. .. host-address-base"))";
                        junos:must-message "'host-address-base' must not be configured when configure twin port range";
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint16 {
                            range
                              "63488 .. 65535";
                          }
                        }
                        description
                          "Upper limit of twin port range";
                      }
                    }  // container to
                  }  // container twin-port
                }  // container range
                container automatic {
                  description "Port assignment";
                  uses apply-advanced;
    
                  choice port-assign-choice {
                    leaf random-allocation {
                      junos:must "(!(".. .. .. .. .. .. source pool $$ port no-translation"))";
                      junos:must-message "'port no-translation' must not be configured when configure port assignment as random";
                      type empty;
                      description
                        "Allocate port randomly";
                    }
                    leaf round-robin {
                      junos:must "(!(".. .. .. .. .. .. source pool $$ port no-translation"))";
                      junos:must-message "'port no-translation' must not be configured when configure port assignment as round-robin";
                      type empty;
                      description
                        "Allocate port by round-robin";
                    }
                  }  // choice port-assign-choice
                }  // container automatic
              }  // choice port-choice
    
              leaf port-overloading-factor {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "2 .. 32";
                  }
                }
                description
                  "Port overloading factor for each IP";
              }
    
              container block-allocation {
                presence
                  "enable block-allocation";
                description
                  "Port block allocation";
                uses block-allocation-object;
              }  // container block-allocation
    
              container deterministic {
                presence "enable deterministic";
                description
                  "Deterministic nat allocation";
                uses deterministic-object;
              }  // container deterministic
    
              leaf preserve-parity {
                junos:must "(!(".. .. .. .. .. source pool $$ port no-translation"))";
                junos:must-message "'port no-translation' must not be configured when configure preserve-parity";
                type empty;
                description
                  "Allocate port as the same parity as incoming port";
              }
    
              leaf preserve-range {
                junos:must "(!(".. .. .. .. .. source pool $$ port no-translation"))";
                junos:must-message "'port no-translation' must not be configured when configure preserve-range";
                type empty;
                description
                  "Allocate port from the same port range as incoming port";
              }
            }  // container port
    
            container overflow-pool {
              junos:must "(".. .. .. source pool ${pool} port no-translation")";
              junos:must-message "'port no-translation' must be configured on original address pool";
              description
                "Specify an overflow pool";
              choice overflow-pool-choice {
                leaf pool-name {
                  junos:must "(!(".. .. .. .. source pool $$ host-address-base"))";
                  junos:must-message "'host-address-base' must not be configured on overflow address pool";
                  junos:must "(!(".. .. .. .. source pool $$ port no-translation"))";
                  junos:must-message "'port no-translation' must not be configured on overflow address pool";
                  junos:must "(!(".. .. .. .. source pool ${pool} overflow-pool ${pool}"))";
                  junos:must-message "Overflow address pool must not be original address pool";
                  junos:must "(".. .. .. .. source pool $$")";
                  junos:must-message "Overflow address pool must be defined under [nat source pool]";
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                    length "1 .. 31";
                  }
                  description
                    "Name of source address pool";
                }
                leaf interface {
                  type empty;
                  description
                    "Allow interface pool to support overflow";
                }
              }  // choice overflow-pool-choice
            }  // container overflow-pool
    
            leaf address-shared {
              type empty;
              description
                "Allow multiple hosts to share an externel address";
            }
    
            container address-pooling {
              description
                "Specify the address-pooling behavior";
              choice pooling-choice {
                leaf paired {
                  type empty;
                  description
                    "Allow address-pooling paired for a source pool with port translation";
                }
                leaf no-paired {
                  type empty;
                  description
                    "Allow address-pooling no-paired for a source pool without port translation";
                }
              }  // choice pooling-choice
            }  // container address-pooling
    
            container address-persistent {
              description
                "Specify the address-persistent behavior";
              container subscriber {
                description
                  "Configure address persistent for subscriber";
                leaf ipv6-prefix-length {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "8 .. 128";
                    }
                  }
                  description
                    "Ipv6 prefix length for address persistent";
                }
              }  // container subscriber
            }  // container address-persistent
    
            container pool-utilization-alarm {
              description
                "Config pool-utilization-alarm to pool";
              uses source-nat-pool-utilization-alarm-object;
            }  // container pool-utilization-alarm
    
            leaf ei-mapping-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "120 .. 86400";
                }
              }
              units "second";
              description
                "Endpoint-independent mapping timeout";
            }
    
            leaf mapping-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "120 .. 86400";
                }
              }
              units "second";
              description
                "Address-pooling paired and endpoint-independent mapping timeout";
            }
    
            leaf limit-ports-per-host {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "2 .. 65535";
                }
              }
              description
                "Number of ports allocated per host";
            }
    
            container allocation-domain {
              description
                "Specify map-e domain name for pool";
              leaf mape-domain-name {
                junos:must "(!(".. .. address"))";
                junos:must-message "'address...' must not be configured when configure allocation-domain";
                junos:must "("security softwires map-e $$")";
                junos:must-message "mape domain must be defined";
                type string {
                  length "1 .. 31";
                }
                description
                  "Name of map-e domain";
              }
    
              container allocation-rule {
                description
                  "Specify map-e rule name for pool";
                leaf mape-rule-name {
                  type string {
                    length "1 .. 31";
                  }
                  description
                    "Name of map-e rule";
                }
              }  // container allocation-rule
            }  // container allocation-domain
          }  // list pool
    
          leaf address-persistent {
            type empty;
            description
              "Allow source address to maintain same translation";
          }
    
          leaf session-persistence-scan {
            type empty;
            description
              "Allow source to maintain session when session scan";
          }
    
          leaf session-drop-hold-down {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "30 .. 28800";
              }
            }
            description
              "Session drop hold down time";
          }
    
          container pool-utilization-alarm {
            description
              "Configure pool utilization alarm";
            uses source-nat-pool-utilization-alarm-object;
          }  // container pool-utilization-alarm
    
          container port-randomization {
            description
              "Configure Source NAT port randomization";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable Source NAT port randomization";
              }
            }  // choice enable-disable
          }  // container port-randomization
    
          container port-round-robin {
            description
              "Configure Source NAT port randomization";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable Source NAT port randomization";
              }
            }  // choice enable-disable
          }  // container port-round-robin
    
          leaf port-scaling-enlargement {
            type empty;
            description
              "Configure source port scaling to 2.4G only for NGSPC";
          }
    
          leaf pool-distribution {
            type empty;
            description
              "Configure Source pool distribution, the APPCP bottleneck of NAT CPS can be alleviated.";
          }
    
          container pool-default-port-range {
            description
              "Configure Source NAT default port range";
            leaf low {
              junos:must "(!(any "security nat source pool <*> host-address-base"))";
              junos:must-message "'host-address-base' must not be configured when configure port range";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16;
              }
              description
                "Lower limit of port range";
            }
    
            container to {
              description
                "Port range upper limit";
              uses apply-advanced;
    
              leaf high {
                junos:must "(!(any "security nat source pool <*> host-address-base"))";
                junos:must-message "'host-address-base' must not be configured when configure port range";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16;
                }
                description
                  "Upper limit of port range";
              }
            }  // container to
          }  // container pool-default-port-range
    
          container pool-default-twin-port-range {
            description
              "Configure Source NAT default twin port range";
            leaf low {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "63488 .. 65535";
                }
              }
              description
                "Lower limit of twin port range";
            }
    
            container to {
              description
                "Twin port range upper limit";
              uses apply-advanced;
    
              leaf high {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "63488 .. 65535";
                  }
                }
                description
                  "Upper limit of twin port range";
              }
            }  // container to
          }  // container pool-default-twin-port-range
    
          container interface {
            description
              "Configure interface port overloading for persistent NAT";
            uses apply-advanced;
    
            choice interface-choice {
              container port-overloading {
                description
                  "Configure port overloading";
                leaf off {
                  type empty;
                  description
                    "Turn off interface port over-loading";
                }
              }  // container port-overloading
              leaf port-overloading-factor {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port overloading factor for interface NAT";
              }
            }  // choice interface-choice
          }  // container interface
    
          list rule-set {
            key "name";
            ordered-by user;
            description
              "Configurate a set of rules";
            leaf name {
              junos:must "((!("services nat destination rule-set $$") && !("services nat static rule-set $$")))";
              junos:must-message "the rule set name should be unique across all types of nat";
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description "Rule-set name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of rule set";
            }
    
            container from {
              description
                "Where is the traffic from";
              choice from-context-choice {
                leaf-list routing-instance {
                  type string;
                  max-elements 8;
                  description
                    "Source routing instance list";
                }
                leaf-list routing-group {
                  type string;
                  max-elements 8;
                  description
                    "Source routing group list";
                }
                leaf-list zone {
                  type string;
                  max-elements 8;
                  description "Source zone list";
                }
                leaf-list interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  max-elements 8;
                  description
                    "Source interface list";
                }
              }  // choice from-context-choice
            }  // container from
    
            container to {
              description
                "Where is the traffic to";
              choice from-context-choice {
                leaf-list routing-instance {
                  type string;
                  max-elements 8;
                  description
                    "Destination routing instance list";
                }
                leaf-list routing-group {
                  type string;
                  max-elements 8;
                  description
                    "Destination routing group list";
                }
                leaf-list zone {
                  type string;
                  max-elements 8;
                  description
                    "Destination zone list";
                }
                leaf-list interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  max-elements 8;
                  description
                    "Destination interface list";
                }
              }  // choice from-context-choice
            }  // container to
    
            list rule {
              key "name";
              ordered-by user;
              description "Source NAT rule";
              uses src-nat-rule-object;
            }  // list rule
    
            leaf match-direction {
              type enumeration {
                enum "input" {
                  value 0;
                  description
                    "Match on input to interface";
                }
                enum "output" {
                  value 1;
                  description
                    "Match on output from interface";
                }
              }
              description "Match direction";
            }
          }  // list rule-set
        }  // grouping ssg-source-nat-object
    
        grouping block-allocation-object {
          description "Port block allocation";
          uses apply-advanced;
    
          leaf block-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 64512";
              }
            }
            description "Block size";
          }
    
          leaf maximum-blocks-per-host {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 512";
              }
            }
            description
              "Maximum block number per host";
          }
    
          leaf active-block-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            description
              "Active block timeout interval";
          }
    
          leaf interim-logging-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1800 .. 86400";
              }
            }
            description
              "Interim Logging interval";
          }
    
          leaf last-block-recycle-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "120 .. 864000";
              }
            }
            description
              "Last Block recycle timeout interval";
          }
    
          container log {
            description
              "Configure port block log";
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable PBA port block log";
              }
            }  // choice enable-disable
          }  // container log
        }  // grouping block-allocation-object
    
        grouping deterministic-object {
          description
            "Deterministic nat allocation";
          uses apply-advanced;
    
          leaf block-size {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16;
            }
            description "Block size";
          }
    
          leaf det-nat-configuration-log-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1800 .. 86400";
              }
            }
            description
              "Deterministic nat configuration logging interval";
          }
    
          container host {
            description "Host address";
            leaf-list address {
              type jt:ipprefix;
              max-elements 8;
              ordered-by user;
              description "Host ip address";
            }
    
            leaf-list address-name {
              type string;
              max-elements 8;
              ordered-by user;
              description
                "Host address/address-set from address book";
            }
          }  // container host
    
          leaf include-boundary-addresses {
            type empty;
            description
              "Include network and broadcast in 'match' source address";
          }
        }  // grouping deterministic-object
    
        grouping source-nat-pool-utilization-alarm-object {
          uses apply-advanced;
    
          leaf raise-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "50 .. 100";
              }
            }
            description
              "Raise threshold for pool utilization alarm";
          }
    
          leaf clear-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "40 .. 100";
              }
            }
            description
              "Clear threshold for pool utilization alarm";
          }
        }  // grouping source-nat-pool-utilization-alarm-object
    
        grouping src-nat-rule-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 31";
            }
            description "Source NAT Rule name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of rule";
          }
    
          container src-nat-rule-match {
            description
              "Specify Source NAT rule match criteria";
            uses apply-advanced;
    
            leaf-list source-address {
              type string;
              max-elements 8;
              ordered-by user;
              description "Source address";
            }
    
            leaf-list source-address-name {
              type string;
              max-elements 8;
              ordered-by user;
              description
                "Address/address-set from address book";
            }
    
            list source-port {
              key "name";
              max-elements 8;
              ordered-by user;
              description "Source port";
              leaf name {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port or lower limit of port range";
              }
    
              container to {
                description
                  "Port range upper limit";
                uses apply-advanced;
    
                leaf high {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Upper limit of port range";
                }
              }  // container to
            }  // list source-port
    
            leaf-list destination-address {
              type string;
              max-elements 8;
              ordered-by user;
              description "Destination address";
            }
    
            leaf-list destination-address-name {
              type string;
              max-elements 8;
              ordered-by user;
              description
                "Address/address-set from address book";
            }
    
            list destination-port {
              key "name";
              max-elements 8;
              ordered-by user;
              description "Destination port";
              leaf name {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port or lower limit of port range";
              }
    
              container to {
                description
                  "Port range upper limit";
                uses apply-advanced;
    
                leaf high {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Upper limit of port range";
                }
              }  // container to
            }  // list destination-port
    
            leaf-list protocol {
              type string;
              max-elements 4;
              ordered-by user;
              description "IP Protocol";
            }
    
            leaf-list application {
              type string;
              ordered-by user;
            }
          }  // container src-nat-rule-match
    
          container then {
            description "Then action";
            uses apply-advanced;
    
            container source-nat {
              description "Source NAT action";
              uses apply-advanced;
    
              choice action {
                leaf off {
                  type empty;
                  description "No action";
                }
                container pool {
                  description
                    "Use Source NAT pool";
                  uses apply-advanced;
    
                  leaf pool-name {
                    junos:must "(".. .. .. .. .. .. .. .. nat source pool $$")";
                    junos:must-message "Source NAT pool name must be defined";
                    type string {
                      length "1 .. 31";
                    }
                    description
                      "Name of Source NAT pool";
                  }
    
                  container persistent-nat {
                    presence
                      "enable persistent-nat";
                    description
                      "Persistent NAT info";
                    uses persistent-nat-object;
                  }  // container persistent-nat
                }  // container pool
                container interface {
                  presence "enable interface";
                  description
                    "Use egress interface address";
                  uses apply-advanced;
    
                  container persistent-nat {
                    presence
                      "enable persistent-nat";
                    description
                      "Persistent NAT info";
                    uses persistent-nat-object;
                  }  // container persistent-nat
                }  // container interface
              }  // choice action
    
              leaf clat-prefix {
                junos:must "((".. .. .. match source-address" || ".. .. .. match source-address-name"))";
                junos:must-message "source-address or source-address-name is required for Clat-prefix";
                type jt:ipprefix-only;
                description
                  "An IPv6 prefix to be used for XLAT464 and prefix length can only be 32/40/48/56/64/96";
              }
    
              leaf clat-ipv6-prefix-length {
                junos:must "(!(".. .. .. match"))";
                junos:must-message "'match' criteria is not applicable when 'clat-ipv6-prefix-length' is configured.";
                junos:must "(!(".. clat-prefix"))";
                junos:must-message "clat-ipv6-prefix-length cannot be configured along with clat-prefix. Either clat-prefix or clat-ipv6-prefix-length can be configured.";
                type enumeration {
                  enum "32" {
                    value 0;
                    description
                      "The ipv6 prefix length of 32";
                  }
                  enum "40" {
                    value 1;
                    description
                      "The ipv6 prefix length of 40";
                  }
                  enum "48" {
                    value 2;
                    description
                      "The ipv6 prefix length of 48";
                  }
                  enum "56" {
                    value 3;
                    description
                      "The ipv6 prefix length of 56";
                  }
                  enum "64" {
                    value 4;
                    description
                      "The ipv6 prefix length of 64";
                  }
                  enum "96" {
                    value 5;
                    description
                      "The ipv6 prefix length of 96";
                  }
                }
                description
                  "The ipv6 prefix length for CLAT source address";
              }
    
              container rule-session-count-alarm {
                description
                  "Config rule-session-count-alarm to source rule";
                uses nat-rule-session-count-alarm-object;
              }  // container rule-session-count-alarm
    
              container mapping-type {
                description
                  "Source nat mapping type";
                leaf endpoint-independent {
                  type empty;
                  description
                    "Endpoint independent mapping";
                }
    
                leaf address-pooling-paired {
                  type empty;
                  description
                    "Address pooling paired mapping";
                }
              }  // container mapping-type
    
              container secure-nat-mapping {
                description
                  "Mapping options for enhanced security";
                leaf eif-flow-limit {
                  junos:must "(".. .. filtering-type")";
                  junos:must-message "eif-flow-limit applies only to filtering-type";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint16 {
                      range "0 .. 65534";
                    }
                  }
                  description
                    "Number of inbound flows to be allowed for a EIF mapping";
                }
    
                container mapping-refresh {
                  description
                    "Enable timer refresh option";
                  choice refresh-choice {
                    leaf inbound {
                      type empty;
                      description
                        "Enable timer refresh for inbound connections only";
                    }
                    leaf outbound {
                      type empty;
                      description
                        "Enable timer refresh for outbound connections only";
                    }
                    leaf inbound-outbound {
                      type empty;
                      description
                        "Enable timer refresh for inbound & outbound connections";
                    }
                  }  // choice refresh-choice
                }  // container mapping-refresh
              }  // container secure-nat-mapping
    
              container filtering-type {
                junos:must "(".. mapping-type endpoint-independent")";
                junos:must-message "endpoint independent filtering can not be configured with endpoint-independent mapping only";
                description
                  "Source NAT filtering type";
                uses apply-advanced;
    
                container endpoint-independent {
                  presence
                    "enable endpoint-independent";
                  description
                    "Endpoint independent filtering";
                  uses apply-advanced;
    
                  list prefix-list {
                    key "name";
                    ordered-by user;
                    description
                      "One or more named lists of source prefixes to match";
                    leaf name {
                      type string {
                        length "1 .. 63";
                      }
                      description
                        "Name of prefix list to match against";
                    }
    
                    leaf except {
                      type empty;
                      description
                        "Name of prefix list not to match against";
                    }
                  }  // list prefix-list
                }  // container endpoint-independent
              }  // container filtering-type
            }  // container source-nat
    
            leaf syslog {
              type empty;
              description
                "System log information about the packet";
            }
          }  // container then
        }  // grouping src-nat-rule-object
    
        grouping persistent-nat-object {
          uses apply-advanced;
    
          container permit {
            description
              "Persistent NAT permit configure";
            choice persistent-nat-type-choice {
              leaf any-remote-host {
                type empty;
                description
                  "Permit any remote host";
              }
              leaf target-host {
                type empty;
                description "Permit target host";
              }
              leaf target-host-port {
                type empty;
                description
                  "Permit target host port";
              }
            }  // choice persistent-nat-type-choice
          }  // container permit
    
          leaf address-mapping {
            type empty;
            description
              "Address-to-address mapping";
          }
    
          leaf inactivity-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "60 .. 7200";
              }
            }
            description
              "Inactivity timeout value";
          }
    
          leaf max-session-number {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "8 .. 65536";
              }
            }
            description
              "The maximum session number value";
          }
        }  // grouping persistent-nat-object
    
        grouping ssg-static-nat-object {
          uses apply-advanced;
    
          list rule-set {
            key "name";
            ordered-by user;
            description
              "Configurate a set of rules";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 31";
              }
              description "Rule-set name";
            }
    
            uses apply-advanced;
    
            leaf description {
              type string {
                junos:posix-pattern "^[^&<>
    ]+$";
                junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
                length "1 .. 900";
              }
              description
                "Text description of rule set";
            }
    
            container from {
              description
                "Where is the traffic from";
              choice from-context-choice {
                leaf-list routing-instance {
                  type string;
                  max-elements 8;
                  description
                    "Source routing instance list";
                }
                leaf-list routing-group {
                  type string;
                  max-elements 8;
                  description
                    "Source routing group list";
                }
                leaf-list zone {
                  type string;
                  max-elements 8;
                  description "Source zone list";
                }
                leaf-list interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  max-elements 8;
                  description
                    "Source interface list";
                }
              }  // choice from-context-choice
            }  // container from
    
            list rule {
              key "name";
              ordered-by user;
              description "Static NAT rule";
              uses static-nat-rule-object;
            }  // list rule
    
            leaf match-direction {
              type enumeration {
                enum "input" {
                  value 0;
                  description
                    "Match on input to interface";
                }
                enum "output" {
                  value 1;
                  description
                    "Match on output from interface";
                }
              }
              description "Match direction";
            }
          }  // list rule-set
        }  // grouping ssg-static-nat-object
    
        grouping static-nat-rule-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 31";
            }
            description "Static Rule name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^[^&<>
    ]+$";
              junos:pattern-message "Must be a string excluding '&', '<', '>' and '
    '";
              length "1 .. 900";
            }
            description
              "Text description of rule";
          }
    
          container static-nat-rule-match {
            description
              "Specify Static NAT rule match criteria";
            uses apply-advanced;
    
            leaf-list source-address {
              type jt:ipprefix;
              max-elements 8;
              ordered-by user;
              description "Source address";
            }
    
            leaf-list source-address-name {
              type string;
              max-elements 8;
              ordered-by user;
              description
                "Address from address book";
            }
    
            list source-port {
              key "name";
              max-elements 8;
              ordered-by user;
              description "Source port";
              leaf name {
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port or lower limit of port range";
              }
    
              container to {
                description
                  "Port range upper limit";
                uses apply-advanced;
    
                leaf high {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Upper limit of port range";
                }
              }  // container to
            }  // list source-port
    
            choice dst-choice {
              container destination-address {
                description
                  "Destination address";
                leaf dst-addr {
                  type jt:ipprefix;
                  description
                    "IPv4 or IPv6 Destination address prefix";
                }
              }  // container destination-address
              container destination-address-name {
                description
                  "Address from address book";
                leaf dst-addr-name {
                  type string {
                    length "1 .. 63";
                  }
                  description
                    "Address from address book";
                }
              }  // container destination-address-name
            }  // choice dst-choice
    
            container destination-port {
              description "Destination port";
              leaf low {
                junos:must "((".. .. .. then static-nat prefix mapped-port" || ".. .. .. then static-nat prefix-name mapped-port"))";
                junos:must-message "'then static-nat prefix mapped-port ...' or 'then static-nat prefix-name mapped-port' must be configured when configure 'destination-port'";
                type union {
                  type uint16;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Port or lower limit of port range";
              }
    
              container to {
                description
                  "Port range upper limit";
                uses apply-advanced;
    
                leaf high {
                  type union {
                    type uint16;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Upper limit of port range";
                }
              }  // container to
            }  // container destination-port
          }  // container static-nat-rule-match
    
          container then {
            description "Then action";
            uses apply-advanced;
    
            container static-nat {
              description "Static NAT action";
              uses apply-advanced;
    
              choice prefix-choice {
                container inet {
                  presence "enable inet";
                  description
                    "Translated to IPv4 address";
                  uses apply-advanced;
    
                  leaf routing-instance {
                    type string;
                    description
                      "Routing instance";
                  }
                }  // container inet
                container prefix {
                  description "Address prefix";
                  uses apply-advanced;
    
                  leaf addr-prefix {
                    type jt:ipprefix;
                    description
                      "IPv4 or IPv6 address prefix value";
                  }
    
                  container mapped-port {
                    description "Mapped port";
                    uses static-nat-rule-mapped-port-object;
                  }  // container mapped-port
    
                  leaf routing-instance {
                    type string;
                    description
                      "Routing instance";
                  }
                }  // container prefix
                container prefix-name {
                  description
                    "Address from address book";
                  uses apply-advanced;
    
                  leaf addr-prefix-name {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "Address from address book";
                  }
    
                  container mapped-port {
                    description "Mapped port";
                    uses static-nat-rule-mapped-port-object;
                  }  // container mapped-port
    
                  leaf routing-instance {
                    type string;
                    description
                      "Routing instance";
                  }
                }  // container prefix-name
                container nptv6-prefix {
                  description
                    "NPTv6 address prefix, the longest prefix will be supported is /64";
                  uses apply-advanced;
    
                  leaf addr-prefix {
                    type jt:ipprefix;
                    description
                      "IPv6 address prefix value, the longest prefix will be supported is /64";
                  }
    
                  leaf routing-instance {
                    type string;
                    description
                      "Routing instance";
                  }
                }  // container nptv6-prefix
                container nptv6-prefix-name {
                  description
                    "NPTv6 address from address book";
                  uses apply-advanced;
    
                  leaf addr-prefix-name {
                    type string {
                      length "1 .. 63";
                    }
                    description
                      "IPv6 address from address book";
                  }
    
                  leaf routing-instance {
                    type string;
                    description
                      "Routing instance";
                  }
                }  // container nptv6-prefix-name
              }  // choice prefix-choice
    
              container rule-session-count-alarm {
                description
                  "Config rule-session-count-alarm to static rule";
                uses nat-rule-session-count-alarm-object;
              }  // container rule-session-count-alarm
            }  // container static-nat
          }  // container then
        }  // grouping static-nat-rule-object
    
        grouping static-nat-rule-mapped-port-object {
          uses apply-advanced;
    
          leaf low {
            junos:must "(".. .. .. .. .. match destination-port")";
            junos:must-message "'match destination-port ...' must be configured when configure 'mapped-port'";
            type union {
              type uint16;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Port or lower limit of port range";
          }
    
          container to {
            description "Port range upper limit";
            uses apply-advanced;
    
            leaf high {
              type union {
                type uint16;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Upper limit of port range";
            }
          }  // container to
        }  // grouping static-nat-rule-mapped-port-object
    
        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 sw-rule-set-object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Define Rule Set name";
          }
    
          uses apply-advanced;
    
          list rule {
            key "name";
            ordered-by user;
            description "Define a rule term";
            leaf name {
              type string {
                junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                length "1 .. 63";
              }
              description "Rule name";
            }
    
            uses apply-advanced;
    
            container then {
              description
                "Action to take if the condition is matched";
              uses apply-advanced;
    
              choice designation {
                leaf ds-lite {
                  junos:must "("services softwires softwire-types ds-lite $$")";
                  junos:must-message "referenced softwire concentrator must be
    defined under 'services softwires softwire-types ds-lite'";
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                    length "1 .. 63";
                  }
                  description
                    "Apply DS-Lite softwire";
                }
                leaf v6rd {
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                    length "1 .. 63";
                  }
                  description
                    "Apply 6rd softwire";
                }
                leaf map-e {
                  junos:must "("services softwires softwire-types map-e $$")";
                  junos:must-message "Undefined softwire concentrator for map-e";
                  type string {
                    junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
                    junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
                    length "1 .. 63";
                  }
                  description
                    "Apply MAP-E softwire";
                }
              }  // choice designation
            }  // container then
          }  // list rule
    
          leaf match-direction {
            type enumeration {
              enum "input" {
                value 0;
                description
                  "Match on input to interface";
              }
              enum "output" {
                value 1;
                description
                  "Match on output from interface";
              }
            }
            description "Match direction";
          }
        }  // grouping sw-rule-set-object
    
        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 tenant-system-type {
          description "Tenant name";
          leaf name {
            junos:must "("tenants $$")";
            junos:must-message "Tenants must be defined under [tenants] ";
            type string;
            description "Tenant name";
          }
    
          uses apply-advanced;
    
          leaf max-sessions {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "Max number of IDP sessions";
          }
        }  // grouping tenant-system-type
    
        grouping tenant_interfaces_type {
          description "Physical interface";
          leaf name {
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Interface name";
          }
    
          uses apply-advanced;
    
          list unit {
            key "name";
            description "Logical interface";
            leaf name {
              type string;
            }
    
            uses apply-advanced;
    
            container policer-overhead {
              description
                "Policer overhead adjustment for this unit";
              uses apply-advanced;
    
              leaf policer-overhead-value {
                junos:must "((!(".. ingress") && !(".. egress")))";
                junos:must-message "Do not use the options ingress or egress when adjust values are specified";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-64 .. 64";
                  }
                }
                units "bytes";
                description
                  "Policer overhead bytes to be accounted in ingress and egress";
              }
    
              leaf ingress {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-64 .. 64";
                  }
                }
                units "bytes";
                description
                  "Ingress value in bytes";
              }
    
              leaf egress {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type int32 {
                    range "-64 .. 64";
                  }
                }
                units "bytes";
                description
                  "Egress value in bytes";
              }
            }  // container policer-overhead
    
            leaf alias {
              junos:must "(!("interfaces interface-range $$"))";
              junos:must-message "Interface alias cannot be an existing interface range name";
              type string;
              description "Interface alias";
            }
    
            container peer-psd {
              presence "enable peer-psd";
              description "Peer psd";
              leaf psd-name {
                junos:must "(".. .. peer-interface")";
                junos:must-message "peer-interface must be configured on this interface";
                type string;
                description "Peer psd name";
              }
            }  // container peer-psd
    
            container peer-interface {
              presence "enable peer-interface";
              description "Peer interface";
              uses apply-advanced;
    
              leaf interface-name {
                junos:must "((".. .. peer-psd" || "interfaces $$-IFL peer-interface"))";
                junos:must-message "Peer interface or peer psd must be configured";
                type union {
                  type jt:interface-unit;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Peer interface name";
              }
            }  // container peer-interface
    
            container interface-shared-with {
              junos:must "("chassis system-domains")";
              junos:must-message "Chassis system-domains must be configured";
              presence
                "enable interface-shared-with";
              description
                "Specify which PSD owns this logical interface";
              uses apply-advanced;
    
              leaf psd-name {
                type string {
                  junos:posix-pattern "^psd([1-9]|[1-2][0-9]|[3][0-1])$";
                  junos:pattern-message "Protected system domain name is a string consisting of 'psd' follows by the PSD ID (1-31), ex. psd2";
                }
                description
                  "Name of protected system domain (psd[1-31], ex. psd2)";
              }
            }  // container interface-shared-with
    
            choice enable-disable {
              leaf disable {
                type empty;
                description
                  "Disable this logical interface";
              }
            }  // choice enable-disable
    
            leaf passive-monitor-mode {
              type empty;
              description
                "Use interface to tap packets from another router";
            }
    
            leaf clear-dont-fragment-bit {
              type empty;
              description
                "Clear DF bit in packet (AS PIC and J-series only as well as MIF)";
            }
    
            leaf description {
              type string;
              description
                "Text description of interface";
            }
    
            leaf encapsulation {
              type enumeration {
                enum "atm-nlpid" {
                  value 0;
                  description
                    "ATM NLPID encapsulation";
                }
                enum "atm-cisco-nlpid" {
                  value 1;
                  description
                    "Cisco-compatible ATM NLPID encapsulation";
                }
                enum "atm-snap" {
                  value 2;
                  description
                    "ATM LLC/SNAP encapsulation";
                }
                enum "atm-vc-mux" {
                  value 3;
                  description
                    "ATM VC multiplexing";
                }
                enum "atm-ccc-vc-mux" {
                  value 4;
                  description "ATM VC for CCC";
                }
                enum "atm-tcc-vc-mux" {
                  value 5;
                  description
                    "ATM VC for translational cross-connect";
                }
                enum "atm-tcc-snap" {
                  value 6;
                  description
                    "ATM LLC/SNAP for translational cross-connect";
                }
                enum "atm-ccc-cell-relay" {
                  value 7;
                  description
                    "ATM cell relay for CCC";
                }
                enum "vlan-vci-ccc" {
                  value 8;
                  description
                    "CCC for VLAN Q-in-Q and ATM VPI/VCI interworking";
                }
                enum "ether-over-atm-llc" {
                  value 9;
                  description
                    "Ethernet over ATM (LLC/SNAP) encapsulation";
                }
                enum "ether-vpls-over-atm-llc" {
                  value 10;
                  description
                    "Ethernet VPLS over ATM (bridging) encapsulation";
                }
                enum
                  "ppp-over-ether-over-atm-llc" {
                  junos:must "(!(".. family"))";
                  junos:must-message "Can't configure protocol family with encapsulation ppp-over-ether-over-atm-llc";
                  junos:must "(".. .. encapsulation ethernet-over-atm")";
                  junos:must-message "Physical link-layer encapsulation must be ethernet-over-atm";
                  value 11;
                  description
                    "PPPoE over ATM (LLC/SNAP) encapsulation";
                }
                enum "ppp-over-ether" {
                  junos:must "(!("forwarding-options hyper-mode"))";
                  junos:must-message "To configure encapsulation ppp-over-ether, 'forwarding-options hyper-mode' should not be configured";
                  junos:must "(!(".. family"))";
                  junos:must-message "Can't configure protocol family with encapsulation ppp-over-ether";
                  value 12;
                  description
                    "PPPoE encapsulation";
                }
                enum "atm-ppp-vc-mux" {
                  value 13;
                  description
                    "ATM PPP over raw AAL5";
                }
                enum "atm-ppp-llc" {
                  value 14;
                  description
                    "ATM PPP over AAL5/LLC";
                }
                enum "atm-mlppp-llc" {
                  value 15;
                  description
                    "ATM MLPPP over AAL5/LLC";
                }
                enum "frame-relay-ppp" {
                  junos:must "(!(".. family inet6"))";
                  junos:must-message "family inet6 is not supported on encapsulation frame-relay-ppp";
                  junos:must "(!(".. family inet"))";
                  junos:must-message "family inet is not supported on encapsulation frame-relay-ppp";
                  junos:must "(".. .. encapsulation frame-relay")";
                  junos:must-message "Physical link-layer encapsulation must be frame-relay";
                  value 16;
                  description
                    "PPP over Frame Relay";
                }
                enum "frame-relay-ccc" {
                  value 17;
                  description
                    "Frame Relay DLCI for CCC";
                }
                enum "frame-relay" {
                  value 18;
                  description "Frame Relay DLCI";
                }
                enum "frame-relay-tcc" {
                  value 19;
                  description
                    "Frame Relay DLCI for translational cross-connect";
                }
                enum "frame-relay-ether-type" {
                  junos:must "((".. .. encapsulation flexible-frame-relay" || (".. .. encapsulation frame-relay-ether-type" || ".. .. encapsulation frame-relay-ether-type-tcc")))";
                  junos:must-message "Interface encapsulation must be cisco-compatible or flexible frame relay";
                  value 20;
                  description
                    "Cisco-compatible Frame Relay Encapsulation DLCI";
                }
                enum
                  "frame-relay-ether-type-tcc" {
                  value 21;
                  description
                    "Cisco-compatible Frame Relay Encapsulation DLCI for TCC";
                }
                enum "ether-vpls-fr" {
                  value 22;
                  description
                    "Ethernet VPLS over Frame Relay (bridging) encapsulation";
                }
                enum "vlan-ccc" {
                  value 23;
                  description
                    "802.1q tagging for a cross-connect";
                }
                enum "ethernet-ccc" {
                  value 24;
                  description
                    "Ethernet for a cross-connect";
                }
                enum "vlan-vpls" {
                  value 25;
                  description
                    "VLAN virtual private LAN service";
                }
                enum "vlan-bridge" {
                  value 26;
                  description
                    "VLAN layer-2 bridging";
                }
                enum "ethernet-tcc" {
                  value 27;
                  description
                    "Ethernet translational cross-connect";
                }
                enum "dix" {
                  value 28;
                  description
                    "Ethernet DIXv2 (RFC 894)";
                }
                enum "ethernet" {
                  value 29;
                  description
                    "Ethernet II (RFC 894)";
                }
                enum "ethernet-vpls" {
                  value 30;
                  description
                    "Ethernet II virtual private LAN service";
                }
                enum "ethernet-bridge" {
                  value 31;
                  description
                    "Ethernet II bridging";
                }
                enum "vlan" {
                  value 32;
                  description
                    "802.1q-tagged Ethernet";
                }
                enum "vlan-tcc" {
                  value 33;
                  description
                    "802.1q tagging for a translational cross-connect";
                }
                enum "multilink-ppp" {
                  value 34;
                  description "Multilink PPP";
                }
                enum
                  "multilink-frame-relay-end-to-end" {
                  value 35;
                  description
                    "Multilink Frame Relay end-to-end (FRF.15)";
                }
                enum "ppp-ccc" {
                  value 36;
                  description
                    "Serial PPP device for a cross-connect";
                }
              }
              description
                "Logical link-layer encapsulation";
            }
    
            leaf mtu {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum transmission unit packet size";
            }
    
            choice pointedness {
              leaf point-to-point {
                type empty;
                description
                  "Point-to-point connection";
              }
              leaf multipoint {
                type empty;
                description
                  "Multipoint connection";
              }
            }  // choice pointedness
    
            leaf bandwidth {
              type string;
              description
                "Logical unit bandwidth (informational only)";
            }
    
            container radio-router {
              presence "enable radio-router";
              description
                "Parameters for dynamic link cost management";
              uses dynamic_ifbw_parms_type;
            }  // container radio-router
    
            choice traps-choice {
              leaf traps {
                type empty;
                description
                  "Enable SNMP notifications on state changes";
              }
              leaf no-traps {
                type empty;
                description
                  "Don't enable SNMP notifications on state changes";
              }
            }  // choice traps-choice
    
            choice routing-services-choice {
              leaf routing-services {
                type empty;
                status deprecated;
                description
                  "Enable routing services";
              }
              leaf no-routing-services {
                type empty;
                status deprecated;
                description
                  "Don't enable routing services";
              }
            }  // choice routing-services-choice
    
            container routing-service {
              description
                "Routing Services on this interface";
              uses apply-advanced;
    
              choice enable-disable {
                leaf enable {
                  type empty;
                  description
                    "Enable Routing Service";
                }
                leaf disable {
                  type empty;
                  description
                    "Disable Routing Service";
                }
              }  // choice enable-disable
            }  // container routing-service
    
            container arp-resp {
              presence "enable arp-resp";
              description
                "Knob to control ARP response on the interface, default is restricted";
              choice arp-response-options {
                leaf unrestricted {
                  type empty;
                  description
                    "Enable unrestricted ARP respone on the interface";
                }
                leaf restricted {
                  type empty;
                  description
                    "Enable restricted proxy ARP response on the interface";
                }
              }  // choice arp-response-options
            }  // container arp-resp
    
            container proxy-arp {
              junos:must "(!("switch-options no-arp-trap "))";
              junos:must-message "Cannot enable proxy ARP with no-arp-trap";
              presence "enable proxy-arp";
              description
                "Enable proxy ARP on the interface, default is unrestricted";
              choice proxyarp-options {
                leaf unrestricted {
                  type empty;
                  description
                    "Enable unrestricted proxy ARP on the interface";
                }
                leaf restricted {
                  type empty;
                  description
                    "Enable restricted proxy ARP on the interface";
                }
              }  // choice proxyarp-options
            }  // container proxy-arp
    
            choice vlan_choice {
              leaf vlan-id {
                junos:must "(!("interfaces ${interface} stacked-vlan-tagging"))";
                junos:must-message "vlan-id is not supported on stacked-vlan-tagging mode";
                junos:must "((unique "interfaces ${interface} unit <*> vlan-id $$" || !("interfaces ${interface} flexible-vlan-tagging")))";
                junos:must-message "duplicate vlan-id";
                type string;
                description
                  "Virtual LAN identifier value for 802.1q VLAN tags";
              }
              leaf vlan-id-range {
                junos:must "(("interfaces ${interface} vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))";
                junos:must-message "valid only with vlan-tagging or flexible-vlan-tagging mode";
                type jt:vlan-range;
                description
                  "Virtual LAN identifier range of form vid1-vid2";
              }
              leaf-list inner-vlan-id-swap-ranges {
                type jt:vlan-range;
                description
                  "Inner vlan-id swap range(s) of form vid1-vid2 for dynamic L2 VLANs";
              }
              leaf-list vlan-id-list {
                junos:must "((" .. encapsulation vlan-ccc" || ("interfaces ${interface} encapsulation extended-vlan-ccc" || (" .. encapsulation vlan-vpls" || ("interfaces ${interface} encapsulation extended-vlan-vpls" || (" .. encapsulation vlan-bridge" || "interfaces ${interface} encapsulation extended-vlan-bridge"))))))";
                junos:must-message "valid only with ccc/vpls/bridge encapsulation";
                junos:must "(("interfaces ${interface} vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))";
                junos:must-message "valid only with vlan-tagging or flexible-vlan-tagging mode";
                junos:must "(".. input-vlan-map push")";
                junos:must-message "interface with vlan-id-list is supported only with input-vlan-map push";
                type jt:vlan-range;
                description
                  "List of VLAN identifiers";
              }
              leaf-list vlan-tag {
                type string;
                ordered-by user;
                status deprecated;
                description
                  "IEEE 802.1q tag list for VLAN tagged frames";
              }
              container vlan-tags {
                junos:must "((!("interfaces ${interface} vlan-tagging") || !((". inner" || (". inner-range" || ". inner-list")))))";
                junos:must-message "inner/inner-range/inner-list is valid only on stacked-vlan-tagging and flexible-vlan-tagging mode";
                junos:must "((!("interfaces ${interface} stacked-vlan-tagging") || (". inner" || (". inner-range" || ". inner-list"))))";
                junos:must-message "inner/inner-range/inner-list must be defined for stacked-vlan-tagging mode";
                junos:must "((".. demux-options" || ("interfaces ${interface} vlan-tagging" || ("interfaces ${interface} stacked-vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))))";
                junos:must-message "valid only with vlan-tagging, stacked-vlan-tagging or flexible-vlan-tagging mode";
                presence "enable vlan-tags";
                description "IEEE 802.1q tags";
                leaf outer {
                  type string;
                  description
                    "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
                }
    
                choice inner_choice {
                  leaf inner {
                    type string;
                    description
                      "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
                  }
                  leaf inner-range {
                    type string {
                      junos:posix-pattern "^((0[Xx][0-9A-Fa-f]{4}.){0,1}([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4])-([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4]))$";
                      junos:pattern-message "vid in vlan-tag ([0xNNNN.]vid1-vid2) must be 1 to 4094";
                    }
                    description
                      "[tpid.]vid1-vid2, tpid format is 0xNNNN and is optional";
                  }
                  leaf-list inner-list {
                    junos:must "((" .. .. encapsulation vlan-ccc" || ("interfaces ${interface} encapsulation extended-vlan-ccc" || (" .. .. encapsulation vlan-vpls" || ("interfaces ${interface} encapsulation extended-vlan-vpls" || (" .. .. encapsulation vlan-bridge" || "interfaces ${interface} encapsulation extended-vlan-bridge"))))))";
                    junos:must-message "valid only with ccc/vpls/bridge encapsulation";
                    type jt:vlan-range;
                    description
                      "List of VLAN identifiers";
                  }
                }  // choice inner_choice
              }  // container vlan-tags
            }  // choice vlan_choice
    
            leaf deep-vlan-qualified-learning {
              junos:must "((".. vlan-tags outer" && ".. vlan-tags inner"))";
              junos:must-message "deep-vlan-qualified-learning can be specified only with one outer and one inner vlan tags";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "3";
                }
              }
              description
                "Enable qualified MAC-address learning on the specified vlan tag";
            }
    
            leaf native-inner-vlan-id {
              junos:must "((".. vlan-tags" || ".. family bridge inner-vlan-id-list"))";
              junos:must-message "native-inner-vlan-id can be specified only on a dual vlan tagged unit";
              junos:must "("interfaces ${interface} flexible-vlan-tagging")";
              junos:must-message "native-inner-vlan-id can be specified only with flexible-vlan-tagging mode";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 4094";
                }
              }
              description
                "Native virtual LAN identifier for singly tagged frames";
            }
    
            container accept-source-mac {
              junos:must "(!(".. family ethernet-switching"))";
              junos:must-message "source mac filters not allowed on ethernet switched port";
              description
                "Remote media access control address to/from which to accept traffic";
              uses apply-advanced;
    
              list mac-address {
                key "name";
                description "Remote MAC address";
                uses mac_list;
              }  // list mac-address
            }  // container accept-source-mac
    
            container input-vlan-map {
              description
                "VLAN map operation on input";
              uses vlan_map;
            }  // container input-vlan-map
    
            container output-vlan-map {
              description
                "VLAN map operation on output";
              uses vlan_map;
            }  // container output-vlan-map
    
            leaf swap-by-poppush {
              type empty;
              description
                "Pop original vlan tag and then push a new vlan tag";
            }
    
            leaf receive-lsp {
              type string;
              description
                "Name of incoming label-switched path";
            }
    
            leaf transmit-lsp {
              type string;
              description
                "Name of outgoing label-switched path";
            }
    
            leaf dlci {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1022";
                }
              }
              description
                "Frame Relay data-link control identifier";
            }
    
            leaf multicast-dlci {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1022";
                }
              }
              description
                "Frame Relay data-link control identifier for multicast packets";
            }
    
            choice vci_type {
              leaf vci {
                junos:must "(!(".. encapsulation vlan-vci-ccc"))";
                junos:must-message "'vci-range' must be used with encapsulation vlan-vci-ccc";
                type jt:atm-vci;
                description
                  "ATM point-to-point virtual circuit identifier ([vpi.]vci)";
              }
              leaf allow-any-vci {
                type empty;
                description
                  "Allow all VCIs to open in atm-ccc-cell-relay mode";
              }
              leaf vpi {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "ATM point-to-point virtual path identifier (vpi)";
              }
              leaf trunk-id {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 31";
                  }
                }
                description
                  "ATM trunk identifier";
              }
            }  // choice vci_type
    
            choice psn_vci_type {
              case case_1 {
              }  // case case_1
    
              case case_2 {
              }  // case case_2
            }  // choice psn_vci_type
    
            container atm-l2circuit-mode {
              description
                "Select ATM Layer 2 circuit transport mode";
              choice mode_choice {
                leaf cell {
                  type empty;
                  description
                    "ATM Layer 2 circuit cell mode";
                }
                leaf aal5 {
                  type empty;
                  description
                    "ATM Layer 2 circuit AAL5 mode";
                }
              }  // choice mode_choice
            }  // container atm-l2circuit-mode
    
            container vci-range {
              junos:must "(!(".. vci"))";
              junos:must-message "'vci-range' and 'vci' statements cannot co-exist";
              description
                "ATM VCI range start <start-vci> end <end-vci>";
              leaf start {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "32 .. 4094";
                  }
                }
                description
                  "ATM VCI range's start value";
              }
    
              leaf end {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "32 .. 4094";
                  }
                }
                description
                  "ATM VCI range's end value";
              }
            }  // container vci-range
    
            leaf trunk-bandwidth {
              type string;
              units "bits per second";
              description "ATM trunk bandwidth";
            }
    
            leaf multicast-vci {
              type jt:atm-vci;
              description
                "ATM virtual circuit identifier for multicast packets";
            }
    
            container shaping {
              description
                "Virtual circuit traffic-shaping options";
              uses dcd_shaping_config;
            }  // container shaping
    
            container oam-period {
              description "OAM cell period";
              choice oam_period_choices {
                leaf oam-period {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 900";
                    }
                  }
                  units "seconds";
                  description "OAM cell period";
                }
                container disable {
                  presence "enable disable";
                  description
                    "Disable F5 OAM loopback";
                }  // container disable
              }  // choice oam_period_choices
            }  // container oam-period
    
            container oam-liveness {
              description
                "OAM virtual circuit liveness parameters";
              uses apply-advanced;
    
              leaf up-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Number of OAM cells to consider VC up";
              }
    
              leaf down-count {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description
                  "Number of OAM cells to consider VC down";
              }
            }  // container oam-liveness
    
            container ppp-options {
              description
                "Point-to-Point Protocol interface-specific options";
              uses ppp_options_type;
            }  // container ppp-options
    
            container pppoe-options {
              description
                "PPP over Ethernet interface-specific options";
              uses pppoe_options_type;
            }  // container pppoe-options
    
            choice keepalive_choices {
              container keepalives {
                presence "enable keepalives";
                description
                  "Send or demand keepalive messages";
                uses keepalives_type;
              }  // container keepalives
              leaf no-keepalives {
                type empty;
                description
                  "Do not send or demand keepalive messages";
              }
            }  // choice keepalive_choices
    
            leaf inverse-arp {
              type empty;
              description "Enable inverse ARP";
            }
    
            leaf transmit-weight {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 32767";
                }
              }
              description
                "ATM2 transmit weight for VC under VP tunnel";
            }
    
            container epd-threshold {
              description
                "Early packet discard threshold for ATM2";
              uses epd_threshold_config;
            }  // container epd-threshold
    
            leaf cell-bundle-size {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 176";
                }
              }
              units "cells";
              description
                "L2 circuit cell bundle size";
            }
    
            leaf cell-bundle-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 512";
                }
              }
              units "microseconds";
              description
                "L2 circuit cell bundle timeout";
            }
    
            leaf plp-to-clp {
              type empty;
              description
                "Enable ATM2 PLP to CLP copy";
            }
    
            leaf atm-scheduler-map {
              type union {
                type string {
                  pattern "default";
                }
                type string;
              }
              description
                "Assign ATM2 CoS scheduling map";
            }
    
            leaf mrru {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1500 .. 4500";
                }
              }
              units "bytes";
              description
                "Maximum received reconstructed unit";
            }
    
            leaf short-sequence {
              type empty;
              description
                "Short sequence number header format (MLPPP only)";
            }
    
            leaf fragment-threshold {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "64 .. 4500";
                }
              }
              units "bytes";
              description
                "Fragmentation threshold";
            }
    
            leaf drop-timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "0 .. 2000";
                }
              }
              units "milliseconds";
              description "Drop timeout";
            }
    
            leaf disable-mlppp-inner-ppp-pfc {
              type empty;
              description
                "Disable compression for inner PPP header in MLPPP payload";
            }
    
            leaf minimum-links {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16;
              }
              description
                "Minimum number of links to sustain the bundle";
            }
    
            leaf multilink-max-classes {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16;
              }
              description
                "Number of multilink classes";
            }
    
            container compression {
              junos:must "(!(".. encapsulation multilink-frame-relay-end-to-end"))";
              junos:must-message "CRTP is not supported for multilink-frame-relay-end-to-end encapsulation";
              presence "enable compression";
              description
                "Various packet header compressions";
              uses apply-advanced;
    
              container rtp {
                presence "enable rtp";
                description
                  "Compress and decompress RTP";
                uses apply-advanced;
    
                leaf f-max-period {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 65535";
                    }
                  }
                  description
                    "Maximum number of compressed packets between transmission of full headers";
                }
    
                leaf-list queues {
                  type enumeration {
                    enum "q0" {
                      value 0;
                      description
                        "RTP packets assigned to queue 0";
                    }
                    enum "q1" {
                      value 1;
                      description
                        "RTP packets assigned to queue 1";
                    }
                    enum "q2" {
                      value 2;
                      description
                        "RTP packets assigned to queue 2";
                    }
                    enum "q3" {
                      value 3;
                      description
                        "RTP packets assigned to queue 3";
                    }
                  }
                  ordered-by user;
                  description
                    "Queue holding RTP packets. Default is queue 1";
                }
    
                container port {
                  presence "enable port";
                  description
                    "UDP destination ports reserved for RTP packets";
                  leaf minimum {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 65535";
                      }
                    }
                  }
    
                  leaf maximum {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 65535";
                      }
                    }
                  }
                }  // container port
    
                container maximum-contexts {
                  description
                    "Maximum number of simultaneous RTP contexts";
                  leaf number {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "16 .. 2048";
                      }
                    }
                    description
                      "Maximum number of simultaneous RTP contexts";
                  }
                }  // container maximum-contexts
              }  // container rtp
            }  // container compression
    
            leaf interleave-fragments {
              type empty;
              description
                "Interleave long packets with high priority ones";
            }
    
            leaf link-layer-overhead {
              type jt:unsigned-float;
              description
                "Link layer bit stuffing overhead (0.0 .. 50.0 percent)";
            }
    
            leaf accounting-profile {
              junos:must "(("accounting-options interface-profile $$" || "accounting-options flat-file-profile $$"))";
              junos:must-message "referenced accounting profile must be defined";
              type string;
              description
                "Accounting profile name";
            }
    
            leaf peer-unit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16385";
                }
              }
              description "Peer unit number";
            }
    
            container tunnel {
              description "Tunnel parameters";
              uses apply-advanced;
    
              container encapsulation {
                presence "enable encapsulation";
                description
                  "Encapsulation over tunnel";
                container vxlan-gpe {
                  junos:must "((!(".. udp") && !(".. ipip")))";
                  junos:must-message "Only one encapsulation can  be set per IFL";
                  presence "enable vxlan-gpe";
                  uses apply-advanced;
    
                  container source {
                    uses apply-advanced;
    
                    leaf address {
                      junos:must "(!(".. interface"))";
                      junos:must-message "To configure address interface must be not set";
                      type jt:ipv4addr;
                      description
                        "Interface address prefix";
                    }
    
                    leaf mac-address {
                      type jt:mac-addr;
                      description
                        "Interface source mac address";
                    }
    
                    leaf interface {
                      type union {
                        type jt:interface-name;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Name of the interface";
                    }
                  }  // container source
    
                  container destination {
                    uses apply-advanced;
    
                    leaf address {
                      type jt:ipv4addr;
                      description
                        "Interface address prefix";
                    }
    
                    leaf mac-address {
                      type jt:mac-addr;
                      description
                        "Interface destination mac address";
                    }
                  }  // container destination
    
                  leaf tunnel-endpoint {
                    type enumeration {
                      enum "vxlan" {
                        value 0;
                        description
                          "To configure vxlan tunnel-end-point";
                      }
                    }
                    description
                      "Tunnel end point type";
                  }
    
                  leaf destination-udp-port {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 65535";
                      }
                    }
                    description
                      "Value to write to the destination-udp-port field";
                  }
    
                  leaf vni {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 16777214";
                      }
                    }
                    description
                      "Value to write to the vni field";
                  }
                }  // container vxlan-gpe
              }  // container encapsulation
    
              leaf source {
                type jt:ipaddr;
                description "Tunnel source";
              }
    
              leaf destination {
                type jt:ipaddr;
                description "Tunnel destination";
              }
    
              leaf key {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                description "Tunnel key";
              }
    
              leaf backup-destination {
                junos:must "(!(".. destination $$"))";
                junos:must-message "Backup and primary tunnel destinations must be different";
                type jt:ipaddr;
                description
                  "Backup tunnel destination";
              }
    
              choice fragmentation {
                leaf allow-fragmentation {
                  type empty;
                  description
                    "Do not set DF bit on packets";
                }
                leaf do-not-fragment {
                  type empty;
                  description
                    "Set DF bit on packets";
                }
              }  // choice fragmentation
    
              leaf ttl {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 255";
                  }
                }
                description "Time to live";
              }
    
              leaf traffic-class {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "TOS/Traffic class field of IP-header";
              }
    
              leaf flow-label {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 1048575";
                  }
                }
                description
                  "Flow label field of IP6-header";
              }
    
              choice path-mtu-discovery-choice {
                leaf path-mtu-discovery {
                  type empty;
                  description
                    "Enable path MTU discovery for tunnels";
                }
                leaf no-path-mtu-discovery {
                  type empty;
                  description
                    "Don't enable path MTU discovery for tunnels";
                }
              }  // choice path-mtu-discovery-choice
    
              container routing-instance {
                description
                  "Routing instance to which tunnel ends belong";
                uses apply-advanced;
    
                leaf destination {
                  junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))";
                  junos:must-message "referenced routing-instance must be defined";
                  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 of tunnel destination";
                }
              }  // container routing-instance
            }  // container tunnel
    
            leaf compression-device {
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Logical interface used for compression";
            }
    
            choice virtual-gateway {
              leaf no-auto-virtual-gateway-esi {
                junos:must "((any ".. family inet address <*> virtual-gateway-address" || any ".. family inet6 address <*> virtual-gateway-address"))";
                junos:must-message "Only when virtual gateway address is configured";
                type empty;
                description
                  "Disable auto ESI generation for virtual gateway address";
              }
              container virtual-gateway-esi {
                description
                  "ESI configuration of virtual gateway";
                uses apply-advanced;
    
                leaf identifier {
                  junos:must "(unique "interfaces <*> unit <*> virtual-gateway-esi $$")";
                  junos:must-message "virtual-gateway-esi value must be unique under all IFDs and IFLs";
                  junos:must "(unique "interfaces <*> unit <*> esi $$")";
                  junos:must-message "ESI value must be unique under all IFDs and IFLs";
                  type jt:esi;
                  description
                    "ESI value for the interface";
                }
    
                choice mode {
                  leaf single-active {
                    type empty;
                    description
                      "Single-active mode";
                  }
                  leaf all-active {
                    type empty;
                    description
                      "All-active mode";
                  }
                }  // choice mode
              }  // container virtual-gateway-esi
            }  // choice virtual-gateway
    
            container service {
              description "Service operations";
              uses apply-advanced;
    
              list pcef {
                key "name";
                ordered-by user;
                description "PCEF configuration";
                leaf name {
                  junos:must "((".. family inet service" || ".. family inet6 service"))";
                  junos:must-message "Must be configured along with a family inet/inet6 service.";
                  type string;
                  description
                    "PCEF Profile name";
                }
    
                uses apply-advanced;
    
                leaf activate-all {
                  junos:must "(!("activate"))";
                  junos:must-message "Can't be configured with activate-rule or activate- rulebase.";
                  type empty;
                  description
                    "Activate all rules and rulebases in the pcef profile";
                }
    
                list activate {
                  key "name";
                  ordered-by user;
                  description
                    "Name of pcef profile rule or rulebase to activate";
                  leaf name {
                    type string;
                    description
                      "Name of pcef profile rule or rulebase to activate";
                  }
    
                  uses apply-advanced;
                }  // list activate
              }  // list pcef
            }  // container service
    
            choice generate-eui64-choice {
              leaf generate-eui64 {
                junos:must "(".. family inet6 unnumbered-address")";
                junos:must-message "generate-eui64 attribute must be set when unnumbered-address is configured under family inet6";
                type empty;
                description
                  "To generate Link Local EUI-64 addresses";
              }
              leaf no-generate-eui64 {
                junos:must "(".. family inet6 unnumbered-address")";
                junos:must-message "generate-eui64 attribute must be set when unnumbered-address is configured under family inet6";
                type empty;
                description
                  "Don't to generate Link Local EUI-64 addresses";
              }
            }  // choice generate-eui64-choice
    
            container family {
              junos:must "(!(".. encapsulation ppp-over-ether"))";
              junos:must-message "Can't configure protocol family with encapsulation ppp-over-ether";
              description "Protocol family";
              container inet {
                junos:must "(!(".. .. .. encapsulation vlan-vpls"))";
                junos:must-message "Can't configure protocol family inet with encapsulation vpls";
                presence "enable inet";
                description "IPv4 parameters";
                uses apply-advanced;
    
                container dhcp {
                  junos:must "(!(any "forwarding-options dhcp-relay group <*> interface ${interface}.${unit}"))";
                  junos:must-message "Incompatible with the interface configured under 'forwarding-options dhcp-relay group'";
                  junos:must "(!("system services dhcp"))";
                  junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'";
                  junos:must "(!("system autoinstallation interfaces"))";
                  junos:must-message "Incompatible with 'system autoinstallation interfaces'";
                  junos:must "(!(".. address"))";
                  junos:must-message "Incompatible with interface assigned with address";
                  presence "enable dhcp";
                  description
                    "Dynamic Host Configuration Protocol client configuration";
                  uses dhcp-client-type;
                }  // container dhcp
    
                container targeted-broadcast {
                  junos:must "(!(("interfaces $$={irb} unit ${unit} family $$={inet} targeted-broadcast" && "protocols l2-learning global-mode transparent-bridge")))";
                  junos:must-message "targeted-broadcast do not be supported on irb interface in transparent mode";
                  presence
                    "enable targeted-broadcast";
                  description
                    "Directed broadcast";
                  uses apply-advanced;
    
                  choice targeted-bcast-choice {
                    leaf forward-and-send-to-re {
                      type empty;
                      description
                        "Allow packets to be forwarded and sent to re";
                    }
                    leaf forward-only {
                      type empty;
                      description
                        "Allow packets only to be forwarded";
                    }
                  }  // choice targeted-bcast-choice
                }  // container targeted-broadcast
    
                leaf destination-class-usage {
                  type empty;
                  status deprecated;
                  description
                    "Enable destination class usage on this interface";
                }
    
                leaf transit-options-packets {
                  type empty;
                  status deprecated;
                  description
                    "Transit IP options packets (don't send to Routing Engine)";
                }
    
                leaf transit-ttl-exceeded {
                  type empty;
                  status deprecated;
                  description
                    "Transit IP TTL-exceeded packets (don't send to Routing Engine)";
                }
    
                leaf receive-options-packets {
                  type empty;
                  description
                    "Receive IP options packets (don't send to Routing Engine)";
                }
    
                leaf receive-ttl-exceeded {
                  type empty;
                  description
                    "Receive IP TTL-exceeded packets (don't send to Routing Engine)";
                }
    
                container accounting {
                  description
                    "Configure interface-based accounting options";
                  uses apply-advanced;
    
                  container source-class-usage {
                    description
                      "Enable source class usage on this interface";
                    uses apply-advanced;
    
                    leaf input {
                      type empty;
                      description
                        "Specify this interface for source-class-usage input";
                    }
    
                    leaf output {
                      type empty;
                      description
                        "Specify this interface for source-class-usage output";
                    }
                  }  // container source-class-usage
    
                  leaf destination-class-usage {
                    type empty;
                    description
                      "Enable destination class usage on this interface";
                  }
                }  // container accounting
    
                container rpf-check {
                  presence "enable rpf-check";
                  description
                    "Enable reverse-path-forwarding checks on this interface";
                  uses apply-advanced;
    
                  leaf fail-filter {
                    type string;
                    description
                      "Name of filter applied to packets failing RPF check";
                  }
    
                  container mode {
                    description
                      "Mode for reverse path forwarding";
                    leaf loose {
                      type empty;
                      description
                        "Reverse-path-forwarding loose mode";
                    }
                  }  // container mode
                }  // container rpf-check
    
                leaf mtu {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Protocol family maximum transmission unit";
                }
    
                leaf arp-max-cache {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2000000";
                    }
                  }
                  description
                    "Max interface ARP nexthop cache size";
                }
    
                leaf arp-new-hold-limit {
                  junos:must "(".. arp-max-cache")";
                  junos:must-message "Interface max ARP cache size must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2000000";
                    }
                  }
                  description
                    "Max no. of new unresolved nexthops";
                }
    
                leaf no-redirects {
                  type empty;
                  description
                    "Do not redirect traffic";
                }
    
                leaf no-neighbor-learn {
                  type empty;
                  description
                    "Disable neighbor address learning on interface";
                }
    
                leaf unconditional-src-learn {
                  type empty;
                  description
                    "Glean from arp packets even when source cannot be validated";
                }
    
                leaf multicast-only {
                  type empty;
                  description
                    "Allow only multicast traffic (tunnels only)";
                }
    
                leaf primary {
                  type empty;
                  description
                    "Candidate for primary interface in system";
                }
    
                leaf ipsec-sa {
                  type string {
                    length "1 .. 32";
                  }
                  description
                    "Name of security association";
                }
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    container input {
                      description
                        "Filter to be applied to received packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container input
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  choice output_choice {
                    container output {
                      description
                        "Filter to be applied to transmitted packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container output
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  container adf {
                    description
                      "Ascend Data Filter definition";
                    uses apply-advanced;
    
                    list rule {
                      key "name";
                      ordered-by user;
                      description
                        "Set of ADF rules";
                      leaf name {
                        type string;
                        description
                          "Value for a single rule";
                      }
    
                      uses apply-advanced;
                    }  // list rule
    
                    leaf counter {
                      type empty;
                      description
                        "Add a counter to each rule";
                    }
    
                    leaf input-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the input rules";
                    }
    
                    leaf not-mandatory {
                      type empty;
                      description
                        "No errors will be reported if no rules are present";
                    }
    
                    leaf output-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the output rules";
                    }
                  }  // container adf
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Group to which interface belongs";
                  }
    
                  leaf dialer {
                    junos:must "(".. .. .. .. dialer-options dial-string")";
                    junos:must-message "Dial string is mandatory for dialer filter";
                    junos:must "(!(".. .. .. .. dialer-options watch-list"))";
                    junos:must-message "A dialer interface cannot have watch-list as well as dialer filter";
                    type string;
                    description
                      "Name of filter applied on dialer";
                  }
                }  // container filter
    
                container simple-filter {
                  description
                    "Filter for doing multifield classification";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of simple filter applied to received packets";
                  }
                }  // container simple-filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf arp {
                    junos:must "(!(".. disable-arp-policer"))";
                    junos:must-message "Interface configuration can have either disable-arp-policer or arp policer configured";
                    junos:must "((!(".. .. .. .. peer-unit") || (".. .. .. .. encapsulation ethernet" || ".. .. .. .. encapsulation vlan")))";
                    junos:must-message "Interface encapsulation must be ethernet or vlan";
                    type string;
                    description
                      "Name of policer applied to received ARP packets";
                  }
    
                  leaf input {
                    junos:must "(!(".. .. input-hierarchical-policer"))";
                    junos:must-message "Both input policer and input hierarchical policer can not be applied on the same family";
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                container sampling {
                  junos:must "(("forwarding-options sampling family inet" || ("forwarding-options packet-capture" || any "forwarding-options sampling instance <*> family inet")))";
                  junos:must-message "Requires forwarding-options sampling or packet-capture config";
                  description
                    "Interface sampling";
                  uses apply-advanced;
    
                  leaf input {
                    type empty;
                    description
                      "Sample all packets input on this interface";
                  }
    
                  leaf output {
                    type empty;
                    description
                      "Sample all packets output on this interface";
                  }
                }  // container sampling
    
                container service {
                  junos:must "((!(".. rpf-check") || "chassis network-services enhanced-ip"))";
                  junos:must-message "rpf-check can not be enabled with interface services";
                  description
                    "Service operations";
                  uses apply-advanced;
    
                  container input {
                    description
                      "Service sets to consider for received packets";
                    uses apply-advanced;
    
                    list service-set {
                      key "name";
                      ordered-by user;
                      description
                        "Service set to consider for received packets";
                      leaf name {
                        junos:must "((!(".. .. .. .. .. .. demux-source") && !(".. .. .. .. .. .. demux-destination")))";
                        junos:must-message "Service set cannot be configured on interfaces with demux-source or demux-destination";
                        junos:must "("services service-set $$ interface-service")";
                        junos:must-message "this service set must be an interface service";
                        type string {
                          junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                          junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                        }
                        description
                          "Name of service set";
                      }
    
                      uses apply-advanced;
    
                      leaf service-filter {
                        type string;
                        description
                          "Name of service filter";
                      }
                    }  // list service-set
    
                    leaf post-service-filter {
                      type string;
                      description
                        "Post-service filter to apply to received packets";
                    }
                  }  // container input
    
                  container output {
                    description
                      "Service sets to consider for transmitted packets";
                    uses apply-advanced;
    
                    list service-set {
                      key "name";
                      ordered-by user;
                      description
                        "Service set to consider for transmitted packets";
                      leaf name {
                        type string {
                          junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                          junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                        }
                        description
                          "Name of service set";
                      }
    
                      uses apply-advanced;
    
                      leaf service-filter {
                        type string;
                        description
                          "Name of service filter";
                      }
                    }  // list service-set
                  }  // container output
                }  // container service
    
                list next-hop-tunnel {
                  key "name";
                  ordered-by user;
                  description
                    "One or more next-hop tunnel tables";
                  leaf name {
                    type string;
                    description
                      "Next-hop tunnel gateway address";
                  }
    
                  uses apply-advanced;
    
                  leaf ipsec-vpn {
                    junos:must "("security ipsec vpn $$")";
                    junos:must-message "Referenced IPSec vpn must be defined under [edit security ipsec vpn] hierarchy level";
                    junos:must "(unique "interfaces st0 unit <*> family inet next-hop-tunnel <*> ipsec-vpn $$")";
                    junos:must-message "Referenced IPSec vpn must be unique";
                    type string;
                    description
                      "Name of IPSec VPN";
                  }
                }  // list next-hop-tunnel
    
                container tunnel-termination {
                  presence
                    "enable tunnel-termination";
                  description
                    "Tunnel termination";
                }  // container tunnel-termination
    
                list address {
                  junos:must "((!(".. unnumbered-address") && !(".. location-pool-address")))";
                  junos:must-message "address cannot be defined with unnumbered-address or location-pool-address simultaneously";
                  key "name";
                  ordered-by user;
                  description
                    "Interface address/destination prefix";
                  leaf name {
                    type jt:ipv4prefix;
                    description
                      "Interface address/destination prefix";
                  }
    
                  uses apply-advanced;
    
                  leaf destination {
                    type jt:ipv4addr;
                    description
                      "Destination address";
                  }
    
                  leaf destination-profile {
                    junos:must "("access group-profile $$ ppp")";
                    junos:must-message "referenced group-profile must be defined and must contain ppp statement";
                    type string;
                    description
                      "Profile to use for destination address";
                  }
    
                  leaf broadcast {
                    type jt:ipv4addr;
                    description
                      "Broadcast address";
                  }
    
                  leaf primary {
                    type empty;
                    description
                      "Candidate for primary address in system";
                  }
    
                  leaf preferred {
                    type empty;
                    description
                      "Preferred address on interface";
                  }
    
                  leaf master-only {
                    type empty;
                    description
                      "Master management IP address for router";
                  }
    
                  list multipoint-destination {
                    key "name";
                    ordered-by user;
                    description
                      "Multipoint NBMA destination";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "Destination address";
                    }
    
                    uses apply-advanced;
    
                    choice link-address {
                      leaf dlci {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 1022";
                          }
                        }
                        description
                          "Frame Relay data-link control identifier";
                      }
                      leaf vci {
                        type jt:atm-vci;
                        description
                          "ATM virtual circuit identifier ([vpi.]vci)";
                      }
                    }  // choice link-address
    
                    container shaping {
                      description
                        "Virtual circuit traffic-shaping options";
                      uses dcd_shaping_config;
                    }  // container shaping
    
                    container oam-period {
                      description
                        "OAM cell period";
                      choice oam_period_choices {
                        leaf oam_period {
                          type union {
                            type string {
                              pattern "<.*>|$.*";
                            }
                            type uint32 {
                              range "1 .. 900";
                            }
                          }
                          units "seconds";
                          description
                            "OAM cell period";
                        }
                        container disable {
                          presence
                            "enable disable";
                          description
                            "Disable OAM loopback";
                        }  // container disable
                      }  // choice oam_period_choices
                    }  // container oam-period
    
                    container oam-liveness {
                      description
                        "OAM virtual circuit liveness parameters";
                      uses apply-advanced;
    
                      leaf up-count {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 255";
                          }
                        }
                        description
                          "Number of OAM cells to consider VC up";
                      }
    
                      leaf down-count {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 255";
                          }
                        }
                        description
                          "Number of OAM cells to consider VC down";
                      }
                    }  // container oam-liveness
    
                    leaf inverse-arp {
                      type empty;
                      description
                        "Enable inverse ARP reply messages";
                    }
    
                    leaf transmit-weight {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint16 {
                          range "1 .. 32767";
                        }
                      }
                      description
                        "ATM2 transmit weight for VC under VP tunnel";
                    }
    
                    container epd-threshold {
                      description
                        "Early packet discard threshold for ATM2";
                      uses epd_threshold_config;
                    }  // container epd-threshold
                  }  // list multipoint-destination
    
                  list arp {
                    key "name";
                    ordered-by user;
                    description
                      "Static Address Resolution Protocol entries";
                    leaf name {
                      type jt:ipv4addr;
                      description
                        "Destination IP address";
                    }
    
                    leaf l2-interface {
                      type union {
                        type jt:interface-name;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Layer 2 interface name for ARP entry";
                    }
    
                    choice mac_address_type {
                      leaf mac {
                        type jt:mac-unicast;
                        description
                          "MAC address";
                      }
                      leaf multicast-mac {
                        type jt:mac-multicast;
                        description
                          "Multicast MAC address";
                      }
                    }  // choice mac_address_type
    
                    leaf publish {
                      junos:must "((".. mac" || ".. multicast-mac"))";
                      junos:must-message "mac or multicast-mac must be configured to publish";
                      type empty;
                      description
                        "Reply to ARP requests for this entry";
                    }
                  }  // list arp
    
                  container web-authentication {
                    description
                      "Parameters for web-based firewall-user authentication";
                    uses apply-advanced;
    
                    leaf http {
                      type empty;
                      description
                        "Enable authentication via HTTP";
                    }
    
                    leaf https {
                      type empty;
                      description
                        "Enable authentication via HTTPS";
                    }
    
                    leaf redirect-to-https {
                      junos:must "(".. https")";
                      junos:must-message "https must be enabled";
                      type empty;
                      description
                        "Web authentication redirect to HTTPS";
                    }
                  }  // container web-authentication
    
                  list vrrp-group {
                    key "name";
                    ordered-by user;
                    description "VRRP group";
                    uses vrrp-group;
                  }  // list vrrp-group
    
                  leaf virtual-gateway-address {
                    junos:must "(!(".. vrrp-group"))";
                    junos:must-message "vrrp configuration incompatible with virtual gateway address";
                    type jt:ipv4addr;
                    description
                      "Virtual Gateway IP address";
                  }
                }  // list address
    
                container unnumbered-address {
                  description
                    "Unnumbered interface address/destination prefix";
                  leaf source {
                    junos:must "("interfaces $$-IFL family inet address")";
                    junos:must-message "referred interface must have address configured under family inet";
                    type union {
                      type jt:interface-unit;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Interface from which to take local address";
                  }
    
                  leaf preferred-source-address {
                    type string;
                    description
                      "Preferred address on the donor interface";
                  }
    
                  leaf destination {
                    type jt:ipv4addr;
                    description
                      "Destination address";
                  }
    
                  leaf destination-profile {
                    junos:must "("access group-profile $$ ppp")";
                    junos:must-message "referenced group-profile must be defined and must contain ppp statement";
                    type string;
                    description
                      "Profile to use for destination address";
                  }
                }  // container unnumbered-address
    
                container location-pool-address {
                  junos:must "((!(".. address") && !(".. unnumbered-address")))";
                  junos:must-message "location-pool-address cannot be defined with address or unnumbered-address simultaneously";
                  presence
                    "enable location-pool-address";
                  description
                    "Location-based IP address pool";
                  uses apply-advanced;
    
                  leaf pool-name {
                    junos:must "("access address-assignment location-pool $$")";
                    junos:must-message "referenced IP address location pool must be defined";
                    type string {
                      length "1 .. 64";
                    }
                    description "Pool name";
                  }
                }  // container location-pool-address
    
                leaf negotiate-address {
                  junos:must "(!(".. .. .. .. encapsulation multilink-frame-relay-uni-nni"))";
                  junos:must-message "negotiate-address is not supported with family mlfr-uni-nni ";
                  junos:must "(!(".. .. .. encapsulation multilink-frame-relay-end-to-end"))";
                  junos:must-message "negotiate-address is not supported with family mlfr-end-to-end ";
                  junos:must "(!(".. location-pool-address"))";
                  junos:must-message "negotiate-address and location-pool-address must not be defined simultaneously";
                  junos:must "(!(".. unnumbered-address"))";
                  junos:must-message "negotiate-address and unnumbered-address must not be defined simultaneously";
                  junos:must "(!(".. address"))";
                  junos:must-message "negotiate-address and address must not be defined simultaneously";
                  type empty;
                  description
                    "Negotiate address with remote";
                }
    
                leaf destination-udp-port {
                  junos:must "(".. .. .. tunnel encapsulation udp")";
                  junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10000 .. 10009";
                    }
                  }
                  description
                    "Choose destination UDP port number";
                }
              }  // container inet
    
              container iso {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family iso is not supported on encapsulation frame-relay-ppp";
                presence "enable iso";
                description
                  "OSI ISO protocol parameters";
                uses apply-advanced;
    
                list address {
                  key "name";
                  ordered-by user;
                  description
                    "Interface address";
                  leaf name {
                    type jt:isoaddr;
                    description
                      "Interface address";
                  }
    
                  uses apply-advanced;
                }  // list address
    
                leaf mtu {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Protocol family maximum transmission unit";
                }
    
                leaf destination-udp-port {
                  junos:must "(".. .. .. tunnel encapsulation udp")";
                  junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10030 .. 10039";
                    }
                  }
                  description
                    "Choose destination UDP port number";
                }
              }  // container iso
    
              container inet6 {
                presence "enable inet6";
                description
                  "IPv6 protocol parameters";
                uses apply-advanced;
    
                container dhcpv6-client {
                  junos:must "(!("system services dhcp"))";
                  junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'";
                  junos:must "(!("system autoinstallation"))";
                  junos:must-message "Incompatible with 'system autoinstallation'";
                  junos:must "(!(".. address"))";
                  junos:must-message "Incompatible with interface assigned with address";
                  junos:must "(!(any "forwarding-options dhcp-relay dhcpv6  group <*> interface ${interface}.${unit}"))";
                  junos:must-message "DHCPv6 client and relay cannot be configured on the same interface ";
                  junos:must "(!(any "system services dhcp-local-server dhcpv6 group <*> interface ${interface}.${unit}"))";
                  junos:must-message "DHCPv6 client and server cannot be configured on the same interface ";
                  description
                    "Dynamic Host Configuration Protocol DHCPv6 client configuration";
                  uses apply-advanced;
    
                  leaf client-type {
                    type enumeration {
                      enum "stateful" {
                        value 0;
                        description
                          "Stateful client type for address assignment.";
                      }
                      enum "autoconfig" {
                        junos:must "("protocols router-advertisement interface ${interface}.${unit}")";
                        junos:must-message "Interface for ra messages is must for auto mode";
                        junos:must "(!("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client update-router-advertisement"))";
                        junos:must-message "Incompatible with 'dhcpv6-client update-router-advertisement'";
                        junos:must "(!("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client client-ia-type ia-pd"))";
                        junos:must-message "Incompatible with 'client-ia-type ia-pd'";
                        value 1;
                        description
                          "Autoconfig  client type for router-advertisement";
                      }
                    }
                    description
                      "DHCPv6 client type";
                  }
    
                  list client-ia-type {
                    key "name";
                    ordered-by user;
                    description
                      "DHCPv6 client identity association type";
                    leaf name {
                      type enumeration {
                        enum "ia-na" {
                          value 0;
                          description
                            "Identity Association-Non-temporary Address";
                        }
                        enum "ia-pd" {
                          value 1;
                          description
                            "Identity Association-Prefix Address";
                        }
                      }
                    }
    
                    uses apply-advanced;
                  }  // list client-ia-type
    
                  container rapid-commit {
                    presence
                      "enable rapid-commit";
                    description
                      "Option is used to signal the use of the two message exchange for address assignment";
                  }  // container rapid-commit
    
                  container prefix-delegating {
                    junos:must "("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client client-ia-type ia-pd")";
                    junos:must-message "Incompatible with out 'client-ia-type ia-pd'";
                    description
                      "Prefix delegating parameters";
                    uses apply-advanced;
    
                    leaf preferred-prefix-length {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 64";
                        }
                      }
                      description
                        "Client preferred prefix length";
                    }
    
                    leaf sub-prefix-length {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 127";
                        }
                      }
                      description
                        "The sub prefix length for LAN interfaces";
                    }
                  }  // container prefix-delegating
    
                  container client-identifier {
                    description
                      "DHCP Server identifies a client by client-identifier value ";
                    leaf duid-type {
                      type enumeration {
                        enum "duid-llt" {
                          value 0;
                          description
                            "Link-layer address plus time";
                        }
                        enum "vendor" {
                          value 1;
                          description
                            "Vendor-assigned unique ID based on Enterprise Number";
                        }
                        enum "duid-ll" {
                          value 2;
                          description
                            "Link-layer address";
                        }
                      }
                      description
                        "DUID identifying a client";
                    }
                  }  // container client-identifier
    
                  leaf vendor-id {
                    type string {
                      length "1 .. 60";
                    }
                    description
                      "Vendor class id for the dhcpv6 client";
                  }
    
                  list req-option {
                    key "name";
                    ordered-by user;
                    description
                      "DHCPV6 client requested option configuration";
                    leaf name {
                      type enumeration {
                        enum "dns-server" {
                          value 0;
                          description
                            "Dns-server option";
                        }
                        enum "domain" {
                          value 1;
                          description
                            "Dns-server option";
                        }
                        enum "ntp-server" {
                          value 2;
                          description
                            "Ntp-server option";
                        }
                        enum "time-zone" {
                          value 3;
                          description
                            "Time-zone option";
                        }
                        enum "sip-server" {
                          value 4;
                          description
                            "Sip-server option";
                        }
                        enum "sip-domain" {
                          value 5;
                          description
                            "Sip-domain option";
                        }
                        enum "nis-server" {
                          value 6;
                          description
                            "Nis-server option";
                        }
                        enum "nis-domain" {
                          value 7;
                          description
                            "Nis-domain option";
                        }
                        enum "fqdn" {
                          value 8;
                          description
                            "Fully-qualified-domain option";
                        }
                        enum "vendor-spec" {
                          value 9;
                          description
                            "Vendor-spec option";
                        }
                        enum
                          "zero-touch-redirect" {
                          value 10;
                          description
                            "Zero-touch-redirect";
                        }
                        enum "bootfile-url" {
                          value 11;
                          description
                            "Bootfile url";
                        }
                        enum "bootfile-param" {
                          value 12;
                          description
                            "Bootfile param";
                        }
                      }
                    }
    
                    uses apply-advanced;
                  }  // list req-option
    
                  container options {
                    description "DHCP options";
                    uses apply-advanced;
    
                    list number {
                      key "name";
                      description
                        "DHCP option code";
                      leaf name {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "1 .. 254";
                          }
                        }
                        description
                          "DHCP option identifier code";
                      }
    
                      choice option-type-choice {
                        leaf hex-string {
                          type string {
                            junos:posix-pattern "^[[:xdigit:]]+$";
                            junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                            length "1 .. 510";
                          }
                          description
                            "Hexadecimal string";
                        }
                      }  // choice option-type-choice
                    }  // list number
                  }  // container options
    
                  leaf retransmission-attempt {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "0 .. 50000";
                      }
                    }
                    default "9";
                    description
                      "Number of attempts to retransmit the DHCPV6 client protocol packet";
                  }
    
                  container no-dns-install {
                    presence
                      "enable no-dns-install";
                    description
                      "Not propagate DNS to kernel";
                  }  // container no-dns-install
    
                  container update-router-advertisement {
                    junos:must "("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client client-ia-type $$={2}")";
                    junos:must-message "Incompatible without 'client-ia-type ia-pd'";
                    description
                      "Dhcpv6 client update rpd for prefix delegation";
                    uses apply-advanced;
    
                    list interface {
                      key "name";
                      max-elements 3;
                      ordered-by user;
                      description
                        "Interfaces on which to delegate prefix";
                      leaf name {
                        junos:must "(unique "interfaces <*> unit 0 family inet6 dhcpv6-client update-router-advertisement interface $$")";
                        junos:must-message "This interface is already updated by a dhcpv6-client";
                        junos:must "(!("protocols router-advertisement interface $$"))";
                        junos:must-message "Incompatible with the interface configured under 'protocols router-advertisement interface'";
                        type union {
                          type jt:interface-name;
                          type string {
                            pattern "<.*>|$.*";
                          }
                        }
                        description
                          "Interfaces-name on which to delegate prefix";
                      }
    
                      uses apply-advanced;
    
                      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
    
                      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 enable-recursive-dns-server-option-choice {
                        leaf enable-recursive-dns-server-option {
                          type empty;
                          description
                            "Enables the recursive DNS server option";
                        }
                        leaf no-enable-recursive-dns-server-option {
                          type empty;
                          description
                            "Don't enables the recursive DNS server option";
                        }
                      }  // choice enable-recursive-dns-server-option-choice
                    }  // list interface
                  }  // container update-router-advertisement
    
                  leaf update-server {
                    type empty;
                    description
                      "Propagate TCP/IP settings to DHCP server";
                  }
                }  // container dhcpv6-client
    
                container rpf-check {
                  presence "enable rpf-check";
                  description
                    "Enable reverse-path-forwarding checks on this interface";
                  uses apply-advanced;
    
                  leaf fail-filter {
                    type string;
                    description
                      "Name of filter applied to packets failing RPF check";
                  }
    
                  container mode {
                    description
                      "Mode for reverse path forwarding";
                    leaf loose {
                      type empty;
                      description
                        "Reverse-path-forwarding loose mode";
                    }
                  }  // container mode
                }  // container rpf-check
    
                container accounting {
                  description
                    "Interface-based accounting options";
                  uses apply-advanced;
    
                  container source-class-usage {
                    uses apply-advanced;
    
                    leaf input {
                      type empty;
                      description
                        "Interface for source-class-usage input";
                    }
    
                    leaf output {
                      type empty;
                      description
                        "Interface for source-class-usage output";
                    }
                  }  // container source-class-usage
    
                  leaf destination-class-usage {
                    type empty;
                    description
                      "Enable destination class usage on this interface";
                  }
                }  // container accounting
    
                leaf mtu {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Protocol family maximum transmission unit";
                }
    
                leaf nd6-stale-time {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 18000";
                    }
                  }
                  units "seconds";
                  description
                    "Stale time to reconfirm reachability with inet6 neighbour";
                }
    
                leaf no-neighbor-learn {
                  type empty;
                  description
                    "Disable neighbor address learning on interface";
                }
    
                container ndp-proxy {
                  description
                    "Enable ndp proxy on interface";
                  uses apply-advanced;
    
                  leaf interface-restricted {
                    type empty;
                    description
                      "Enable ndp interface proxy restricted to interface";
                  }
                }  // container ndp-proxy
    
                container dad-proxy {
                  junos:must "(".. ndp-proxy")";
                  junos:must-message "ndp-proxy must be configured";
                  description
                    "DAD proxy on interface";
                  uses apply-advanced;
    
                  leaf interface-restricted {
                    type empty;
                    description
                      "Enable DAD interface proxy restricted to interface";
                  }
                }  // container dad-proxy
    
                leaf nd6-max-cache {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2000000";
                    }
                  }
                  description
                    "Max interface ND nexthop cache size";
                }
    
                leaf nd6-new-hold-limit {
                  junos:must "(".. nd6-max-cache")";
                  junos:must-message "Interface max ND cache size must be configured";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 2000000";
                    }
                  }
                  description
                    "Max no. of new unresolved nexthops";
                }
    
                leaf no-redirects {
                  type empty;
                  description
                    "Do not redirect traffic";
                }
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    container input {
                      description
                        "Filter to be applied to received packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container input
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  choice output_choice {
                    container output {
                      description
                        "Filter to be applied to transmitted packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container output
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  container adf {
                    description
                      "Ascend Data Filter definition";
                    uses apply-advanced;
    
                    list rule {
                      key "name";
                      ordered-by user;
                      description
                        "Set of ADF rules";
                      leaf name {
                        type string;
                        description
                          "Value for a single rule";
                      }
    
                      uses apply-advanced;
                    }  // list rule
    
                    leaf counter {
                      type empty;
                      description
                        "Add a counter to each rule";
                    }
    
                    leaf input-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the input rules";
                    }
    
                    leaf not-mandatory {
                      type empty;
                      description
                        "No errors will be reported if no rules are present";
                    }
    
                    leaf output-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the output rules";
                    }
                  }  // container adf
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Group to which interface belongs";
                  }
    
                  leaf dialer {
                    junos:must "(".. .. .. .. dialer-options dial-string")";
                    junos:must-message "Dial string is mandatory for dialer filter";
                    junos:must "(!(".. .. .. .. dialer-options watch-list"))";
                    junos:must-message "A dialer interface cannot have watch-list as well as dialer filter";
                    type string;
                    description
                      "Name of filter applied on dialer";
                  }
                }  // container filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                container sampling {
                  junos:must "(("forwarding-options sampling family inet6" || ("forwarding-options packet-capture" || any "forwarding-options sampling instance <*> family inet6")))";
                  junos:must-message "Requires forwarding-options sampling or packet-capture config";
                  description
                    "Interface sampling";
                  uses apply-advanced;
    
                  leaf input {
                    type empty;
                    description
                      "Sample all packets input on this interface";
                  }
    
                  leaf output {
                    type empty;
                    description
                      "Sample all packets output on this interface";
                  }
                }  // container sampling
    
                container service {
                  description
                    "Service operations";
                  uses apply-advanced;
    
                  container input {
                    description
                      "Service sets to consider for received packets";
                    uses apply-advanced;
    
                    list service-set {
                      key "name";
                      ordered-by user;
                      description
                        "Service set to consider for received packets";
                      leaf name {
                        junos:must "((!(".. .. .. .. .. .. demux-source") && !(".. .. .. .. .. .. demux-destination")))";
                        junos:must-message "Service set cannot be configured on interfaces with demux-source or demux-destination";
                        junos:must "("services service-set $$ interface-service")";
                        junos:must-message "this service set must be an interface service";
                        type string {
                          junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                          junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                        }
                        description
                          "Name of service set";
                      }
    
                      uses apply-advanced;
    
                      leaf service-filter {
                        type string;
                        description
                          "Name of service filter";
                      }
                    }  // list service-set
    
                    leaf post-service-filter {
                      type string;
                      description
                        "Post-service filter to apply to received packets";
                    }
                  }  // container input
    
                  container output {
                    description
                      "Service sets to consider for transmitted packets";
                    uses apply-advanced;
    
                    list service-set {
                      key "name";
                      ordered-by user;
                      description
                        "Service set to consider for transmitted packets";
                      leaf name {
                        type string {
                          junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$";
                          junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots.";
                        }
                        description
                          "Name of service set";
                      }
    
                      uses apply-advanced;
    
                      leaf service-filter {
                        type string;
                        description
                          "Name of service filter";
                      }
                    }  // list service-set
                  }  // container output
                }  // container service
    
                container tunnel-termination {
                  presence
                    "enable tunnel-termination";
                  description
                    "Tunnel termination";
                }  // container tunnel-termination
    
                list address {
                  junos:must "(!(".. unnumbered-address"))";
                  junos:must-message "ipv6 unnumbered-address and ipv6 address must not be defined simultaneously";
                  key "name";
                  ordered-by user;
                  description
                    "Interface address or destination prefix";
                  leaf name {
                    type jt:ipv6prefix;
                    description
                      "Interface address or destination prefix";
                  }
    
                  uses apply-advanced;
    
                  leaf destination {
                    type jt:ipv6addr;
                    description
                      "Destination address";
                  }
    
                  leaf eui-64 {
                    type empty;
                    description
                      "Generate EUI-64 interface ID";
                  }
    
                  leaf primary {
                    type empty;
                    description
                      "Candidate for primary address in system";
                  }
    
                  leaf preferred {
                    type empty;
                    description
                      "Preferred address on interface";
                  }
    
                  leaf master-only {
                    type empty;
                    description
                      "Master management IP address for router";
                  }
    
                  list ndp {
                    key "name";
                    ordered-by user;
                    description
                      "Static Neighbor Discovery Protocol  entries";
                    leaf name {
                      type jt:ipv6addr;
                      description
                        "Destination IP address";
                    }
    
                    leaf l2-interface {
                      type union {
                        type jt:interface-name;
                        type string {
                          pattern "<.*>|$.*";
                        }
                      }
                      description
                        "Layer 2 interface name for NDP entry";
                    }
    
                    choice mac_address_type {
                      leaf mac {
                        type jt:mac-unicast;
                        description
                          "MAC address";
                      }
                      leaf multicast-mac {
                        type jt:mac-multicast;
                        description
                          "Multicast MAC address";
                      }
                    }  // choice mac_address_type
    
                    leaf publish {
                      junos:must "((".. mac" || ".. multicast-mac"))";
                      junos:must-message "either 'mac' or 'multicast-mac' must be configured along with 'publish' statment";
                      type empty;
                      description
                        "Reply to NDP requests for this entry";
                    }
                  }  // list ndp
    
                  list vrrp-inet6-group {
                    junos:must "(!(".. eui-64"))";
                    junos:must-message "'vrrp-inet6-group' is not supported when 'eui-64' is configured";
                    key "name";
                    ordered-by user;
                    description "VRRP group";
                    uses vrrp-group;
                  }  // list vrrp-inet6-group
    
                  container web-authentication {
                    description
                      "Parameters for web-based firewall-user authentication";
                    uses apply-advanced;
    
                    leaf http {
                      type empty;
                      description
                        "Enable authentication via HTTP";
                    }
    
                    leaf https {
                      type empty;
                      description
                        "Enable authentication via HTTPS";
                    }
    
                    leaf redirect-to-https {
                      junos:must "(".. https")";
                      junos:must-message "https must be enabled";
                      type empty;
                      description
                        "Web authentication redirect to HTTPS";
                    }
                  }  // container web-authentication
    
                  leaf virtual-gateway-address {
                    junos:must "(!(".. vrrp-inet6-group"))";
                    junos:must-message "vrrp configuration incompatible with virtual gateway address";
                    type jt:ipv6addr;
                    description
                      "Virtual Gateway IP address";
                  }
    
                  leaf subnet-router-anycast {
                    type empty;
                    description
                      "Create a subnet roter anycast address for this address.";
                  }
                }  // list address
    
                container unnumbered-address {
                  description
                    "Unnumbered interface address/destination prefix";
                  leaf source {
                    junos:must "("interfaces $$-IFL family inet6 address")";
                    junos:must-message "referred interface must have address configured under family inet6";
                    type union {
                      type jt:interface-unit;
                      type string {
                        pattern "<.*>|$.*";
                      }
                    }
                    description
                      "Interface from which to take local address";
                  }
    
                  leaf preferred-source-address {
                    type string;
                    description
                      "Preferred address on the donor interface";
                  }
                }  // container unnumbered-address
    
                choice dad-disable-choice {
                  leaf dad-disable {
                    type empty;
                    description
                      "Disable duplicate-address-detection";
                  }
                  leaf no-dad-disable {
                    type empty;
                    description
                      "Don't disable duplicate-address-detection";
                  }
                }  // choice dad-disable-choice
    
                leaf destination-udp-port {
                  junos:must "(".. .. .. tunnel encapsulation udp")";
                  junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10010 .. 10019";
                    }
                  }
                  description
                    "Choose destination UDP port number";
                }
    
                leaf negotiate-address {
                  junos:must "(!(".. unnumbered-address"))";
                  junos:must-message "negotiate-address and unnumbered-address must not be defined simultaneously";
                  junos:must "(!(".. address"))";
                  junos:must-message "negotiate-address and address must not be defined simultaneously";
                  type empty;
                  description
                    "Negotiate address with remote";
                }
              }  // container inet6
    
              container mpls {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family mpls is not supported on encapsulation frame-relay-ppp";
                presence "enable mpls";
                description
                  "MPLS protocol parameters";
                uses apply-advanced;
    
                leaf mtu {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Protocol family maximum transmission unit";
                }
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    leaf input {
                      type string;
                      description
                        "Name of filter applied to received packets";
                    }
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  leaf-list input-chain {
                    type string;
                    ordered-by user;
                    description
                      "List of filter modules applied to received packets ";
                  }
    
                  choice output_choice {
                    leaf output {
                      type string;
                      description
                        "Name of filter applied to transmitted packets";
                    }
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  leaf-list output-chain {
                    type string;
                    ordered-by user;
                    description
                      "List of filter modules applied to transmitted packets ";
                  }
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Interface group to which interface belongs";
                  }
    
                  leaf dialer {
                    junos:must "(".. .. .. .. dialer-options dial-string")";
                    junos:must-message "Dial string is mandatory for dialer filter";
                    junos:must "(!(".. .. .. .. dialer-options watch-list"))";
                    junos:must-message "A dialer interface cannot have watch-list as well as dialer filter";
                    type string;
                    description
                      "Name of filter applied on dialer";
                  }
                }  // container filter
    
                container ingress-queuing-filter {
                  description
                    "Protocol family ingress-queuing-filter";
                  leaf filter-name {
                    type string;
                    description
                      "Name of the ingress-queuing-filter";
                  }
                }  // container ingress-queuing-filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                leaf destination-udp-port {
                  junos:must "(".. .. .. tunnel encapsulation udp")";
                  junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface";
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "10020 .. 10029";
                    }
                  }
                  description
                    "Choose destination UDP port number";
                }
              }  // container mpls
    
              container mlppp {
                junos:must "(!("interfaces ${interface} container-options"))";
                junos:must-message "mlppp is not supported for container interfaces";
                description
                  "Multilink PPP protocol parameters";
                uses apply-advanced;
    
                leaf bundle {
                  junos:must "((!(".. .. .. dial-options") || "interfaces $$-IFL encapsulation multilink-ppp"))";
                  junos:must-message "Bundle interface must be configured";
                  junos:must "((!(".. .. .. pppoe-options") || "interfaces $$-IFL encapsulation multilink-ppp"))";
                  junos:must-message "Bundle interface must be configured";
                  type string;
                  description
                    "Logical interface name this link will join";
                }
    
                choice anchor-points {
                  case case_1 {
                  }  // case case_1
    
                  case case_2 {
                  }  // case case_2
                }  // choice anchor-points
    
                leaf dynamic-profile {
                  junos:must "("dynamic-profiles $$")";
                  junos:must-message "referenced dynamic-profile must be defined";
                  type string {
                    length "1 .. 80";
                  }
                  description
                    " dynamic profile for interface to use";
                }
              }  // container mlppp
    
              container mlfr-end-to-end {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family mlfr-end-to-end is not supported on encapsulation frame-relay-ppp";
                presence
                  "enable mlfr-end-to-end";
                description
                  "Multilink Frame Relay end-to-end protocol parameters";
                uses apply-advanced;
    
                leaf bundle {
                  type union {
                    type jt:interface-unit;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Logical interface name this link will join";
                }
              }  // container mlfr-end-to-end
    
              container mlfr-uni-nni {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family mlfr-uni-uni is not supported on encapsulation frame-relay-ppp";
                presence "enable mlfr-uni-nni";
                description
                  "Multilink Frame Relay UNI NNI protocol parameters";
                uses apply-advanced;
    
                leaf bundle {
                  type union {
                    type jt:interface-unit;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "Logical interface name this link will join";
                }
              }  // container mlfr-uni-nni
    
              container ccc {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family ccc is not supported on encapsulation frame-relay-ppp";
                presence "enable ccc";
                description
                  "Circuit cross-connect parameters";
                uses apply-advanced;
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    leaf input {
                      type string;
                      description
                        "Name of filter applied to received packets";
                    }
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  leaf-list input-chain {
                    type string;
                    ordered-by user;
                    description
                      "List of filter modules applied to received packets ";
                  }
    
                  choice output_choice {
                    leaf output {
                      type string;
                      description
                        "Name of filter applied to transmitted packets";
                    }
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  leaf-list output-chain {
                    type string;
                    ordered-by user;
                    description
                      "List of filter modules applied to transmitted packets ";
                  }
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Interface group to which interface belongs";
                  }
                }  // container filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                leaf translate-fecn-and-becn {
                  type empty;
                  description
                    "Translate FECN and BECN bits";
                }
    
                choice de-or-plp {
                  leaf translate-discard-eligible {
                    type empty;
                    description
                      "Translate DE bit";
                  }
    
                  case case_2 {
                  }  // case case_2
                }  // choice de-or-plp
    
                leaf keep-address-and-control {
                  type empty;
                  description
                    "Don't strip PPP address and control bytes";
                }
              }  // container ccc
    
              container tcc {
                junos:must "(!(".. .. encapsulation frame-relay-ppp"))";
                junos:must-message "family tcc is not supported on encapsulation frame-relay-ppp";
                presence "enable tcc";
                description
                  "Translational cross-connect parameters";
                uses apply-advanced;
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                container proxy {
                  presence "enable proxy";
                  uses apply-advanced;
    
                  leaf inet-address {
                    type jt:ipv4addr;
                    description
                      "Remote host address on non-Ethernet side of Ethernet TCC";
                  }
                }  // container proxy
    
                container remote {
                  presence "enable remote";
                  uses apply-advanced;
    
                  leaf inet-address {
                    type jt:ipv4addr;
                    description
                      "Remote host address on Ethernet side of Ethernet TCC";
                  }
    
                  leaf mac-address {
                    type jt:mac-addr;
                    description
                      "Remote host MAC address on Ethernet side of Ethernet TCC";
                  }
                }  // container remote
              }  // container tcc
    
              container vpls {
                presence "enable vpls";
                description
                  "Virtual private LAN service parameters";
                uses apply-advanced;
    
                leaf core-facing {
                  type empty;
                  description
                    "Interface is core facing";
                }
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    container input {
                      description
                        "Filter to be applied to received packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container input
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  choice output_choice {
                    container output {
                      description
                        "Filter to be applied to transmitted packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container output
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  container adf {
                    description
                      "Ascend Data Filter definition";
                    uses apply-advanced;
    
                    list rule {
                      key "name";
                      ordered-by user;
                      description
                        "Set of ADF rules";
                      leaf name {
                        type string;
                        description
                          "Value for a single rule";
                      }
    
                      uses apply-advanced;
                    }  // list rule
    
                    leaf counter {
                      type empty;
                      description
                        "Add a counter to each rule";
                    }
    
                    leaf input-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the input rules";
                    }
    
                    leaf not-mandatory {
                      type empty;
                      description
                        "No errors will be reported if no rules are present";
                    }
    
                    leaf output-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the output rules";
                    }
                  }  // container adf
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Group to which interface belongs";
                  }
                }  // container filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
              }  // container vpls
    
              container bridge {
                junos:must "((!(".. vpls") && (!(".. inet") && (!(".. inet6") && (!(".. ccc") && (!(".. ethernet-switching") && (!(".. iso") && (!(".. llc2") && (!(".. mpls") && (!(".. tcc") && (!(".. pppoe") && !(".. gre"))))))))))))";
                junos:must-message "family bridge and rest of the families are mutually exclusive";
                presence "enable bridge";
                description
                  "Layer-2 bridging parameters";
                uses apply-advanced;
    
                leaf core-facing {
                  type empty;
                  description
                    "Interface is core facing";
                }
    
                container filter {
                  description "Packet filtering";
                  uses apply-advanced;
    
                  choice input_choice {
                    container input {
                      description
                        "Filter to be applied to received packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container input
                    leaf-list input-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to received packets ";
                    }
                  }  // choice input_choice
    
                  choice output_choice {
                    container output {
                      description
                        "Filter to be applied to transmitted packets";
                      leaf filter-name {
                        type string;
                        description
                          "Name of the filter";
                      }
    
                      leaf shared-name {
                        type string;
                        description
                          "Filter shared-name of instances of interface-shared filter";
                      }
    
                      leaf precedence {
                        type union {
                          type string {
                            pattern "<.*>|$.*";
                          }
                          type uint32 {
                            range "0 .. 255";
                          }
                        }
                        description
                          "Precedence of the filter";
                      }
                    }  // container output
                    leaf-list output-list {
                      type string;
                      ordered-by user;
                      description
                        "List of filter modules applied to transmitted packets ";
                    }
                  }  // choice output_choice
    
                  container adf {
                    description
                      "Ascend Data Filter definition";
                    uses apply-advanced;
    
                    list rule {
                      key "name";
                      ordered-by user;
                      description
                        "Set of ADF rules";
                      leaf name {
                        type string;
                        description
                          "Value for a single rule";
                      }
    
                      uses apply-advanced;
                    }  // list rule
    
                    leaf counter {
                      type empty;
                      description
                        "Add a counter to each rule";
                    }
    
                    leaf input-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the input rules";
                    }
    
                    leaf not-mandatory {
                      type empty;
                      description
                        "No errors will be reported if no rules are present";
                    }
    
                    leaf output-precedence {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "0 .. 255";
                        }
                      }
                      description
                        "Precedence of the output rules";
                    }
                  }  // container adf
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Group to which interface belongs";
                  }
                }  // container filter
    
                container policer {
                  description
                    "Interface policing";
                  uses apply-advanced;
    
                  leaf input {
                    type string;
                    description
                      "Name of policer applied to received packets";
                  }
    
                  leaf output {
                    type string;
                    description
                      "Name of policer applied to transmitted packets";
                  }
                }  // container policer
    
                leaf interface-mode {
                  type enumeration {
                    enum "access" {
                      junos:must "((!("interfaces ${interface} vlan-tagging") && (!("interfaces ${interface} flexible-vlan-tagging") && !("interfaces ${interface} stacked-vlan-tagging"))))";
                      junos:must-message "interface-mode access is allowed only for untagged interfaces";
                      value 0;
                      description
                        "Interface mode is access";
                    }
                    enum "trunk" {
                      junos:must "(!("interfaces ${interface} no-native-vlan-insert"))";
                      junos:must-message "'interface-mode trunk' must not be configured with 'no-native-vlan-insert'";
                      junos:must "((("protocols mvrp interface ${interface}" || any "routing-instances <*> protocols mvrp interface ${interface}") || (".. vlan-id-list" || (".. isid-list" || (".. inner-vlan-id-list" || (".. vlan members" || ("..inner-vlan members" || (".. vlan-id" || ".. vlan-auto-sense"))))))))";
                      junos:must-message "'interface-mode trunk' must be defined with either 'vlan-id-list','isid-list', 'inner-vlan-id-list' or the interface must be configured for 'protocols mvrp' or 'vlan-auto-sense'";
                      value 1;
                      description
                        "Interface mode is trunk";
                    }
                  }
                  description
                    "Interface mode (access or trunk)";
                }
    
                leaf vlan-auto-sense {
                  junos:must "(".. interface-mode trunk")";
                  junos:must-message "vlan-auto-sense can be enabled only on trunk interfaces";
                  type empty;
                  description
                    "Enable VLAN auto sense on this interface";
                }
    
                leaf bridge-domain-type {
                  type enumeration {
                    enum "svlan" {
                      junos:must "(".. isid-list all-service-groups")";
                      junos:must-message "bridge-domain-type svlan is allowed only for isid tagged interfaces";
                      junos:must "(".. interface-mode trunk")";
                      junos:must-message "bridge-domain-type svlan is allowed only for trunk interfaces";
                      value 0;
                      description
                        "Bridge domain type svlan";
                    }
                    enum "bvlan" {
                      junos:must "(".. isid-list all")";
                      junos:must-message "bridge-domain-type bvlan is allowed only for isid tagged interfaces";
                      junos:must "(".. interface-mode trunk")";
                      junos:must-message "bridge-domain-type bvlan is allowed only for trunk interfaces";
                      value 1;
                      description
                        "Bridge domain type bvlan";
                    }
                  }
                  description
                    "Bridge domain type (svlan or bvlan)";
                }
    
                leaf inter-switch-link {
                  junos:must "(".. interface-mode trunk")";
                  junos:must-message "'Inter switch link' is supported only under trunk interface mode";
                  type empty;
                  description
                    "PVLAN inter switch link";
                }
    
                choice vlan_list {
                  leaf vlan-id {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 4094";
                      }
                    }
                    description
                      "Access mode and trunk mode VLAN membership";
                  }
                  leaf-list vlan-id-list {
                    junos:must "((!(".. .. .. vlan-id") && !(".. .. .. vlan-tags")))";
                    junos:must-message "'vlan-id-list' cannot be used on interface with vlan-id/vlan-tags";
                    junos:must "(!("interfaces ${interface} stacked-vlan-tagging"))";
                    junos:must-message "'vlan-id-list' is not supported on stacked-vlan-tagging mode";
                    junos:must "(".. interface-mode trunk")";
                    junos:must-message "'vlan-id-list' statement supported only under trunk interface mode";
                    type jt:vlan-range;
                    description
                      "Trunk mode VLAN membership for this interface";
                  }
                  leaf-list inner-vlan-id-list {
                    junos:must "((!(".. .. .. vlan-tags inner") && !(".. .. .. vlan-tags inner-range")))";
                    junos:must-message "'inner-vlan-id-list' cannot be used on interface with vlan-tags inner/inner-range";
                    junos:must "((".. .. .. vlan-id" || ".. .. .. vlan-tags"))";
                    junos:must-message "'inner-vlan-id-list' can be used only on interface with vlan-id/vlan-tags";
                    junos:must "("interfaces ${interface} flexible-vlan-tagging")";
                    junos:must-message "'inner-vlan-id-list' is supported only on flexible-vlan-tagging mode";
                    junos:must "(".. interface-mode trunk")";
                    junos:must-message "'inner-vlan-id-list' statement supported only under trunk interface mode";
                    type jt:vlan-range;
                    description
                      "Trunk mode VLAN membership for this interface based on inner VLAN tag";
                  }
                }  // choice vlan_list
    
                container vlan-rewrite {
                  junos:must "((".. inner-vlan-id-list" || ".. vlan-id-list"))";
                  junos:must-message "'vlan-rewrite' statement can be used only with 'vlan-id-list' or inner-vlan-id-list configured";
                  junos:must "(".. interface-mode trunk")";
                  junos:must-message "'vlan-rewrite' statement supported only under trunk interface mode";
                  description
                    "Specify vlan translation";
                  uses apply-advanced;
    
                  list translate {
                    key "name";
                    ordered-by user;
                    description
                      "Translate incoming VLAN tag";
                    leaf name {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 4094";
                        }
                      }
                      description
                        "Specify the incoming VLAN tag";
                    }
    
                    leaf to-vlan-id {
                      type union {
                        type string {
                          pattern "<.*>|$.*";
                        }
                        type uint32 {
                          range "1 .. 4094";
                        }
                      }
                      description
                        "Specify the bridge-domain VLAN-ID";
                    }
                  }  // list translate
                }  // container vlan-rewrite
    
                choice isid_list {
                  case case_1 {
                  }  // case case_1
                }  // choice isid_list
    
                container recovery-timeout {
                  junos:must "(".. storm-control")";
                  junos:must-message "Recovery timeout should be configured only with storm-control";
                  description
                    "Recovery timeout for this interface";
                  leaf time-in-seconds {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "10 .. 3600";
                      }
                    }
                    units "seconds";
                  }
                }  // container recovery-timeout
              }  // container bridge
    
              container ethernet-switching {
                junos:must "((!(".. vpls") && (!(".. inet") && (!(".. inet6") && (!(".. bridge") && (!(".. ccc") && (!(".. iso") && (!(".. llc2") && (!(".. mpls") && (!(".. tcc") && (!(".. pppoe") && !(".. gre"))))))))))))";
                junos:must-message "Family ethernet-switching and rest of the families are mutually exclusive";
                junos:must "(!(("protocols l2-learning global-mode switching" && any "security zones security-zone <*> interfaces ${interface}")))";
                junos:must-message "In switching mode, ethernet-switching interface must not be in security zone.";
                junos:must "(!(("interfaces ${interface} vlan-tagging" && !("protocols l2-learning global-mode transparent-bridge"))))";
                junos:must-message "An interface cannot have both family ethernet-switching and vlan-tagging configured";
                junos:must "(!(("interfaces ${interface} vlan-tagging" && "protocols l2-learning global-mode switching")))";
                junos:must-message "An interface cannot have both family ethernet-switching and vlan-tagging configured";
                junos:must "(!((!("protocols l2-learning global-mode transparent-bridge") && any "security zones security-zone <*> interfaces ${interface}")))";
                junos:must-message "In switching mode, ethernet-switching interface must not be in security zone.";
                presence
                  "enable ethernet-switching";
                description
                  "Ethernet switching parameters";
                uses ethernet-switching-type;
              }  // container ethernet-switching
    
              container fibre-channel {
                presence "enable fibre-channel";
                description
                  "Fibre channel switching parameters";
                uses fibre-channel-type;
              }  // container fibre-channel
    
              container any {
                presence "enable any";
                description
                  "Parameters for 'any' family";
                uses apply-advanced;
    
                container filter {
                  description
                    "Layer 2 packet filtering";
                  uses apply-advanced;
    
                  leaf input {
                    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 applied to received packets";
                  }
    
                  leaf group {
                    type union {
                      type string {
                        pattern "<.*>|$.*";
                      }
                      type uint32 {
                        range "1 .. 255";
                      }
                    }
                    description
                      "Group to which interface belongs";
                  }
                }  // container filter
              }  // container any
    
              uses apply-advanced;
            }  // container family
    
            leaf service-domain {
              type enumeration {
                enum "inside" {
                  value 0;
                  description "Inside network";
                }
                enum "outside" {
                  value 1;
                  description "Outside network";
                }
              }
              description
                "Service domain to which interface belongs";
            }
    
            leaf copy-tos-to-outer-ip-header {
              type empty;
              description
                "Copy IP payload header's ToS field to GRE delivery header";
            }
    
            container load-balancing-options {
              junos:must "(!(".. .. load-balancing-options high-availability-options one-to-one"))";
              junos:must-message "load-balancing-options are used when number of active members is more than one";
              description
                "AMS subunit load balancing options";
              uses apply-advanced;
    
              leaf preferred-active {
                junos:must "((".. .. .. load-balancing-options member-interface $$" && !(".. .. .. load-balancing-options high-availability-options many-to-one preferred-backup $$")))";
                junos:must-message "Active should be one of member-interfaces excluding preferred-backup";
                type union {
                  type jt:interface-device;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description
                  "Preferred active Interface name";
              }
    
              leaf disable-hash {
                junos:must "(".. .. service-domain")";
                junos:must-message "service-domain must be configured if disable-hash is enabled";
                junos:must "(!(".. hash-keys"))";
                junos:must-message "hash-keys must not be configured if disable-hash is enabled";
                type empty;
                description
                  "Hash based distribution is not needed for this subunit";
              }
    
              container hash-keys {
                uses apply-advanced;
    
                leaf-list ingress-key {
                  type enumeration {
                    enum "source-ip" {
                      value 0;
                      description
                        "Source Ip Address";
                    }
                    enum "destination-ip" {
                      value 1;
                      description
                        "Destination Ip Address";
                    }
                    enum "protocol" {
                      value 2;
                      description "Protocol";
                    }
                    enum "iif" {
                      value 3;
                      description
                        "Incoming Interface";
                    }
                  }
                  ordered-by user;
                  description
                    "Hash Key for the ingress direction";
                }
    
                leaf-list egress-key {
                  type enumeration {
                    enum "source-ip" {
                      value 0;
                      status deprecated;
                      description
                        "Source Ip Address";
                    }
                    enum "destination-ip" {
                      value 1;
                      status deprecated;
                      description
                        "Destination Ip Address";
                    }
                    enum "protocol" {
                      value 2;
                      status deprecated;
                      description "Protocol";
                    }
                    enum "oif" {
                      value 3;
                      status deprecated;
                      description
                        "Outgoing Interface";
                    }
                  }
                  ordered-by user;
                  status deprecated;
                  description
                    "Hash Key for the egress direction";
                }
    
                leaf ipv6-source-prefix-length {
                  type enumeration {
                    enum "56" {
                      value 0;
                      description
                        "56 bit IPv6 address prefix";
                    }
                    enum "64" {
                      value 1;
                      description
                        "64 bit IPv6 address prefix";
                    }
                    enum "96" {
                      value 2;
                      description
                        "96 bit IPv6 address prefix";
                    }
                    enum "128" {
                      value 3;
                      description
                        "Complete 128 bit IPv6 address";
                    }
                  }
                  description
                    "IPv6 source prefix length for hash computation";
                }
              }  // container hash-keys
            }  // container load-balancing-options
    
            container interface-state {
              description
                "IRB interface state computation";
              uses apply-advanced;
    
              choice state {
                leaf local-interface {
                  type union {
                    type jt:interface-name;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  description
                    "IRB State computation based on loopback AE port state";
                }
              }  // choice state
    
              container hold-time {
                description
                  "Delay before marking interface up or down for defect";
                uses apply-advanced;
    
                leaf up {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "seconds";
                  description
                    "Delay in seconds before marking IRB interface up";
                }
    
                leaf down {
                  type union {
                    type uint32;
                    type string {
                      pattern "<.*>|$.*";
                    }
                  }
                  units "seconds";
                  description
                    "Delay in seconds before marking IRB interface down";
                }
              }  // container hold-time
            }  // container interface-state
    
            leaf mac {
              type jt:mac-unicast;
              description
                "Configure logical interface MAC address";
            }
    
            leaf virtual-gateway-v4-mac {
              type jt:mac-unicast;
              description
                "Configure virtual gateway IPV4 virtual MAC address";
            }
    
            leaf virtual-gateway-v6-mac {
              type jt:mac-unicast;
              description
                "Configure virtual gateway IPV6 virtual MAC address";
            }
    
            leaf etree-ac-role {
              type enumeration {
                enum "root" {
                  value 0;
                  description
                    "ETREE root interface";
                }
                enum "leaf" {
                  value 1;
                  description
                    "ETREE leaf interface";
                }
              }
              description
                "ETREE attachment circuit role";
            }
    
            container dialer-options {
              presence "enable dialer-options";
              description "Dialer options";
              uses apply-advanced;
    
              leaf pool {
                junos:must "((!("interfaces umd0 dialer-options pool $$") || !(".. callback")))";
                junos:must-message "callback is not supported if the subordinate interface is umd0";
                junos:must "(any "interfaces <*> dialer-options pool $$")";
                junos:must-message "Pool not configured in any subordinate interface";
                junos:must "(unique "interfaces <dl*>")";
                junos:must-message "Only one dl interface can be configured";
                type string {
                  length "1 .. 64";
                }
                description "Dialer pool";
              }
    
              leaf-list dial-string {
                type string {
                  length "1 .. 63";
                }
                max-elements 15;
                ordered-by user;
                description "String to dial out";
              }
    
              container incoming-map {
                description
                  "Map incoming call to dialer";
                uses apply-advanced;
    
                choice caller-type {
                  list caller {
                    key "name";
                    max-elements 300;
                    ordered-by user;
                    description
                      "Caller Id to be screened";
                    leaf name {
                      type string {
                        junos:posix-pattern "^([0-9]{1,15})$";
                        junos:pattern-message "Can contain up to 15 digits";
                      }
                      description
                        "Caller ID (upto 15 digits)";
                    }
                  }  // list caller
                  leaf accept-all {
                    type empty;
                    description
                      "Accept all incoming calls";
                  }
                }  // choice caller-type
              }  // container incoming-map
    
              leaf callback {
                junos:must "(!(".. watch-list "))";
                junos:must-message "A dialer interface cannot have callback enabled and watch-list at the same time";
                junos:must "(".. dial-string")";
                junos:must-message "Dial string is mandatory for callback";
                junos:must "(".. incoming-map")";
                junos:must-message "incoming-map is mandatory for callback";
                type empty;
                description
                  "Call back on any incoming call to the dialer";
              }
    
              leaf callback-wait-period {
                junos:must "(".. callback")";
                junos:must-message "Callback needs to be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 255";
                  }
                }
                units "seconds";
                description
                  "Time to wait before calling back";
              }
    
              leaf redial-delay {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 255";
                  }
                }
                units "seconds";
                description
                  "Time to wait before redialing";
              }
    
              leaf idle-timeout {
                junos:must "((".. .. family inet  filter dialer" || (".. .. family inet6 filter dialer" || ".. .. family mpls  filter dialer")))";
                junos:must-message "Dialer filter must be configured";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 4294967295";
                  }
                }
                units "seconds";
                default "120";
                description
                  "Delay before taking down the interface";
              }
    
              list watch-list {
                junos:must "(".. dial-string")";
                junos:must-message "dial-string is mandatory for watch-list";
                key "name";
                description "Dialer watch list";
                leaf name {
                  type jt:ipprefix-only;
                  description "Address prefix";
                }
    
                uses apply-advanced;
              }  // list watch-list
    
              leaf load-threshold {
                junos:must "(".. .. .. encapsulation multilink-ppp")";
                junos:must-message "Encapsulation must be multilink-ppp";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 100";
                  }
                }
                description
                  "Load threshold for adding interfaces";
              }
    
              leaf load-interval {
                junos:must "(".. .. .. encapsulation multilink-ppp")";
                junos:must-message "Encapsulation must be multilink-ppp";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "20 .. 180";
                  }
                }
                units "seconds";
                description
                  "Interval used to calculate average load";
              }
    
              leaf activation-delay {
                junos:must "(!((".. .. family inet  filter dialer" || (".. .. family inet6 filter dialer" || ".. .. family mpls  filter dialer"))))";
                junos:must-message "Activation delay cannot be configured for dialer filter";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                units "seconds";
                description "Activation delay";
              }
    
              leaf deactivation-delay {
                junos:must "(!((".. .. family inet  filter dialer" || (".. .. family inet6 filter dialer" || ".. .. family mpls  filter dialer"))))";
                junos:must-message "Deactivation delay cannot be configured for dialer filter";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4294967295";
                  }
                }
                units "seconds";
                description "Deactivation delay";
              }
    
              leaf initial-route-check {
                junos:must "(".. watch-list")";
                junos:must-message "No watch list specified under dialer options";
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 300";
                  }
                }
                units "seconds";
                default "120";
                description
                  "Delay to check primary after the router is up";
              }
    
              leaf-list route {
                type jt:ipprefix;
                ordered-by user;
                description "Route on dialer";
              }
    
              leaf always-on {
                junos:must "(unique "interfaces <dl*> unit <*> dialer-options always-on")";
                junos:must-message "Only one dl logical interface can have always-on configured";
                junos:must "(!((".. .. family inet  filter dialer" || (".. .. family inet6 filter dialer" || ".. .. family mpls  filter dialer"))))";
                junos:must-message "A dialer interface cannot have always-on enabled and filter at the same time";
                type empty;
                description
                  "Always keep on-line";
              }
    
              leaf self-recover-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "2 .. 120";
                  }
                }
                units "seconds";
                description
                  "Sub-interface self-recover time";
              }
            }  // container dialer-options
    
            container backup-options {
              description
                "Backup interface configuration options";
              uses apply-advanced;
    
              leaf interface {
                junos:must "("interfaces $$-IFL dialer-options dial-string")";
                junos:must-message "No dial-string configured in backup dialer interface";
                junos:must "(!("interfaces $$-IFL dialer-options callback "))";
                junos:must-message "A dialer interface cannot be backup as well as have callback";
                junos:must "(!(("interfaces $$-IFL family inet  filter dialer" || ("interfaces $$-IFL family inet6 filter dialer" || "interfaces $$-IFL family mpls  filter dialer"))))";
                junos:must-message "A dialer interface cannot be backup as well as have dialer filter";
                junos:must "(!("interfaces $$-IFL dialer-options watch-list "))";
                junos:must-message "A dialer interface cannot be backup as well as have watch list";
                junos:must "("interfaces $$-IFL dialer-options")";
                junos:must-message "No dialer options configured in backup dialer interface";
                junos:must "(!("interfaces $$-IFL dialer-options always-on"))";
                junos:must-message "A dialer interface cannot be backup as well as always-on";
                type union {
                  type jt:interface-name;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Backup interface";
              }
            }  // container backup-options
    
            container dynamic-call-admission-control {
              description
                "Dynamic call admission control configuration";
              uses apply-advanced;
    
              leaf bearer-bandwidth-limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "0 .. 9999";
                  }
                }
                units "kilobits per second";
                description
                  "Bearer bandwidth limit";
              }
    
              leaf activation-priority {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint8 {
                    range "0 .. 255";
                  }
                }
                default "50";
                description
                  "Priority assigned to bearer bandwidth limit";
              }
            }  // container dynamic-call-admission-control
          }  // list unit
        }  // grouping tenant_interfaces_type
    
        grouping dcd_shaping_config {
          description "Traffic-shaping profile";
          uses apply-advanced;
    
          choice useless_shaping_choice {
            container cbr {
              presence "enable cbr";
              description
                "Constant bandwidth utilization";
              leaf cbr-value {
                type string;
                description
                  "Constant bandwidth utilization";
              }
    
              leaf cdvt {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 9999";
                  }
                }
                units "microseconds";
                description
                  "Cell Delay Variation Tolerance";
              }
            }  // container cbr
            container vbr {
              description
                "Variable bandwidth utilization";
              leaf peak {
                type string;
                description "Peak rate";
              }
    
              leaf sustained {
                type string;
                description "Sustained rate";
              }
    
              leaf burst {
                type string;
                description "Burst size";
              }
    
              leaf cdvt {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 9999";
                  }
                }
                units "microseconds";
                description
                  "Cell Delay Variation Tolerance";
              }
            }  // container vbr
            container rtvbr {
              description
                "ATM2 real-time variable bandwidth utilization";
              leaf peak {
                type string;
                description "Peak rate";
              }
    
              leaf sustained {
                type string;
                description "Sustained rate";
              }
    
              leaf burst {
                type string;
                description "Burst size";
              }
            }  // container rtvbr
          }  // choice useless_shaping_choice
    
          leaf queue-length {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 16383";
              }
            }
            description "Queue length";
          }
        }  // grouping dcd_shaping_config
    
        grouping dhcp-client-type {
          description
            "Dynamic Host Configuration Protocol client configuration";
          uses apply-advanced;
    
          container client-identifier {
            description
              "DHCP server identifies a client by client-identifier value ";
            uses apply-advanced;
    
            choice client-identifier-choice {
              leaf ascii {
                type string;
                description
                  "Client identifier as an ASCII string";
              }
              leaf hexadecimal {
                type string {
                  junos:posix-pattern "^[[:xdigit:]]+$";
                  junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                }
                description
                  "Client identifier as a hexadecimal string";
              }
            }  // choice client-identifier-choice
    
            container user-id {
              description
                "Add user id to client-id option ";
              choice user-id-choice {
                leaf ascii {
                  type string;
                  description
                    "Client identifier as an ASCII string";
                }
                leaf hexadecimal {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                  }
                  description
                    "Client identifier as a hexadecimal string";
                }
              }  // choice user-id-choice
            }  // container user-id
    
            container prefix {
              description
                "Add prefix to client-id option";
              uses apply-advanced;
    
              leaf host-name {
                type empty;
                description
                  "Add router host name to client-id option";
              }
    
              leaf logical-system-name {
                type empty;
                description
                  "Add logical system name to client-id option";
              }
    
              leaf routing-instance-name {
                type empty;
                description
                  "Add routing instance name to client-id option";
              }
            }  // container prefix
    
            leaf use-interface-description {
              type enumeration {
                enum "logical" {
                  value 0;
                  description
                    "Use the logical interface description";
                }
                enum "device" {
                  value 1;
                  description
                    "Use the device interface description";
                }
              }
              description
                "Use the interface description";
            }
    
            leaf hardware-type {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint8 {
                  range "0 .. 255";
                }
              }
              default "0";
              description "Hardware type";
            }
          }  // container client-identifier
    
          container no-dns-install {
            presence "enable no-dns-install";
            description
              "Do not install DNS information learned from DHCP server";
          }  // container no-dns-install
    
          leaf lease-time {
            type string;
            units "seconds";
            description
              "Lease time in seconds requested in DHCP client protocol packet";
          }
    
          leaf retransmission-attempt {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 50000";
              }
            }
            default "4";
            description
              "Number of attempts to retransmit the DHCP client protocol packet";
          }
    
          leaf retransmission-interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "4 .. 64";
              }
            }
            units "seconds";
            default "4";
            description
              "Number of seconds between successive retransmission";
          }
    
          leaf metric {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 255";
              }
            }
            default "0";
            description
              "Client initiated default-route metric";
          }
    
          leaf server-address {
            type jt:ipv4addr;
            description "DHCP Server-address";
          }
    
          leaf update-server {
            type empty;
            description
              "Propagate TCP/IP settings to DHCP server";
          }
    
          leaf vendor-id {
            type string {
              length "1 .. 60";
            }
            description
              "Vendor class id for the DHCP Client";
          }
    
          leaf force-discover {
            type empty;
            description
              "Send DHCPDISCOVER after DHCPREQUEST retransmission failure";
          }
    
          container options {
            description "DHCP options";
            uses apply-advanced;
    
            list number {
              key "name";
              description "DHCP option code";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 254";
                  }
                }
                description
                  "DHCP option identifier code";
              }
    
              choice option-type-choice {
                leaf hex-string {
                  type string {
                    junos:posix-pattern "^[[:xdigit:]]+$";
                    junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)";
                    length "1 .. 510";
                  }
                  description
                    "Hexadecimal string";
                }
              }  // choice option-type-choice
            }  // list number
    
            leaf no-hostname {
              type empty;
              description
                "Do not carry hostname (RFC option code is 12) in packet";
            }
          }  // container options
    
          list requested-options {
            key "name";
            description "DHCP options";
            leaf name {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 254";
                }
              }
              description
                "DHCP option identifier code";
            }
          }  // list requested-options
        }  // grouping dhcp-client-type
    
        grouping dynamic_ifbw_parms_type {
          uses apply-advanced;
    
          leaf capacity {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            status deprecated;
            description
              "Weight of current (vs. maximum) data rate";
          }
    
          leaf margin {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            status deprecated;
            description
              "Maximum reduction in bandwidth due to low link quality";
          }
    
          leaf delay {
            type string;
            units "bits per second";
            status deprecated;
            description
              "Bandwidth reduction when delay is announced as 1 second";
          }
    
          leaf bandwidth {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            description
              "Weight of current (vs. maximum) data rate";
          }
    
          leaf resource {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            description "Resource weight";
          }
    
          leaf latency {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            description "Latency weight";
          }
    
          leaf quality {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            description
              "Relative Link Quality weight";
          }
    
          leaf data-rate {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            description "Data rate weight";
          }
    
          leaf threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 100";
              }
            }
            units "percent";
            description
              "Percentage bandwidth change required for routing updates";
          }
    
          container credit {
            presence "enable credit";
            description
              "Credit-based scheduling parameters";
            uses apply-advanced;
    
            leaf interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "1 .. 60";
                }
              }
              description
                "Grant rate interval in 100mS steps";
            }
          }  // container credit
        }  // grouping dynamic_ifbw_parms_type
    
        grouping epd_threshold_config {
          uses apply-advanced;
    
          leaf epd-threshold-plp0 {
            type string;
            units "cells";
            description
              "Early packet discard threshold value";
          }
    
          leaf plp1 {
            type string;
            units "cells";
            description
              "Early packet drop threshold value for PLP 1";
          }
        }  // grouping epd_threshold_config
    
        grouping ethernet-switching-type {
          description
            "Ethernet switching family";
          uses apply-advanced;
    
          leaf port-mode {
            type enumeration {
              enum "access" {
                value 0;
                description
                  "Interface mode is access";
              }
              enum "tagged-access" {
                value 1;
                description
                  "Interface mode is tagged-access";
              }
              enum "trunk" {
                value 2;
                description
                  "Interface mode is trunk";
              }
            }
            description "Type of port mode";
          }
    
          leaf interface-mode {
            type enumeration {
              enum "access" {
                junos:must "((!("interfaces ${interface} vlan-tagging") && (!("interfaces ${interface} flexible-vlan-tagging") && (!("interfaces ${interface} stacked-vlan-tagging") && !("interfaces ${interface} encapsulation extended-vlan-bridge")))))";
                junos:must-message "interface-mode access is allowed only for untagged interfaces, also not allowed with flexible-vlan-tagging and extended-vlan-bridge";
                value 0;
                description
                  "Interface mode is access";
              }
              enum "trunk" {
                junos:must "((!(("protocols dot1x authenticator interface ${interface}.${unit}" || "protocols dot1x supplicant interface ${interface}.${unit}")) || ("interfaces ${interface} native-vlan-id" && !("interfaces ${interface} flexible-vlan-tagging"))))";
                junos:must-message "Must configure native-vlan-id but no flexible-vlan-tagging for dot1x enabled port";
                junos:must "(!("interfaces ${interface} encapsulation extended-vlan-bridge"))";
                junos:must-message "interface-mode is not allowed for extended-vlan-bridge";
                value 1;
                description
                  "Interface mode is trunk";
              }
            }
            default "access";
            description "Type of interface mode";
          }
    
          leaf inter-switch-link {
            junos:must "(".. interface-mode trunk")";
            junos:must-message "'Inter switch link' is supported only under trunk interface mode";
            type empty;
            description
              "PVLAN inter switch link";
          }
    
          leaf reflective-relay {
            junos:must "(".. port-mode tagged-access")";
            junos:must-message "Reflective relay is supported only on tagged-access port";
            type empty;
            description
              "Reflective-relay mode for this interface";
          }
    
          choice vlan_choice_list {
            container vlan {
              description
                "Virtual LAN parameters";
              uses apply-advanced;
    
              leaf-list members {
                type string;
                ordered-by user;
                description
                  "Membership for this interface (name or id)";
              }
            }  // container vlan
            container inner-vlan {
              description
                "Trunk mode vlan membership for this interface";
              uses apply-advanced;
    
              leaf-list members {
                type string;
                ordered-by user;
                description
                  "Membership for this interface (name or id)";
              }
            }  // container inner-vlan
            leaf-list inner-vlan-id-list {
              junos:must "((!(".. .. .. vlan-tags inner") && !(".. .. .. vlan-tags inner-range")))";
              junos:must-message "'inner-vlan-id-list' cannot be used on interface with vlan-tags inner or inner-range configured";
              junos:must "((".. .. .. vlan-id" || ".. .. .. vlan-tags"))";
              junos:must-message "'inner-vlan-id-list' can be used only on interface with vlan-id/vlan-tags";
              junos:must "("interfaces ${interface} flexible-vlan-tagging")";
              junos:must-message "'inner-vlan-id-list' is supported only on flexible-vlan-tagging mode";
              junos:must "(".. interface-mode trunk")";
              junos:must-message "'inner-vlan-id-list' statement supported only under trunk interface mode";
              type jt:vlan-range;
              description
                "Trunk mode VLAN membership for this interface based on inner VLAN tag";
            }
          }  // choice vlan_choice_list
    
          leaf vlan-auto-sense {
            junos:must "(".. interface-mode trunk")";
            junos:must-message "vlan-auto-sense can be enabled only on trunk ports";
            type empty;
            description
              "Enable VLAN auto sense on this interface";
          }
    
          leaf bridge-domain-type {
            type enumeration {
              enum "svlan" {
                junos:must "(".. isid-list all-service-groups")";
                junos:must-message "bridge-domain-type SVLAN is allowed only for ISID tagged interfaces";
                junos:must "(".. interface-mode trunk")";
                junos:must-message "bridge-domain-type SVLAN is allowed only for trunk interfaces";
                value 0;
                description
                  "Bridge domain type SVLAN";
              }
              enum "bvlan" {
                junos:must "(".. isid-list all")";
                junos:must-message "bridge-domain-type BVLAN is allowed only for ISID tagged interfaces";
                junos:must "(".. interface-mode trunk")";
                junos:must-message "bridge-domain-type BVLAN is allowed only for trunk interfaces";
                value 1;
                description
                  "Bridge domain type BVLAN";
              }
            }
            description "Bridge domain type";
          }
    
          container vlan-rewrite {
            junos:must "((".. inner-vlan-id-list" || ".. vlan members"))";
            junos:must-message "'vlan-rewrite' statement can be used only with 'vlan members' or inner-vlan-id-list configured";
            junos:must "(".. interface-mode trunk")";
            junos:must-message "'vlan-rewrite' statement supported only under trunk interface mode";
            description
              "Specify VLAN translation";
            uses apply-advanced;
    
            list translate {
              key "name";
              ordered-by user;
              description
                "Translate incoming VLAN tag";
              leaf name {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4094";
                  }
                }
                description
                  "Specify the incoming VLAN tag";
              }
    
              leaf to-vlan-id {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 4094";
                  }
                }
                description
                  "Specify the bridge-domain VLAN-ID";
              }
            }  // list translate
          }  // container vlan-rewrite
    
          leaf native-vlan-id {
            type string;
            description
              "Untagged packets on a trunk/tagged-access interface belong to this vlan";
          }
    
          choice isid_list {
            case case_1 {
            }  // case case_1
          }  // choice isid_list
    
          leaf core-facing {
            type empty;
            description
              "Interface is core facing";
          }
    
          container filter {
            description "Packet filtering";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of filter applied to received packets";
            }
    
            leaf input-precedence {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255";
                }
              }
              description
                "Precedence of the filter";
            }
    
            leaf-list input-list {
              type string;
              ordered-by user;
              description
                "List of filter modules applied to received packets ";
            }
    
            leaf output {
              type string;
              description
                "Name of filter applied to transmitted packets";
            }
    
            leaf output-precedence {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255";
                }
              }
              description
                "Precedence of the filter";
            }
    
            leaf-list output-list {
              type string;
              ordered-by user;
              description
                "List of filter modules applied to transmitted packets ";
            }
    
            container adf {
              description
                "Ascend Data Filter definition";
              uses apply-advanced;
    
              list rule {
                key "name";
                ordered-by user;
                description "Set of ADF rules";
                leaf name {
                  type string;
                  description
                    "Value for a single rule";
                }
    
                uses apply-advanced;
              }  // list rule
    
              leaf counter {
                type empty;
                description
                  "Add a counter to each rule";
              }
    
              leaf input-precedence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Precedence of the input rules";
              }
    
              leaf not-mandatory {
                type empty;
                description
                  "No errors will be reported if no rules are present";
              }
    
              leaf output-precedence {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 255";
                  }
                }
                description
                  "Precedence of the output rules";
              }
            }  // container adf
    
            leaf group {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              description
                "Group to which interface belongs";
            }
          }  // container filter
    
          container policer {
            description "Interface policing";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of policer applied to received packets";
            }
    
            leaf output {
              type string;
              description
                "Name of policer applied to transmitted packets";
            }
          }  // container policer
    
          container storm-control {
            description
              "Storm control profile name to bind";
            uses apply-advanced;
    
            leaf profile-name {
              junos:must "("forwarding-options storm-control-profiles $$")";
              junos:must-message "Storm profile name must be defined in the [edit forwarding-options storm-control-profiles] hierarchy";
              type string;
              description "Profile name";
            }
          }  // container storm-control
    
          container recovery-timeout {
            description
              "Recovery timeout for this interface";
            leaf time-in-seconds {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 3600";
                }
              }
              units "seconds";
            }
          }  // container recovery-timeout
        }  // grouping ethernet-switching-type
    
        grouping fibre-channel-type {
          description
            "Fibre Channel switching family";
          uses apply-advanced;
    
          leaf port-mode {
            type enumeration {
              enum "f-port" {
                value 0;
                description "Fabric port";
              }
              enum "e-port" {
                value 1;
                description "Inter-switch port";
              }
              enum "np-port" {
                value 2;
                description "Proxy node port";
              }
              enum "auto" {
                value 3;
                description
                  "Interface mode (F/E) is determined at runtime";
              }
            }
            description "Port mode";
          }
    
          leaf no-npiv {
            junos:must "((".. port-mode f-port" || (".. port-mode auto" || !(".. port-mode"))))";
            junos:must-message "Interface must be f-port or auto to disable NPIV";
            type empty;
            description "Disable NPIV";
          }
    
          container fc-fabric {
            description
              "Virtual fabric parameters";
            uses apply-advanced;
    
            leaf-list members {
              type string;
              ordered-by user;
              description
                "Virtual Fabric Membership for this interface (name or id)";
            }
          }  // container fc-fabric
    
          leaf native-fabric {
            type string {
              junos:posix-pattern "^([[:alpha:]][[:alnum:]_.-]+)|^([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4])$";
              junos:pattern-message "Must be a valid FC fabric name or ID";
            }
            description
              "FC frames with no virtual fabric header on a interface belong to this fabric";
          }
        }  // grouping fibre-channel-type
    
        grouping keepalives_type {
          uses apply-advanced;
    
          leaf interval {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 32767";
              }
            }
            units "seconds";
            description "Keepalive period";
          }
    
          leaf up-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            description
              "Keepalive received to bring link up";
          }
    
          leaf down-count {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "1 .. 255";
              }
            }
            description
              "Keepalive missed to bring link down";
          }
        }  // grouping keepalives_type
    
        grouping mac_list {
          description "MAC address";
          leaf name {
            type jt:mac-addr;
          }
    
          uses apply-advanced;
    
          container policer {
            description "MAC policing";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of policer applied to received packets";
            }
    
            leaf output {
              type string;
              description
                "Name of policer applied to transmitted packets";
            }
          }  // container policer
        }  // grouping mac_list
    
        grouping ppp_options_type {
          uses apply-advanced;
    
          leaf dynamic-profile {
            junos:must "("dynamic-profiles $$")";
            junos:must-message "referenced dynamic-profile must be defined";
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "dynamic-profile statement can be configured only on logical interfaces";
            type string;
            description "Dynamic profile name";
          }
    
          container chap {
            presence "enable chap";
            description
              "Challenge Handshake Authentication Protocol options";
            uses apply-advanced;
    
            choice access-data {
              leaf access-profile {
                junos:must "("access profile $$")";
                junos:must-message "referenced access profile must be defined";
                type string {
                  length "1 .. 63";
                }
                description
                  "Profile containing client list and access parameters";
              }
              leaf default-chap-secret {
                type jt:unreadable;
                description
                  "Default CHAP secret to be used when no matching access profile exists";
              }
            }  // choice access-data
    
            leaf local-name {
              type string;
              description
                "Name sent in CHAP-Challenge and CHAP-Response";
            }
    
            leaf no-rfc2486 {
              type empty;
              description
                "RFC2486 compliance is not enforced";
            }
    
            leaf passive {
              type empty;
              description
                "Handle incoming CHAP requests only";
            }
          }  // container chap
    
          container pap {
            presence "enable pap";
            description
              "Password Authentication Protocol options";
            uses apply-advanced;
    
            choice access-data {
              leaf access-profile {
                junos:must "("access profile $$")";
                junos:must-message "referenced access profile must be defined";
                type string {
                  length "1 .. 63";
                }
                description
                  "Profile containing client list and access parameters";
              }
              leaf default-password {
                type jt:unreadable;
                description
                  "Default PAP password used in the absence of matching profile";
              }
            }  // choice access-data
    
            leaf local-name {
              type string;
              description
                "Name sent in PAP request packet";
            }
    
            leaf no-rfc2486 {
              type empty;
              description
                "RFC2486 compliance is not enforced";
            }
    
            leaf local-password {
              type jt:unreadable;
              description
                "Password sent in PAP request packet";
            }
    
            leaf passive {
              junos:must "(".. local-password")";
              junos:must-message "local-password MUST be set if passive is used with PAP";
              type empty;
              description
                "Do not handle PAP authentication requests";
            }
          }  // container pap
    
          container compression {
            description
              "Set compression options";
            leaf acfc {
              junos:must "(!(".. .. .. encapsulation frame-relay-ppp"))";
              junos:must-message "compression acfc is not supported on encapsulation frame-relay-ppp";
              type empty;
              description
                "Negotiate Address/Control field compression";
            }
    
            leaf pfc {
              type empty;
              description
                "Negotiate Protocol field compression";
            }
          }  // container compression
    
          leaf lcp-restart-timer {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "lcp-restart-timer statement can be configured only on logical interfaces";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "20 .. 10000";
              }
            }
            units "milliseconds";
            description "LCP restart timer";
          }
    
          leaf ncp-restart-timer {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "ncp-restart-timer statement can be configured only on logical interfaces";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint16 {
                range "500 .. 10000";
              }
            }
            units "milliseconds";
            description "NCP restart timer";
          }
    
          leaf no-termination-request {
            type empty;
            description
              "Don't send PPP termination requests";
          }
    
          leaf loopback-clear-timer {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "loopback-clear-timer statement can be configured only on logical interfaces";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint8 {
                range "1 .. 60";
              }
            }
            units "seconds";
            description "Loopback clear timer";
          }
    
          leaf lcp-max-conf-req {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "lcp-max-conf-req statement can be configured only on logical interfaces";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Maximum LCP Conf-Req to be sent, 0 means infinite";
          }
    
          leaf ncp-max-conf-req {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "ncp-max-conf-req statement can be configured only on logical interfaces";
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 65535";
              }
            }
            description
              "Maximum NCP Conf-Req to be sent, 0 means infinite";
          }
    
          leaf on-demand-ip-address {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "on-demand-ip-address statement can be configured only on logical interfaces";
            type empty;
            description
              "Enable On-Demand IPv4 address allocation and de-allocation";
          }
    
          leaf aaa-options {
            junos:must "("access aaa-options $$")";
            junos:must-message "referenced aaa-options name must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Attach AAA options name to dynamic-profile";
          }
    
          container initiate-ncp {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "initiate-ncp statement can be configured only on logical interfaces";
            description
              "Enable server initiated NCP";
            uses apply-advanced;
    
            leaf ip {
              type empty;
              description
                "Enable server initiated IPNCP";
            }
    
            leaf ipv6 {
              type empty;
              description
                "Enable server initiated IPv6NCP";
            }
    
            leaf dual-stack-passive {
              type empty;
              description
                "Disable server initiated IPNCP/IPv6NCP for dual-stack client";
            }
          }  // container initiate-ncp
    
          leaf mtu {
            junos:must "(any ".. .. .. unit <*>")";
            junos:must-message "mtu statement can be configured only on logical interfaces";
            type string;
            description
              "The Maximum Transfer Unit size in bytes";
          }
    
          leaf peer-ip-address-optional {
            type empty;
            description
              "Set Peer IP Address Optional in IP NCP Negotiations";
          }
    
          leaf ipcp-suggest-dns-option {
            type empty;
            description
              "Suggest peer to negotiate with DNS Addresses options";
          }
    
          leaf ignore-magic-number-mismatch {
            type empty;
            description
              "Ignore magic-number validation failure in LCP keepalive";
          }
    
          container local-authentication {
            description
              "Local Authentication Protocol options";
            uses local_auth_type;
          }  // container local-authentication
    
          leaf lcp-connection-update {
            type empty;
            description
              "Enable LCP connection update request to peer";
          }
        }  // grouping ppp_options_type
    
        grouping local_auth_type {
          description "Local authentication";
          uses apply-advanced;
    
          leaf password {
            type string {
              length "1 .. 64";
            }
            description "Username password";
          }
    
          container username-include {
            description "Add username options";
            uses apply-advanced;
    
            leaf mac-address {
              type empty;
              description "Include MAC address";
            }
    
            leaf circuit-id {
              type empty;
              description "Include circuit-id ";
            }
    
            leaf remote-id {
              type empty;
              description "Include remote-id ";
            }
    
            leaf domain-name {
              type string {
                length "1 .. 64";
              }
              description "Domain name";
            }
    
            leaf delimiter {
              type string {
                length "1";
              }
              description
                "Delimiter/separator character";
            }
          }  // container username-include
        }  // grouping local_auth_type
    
        grouping pppoe_options_type {
          uses apply-advanced;
    
          leaf underlying-interface {
            junos:must "((!("interfaces $$-IFL pppoe-underlying-options dynamic-profile") && !("interfaces $$-IFL family pppoe dynamic-profile")))";
            junos:must-message "Underlying interface cannot be used for both static and dynamic PPPoE interfaces";
            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";
          }
    
          leaf idle-timeout {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            units "seconds";
            description
              "Time for which session can be idle (0 = forever)";
          }
    
          leaf access-concentrator {
            type string;
            description
              "Name of the access concentrator (PPPoE server)";
          }
    
          leaf service-name {
            type string;
            description
              "Service to be requested (from PPPoE server)";
          }
    
          leaf auto-reconnect {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 4294967295";
              }
            }
            units "seconds";
            description
              "Time to reconnect after session terminates (0 = never)";
          }
    
          choice pppoe-mode {
            leaf server {
              type empty;
              description
                "PPPoE operates in server mode";
            }
            leaf client {
              type empty;
              description
                "PPPoE operates in client mode";
            }
          }  // choice pppoe-mode
    
          leaf ppp-max-payload {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1492 .. 9192";
              }
            }
            description
              "Specify the value of ppp-max-payload tag";
          }
        }  // grouping pppoe_options_type
    
        grouping term_object {
          leaf name {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description "Term name";
          }
    
          leaf alg {
            type enumeration {
              enum "bootp" {
                value 0;
                description "Bootstrap protocol";
              }
              enum "dce-rpc" {
                value 1;
                description "DCE RPC";
              }
              enum "dce-rpc-portmap" {
                value 2;
                description "DCE RPC portmap";
              }
              enum "dns" {
                value 3;
                description
                  "Domain Name Service";
              }
              enum "exec" {
                value 4;
                description
                  "Remote Execution Protocol";
              }
              enum "ftp" {
                value 5;
                description
                  "File Transfer Protocol";
              }
              enum "ftp-data" {
                value 6;
                description
                  "File Transfer Protocol Data Session";
              }
              enum "gprs-gtp-c" {
                value 7;
                description
                  "GPRS Tunneling Control Plane";
              }
              enum "gprs-gtp-u" {
                value 8;
                description
                  "GPRS Tunneling User Plane";
              }
              enum "gprs-gtp-v0" {
                value 9;
                description
                  "GPRS Tunneling Version 0";
              }
              enum "gprs-sctp" {
                value 10;
                description
                  "GPRS Stream Control Protocol";
              }
              enum "h323" {
                value 11;
                description "H.323";
              }
              enum "icmp" {
                value 12;
                description "ICMP";
              }
              enum "icmpv6" {
                value 13;
                description "ICMPv6";
              }
              enum "ignore" {
                value 14;
                description
                  "Ignore application type";
              }
              enum "iiop" {
                value 15;
                description
                  "Internet Inter-ORB Protocol";
              }
              enum "ike-esp-nat" {
                value 16;
                description "IKE/ESP with NAT";
              }
              enum "ip" {
                value 17;
                description "IP";
              }
              enum "login" {
                value 18;
                description "Login";
              }
              enum "mgcp-ca" {
                value 19;
                description "MGCP-CA";
              }
              enum "mgcp-ua" {
                value 20;
                description "MGCP-UA";
              }
              enum "ms-rpc" {
                value 21;
                description "Microsoft RPC";
              }
              enum "netbios" {
                value 22;
                description "NetBIOS";
              }
              enum "netshow" {
                value 23;
                description "NetShow";
              }
              enum "none" {
                value 24;
                description "None";
              }
              enum "pptp" {
                value 25;
                description
                  "Point-to-Point Tunneling Protocol";
              }
              enum "q931" {
                value 26;
                description "Q.931";
              }
              enum "ras" {
                value 27;
                description "RAS";
              }
              enum "realaudio" {
                value 28;
                description "RealAudio";
              }
              enum "rpc" {
                value 29;
                description "RPC";
              }
              enum "rpc-portmap" {
                value 30;
                description "RPC portmap";
              }
              enum "rsh" {
                value 31;
                description "Remote Shell";
              }
              enum "rtsp" {
                value 32;
                description
                  "Real Time Streaming Protocol";
              }
              enum "sccp" {
                value 33;
                description
                  "Skinny Client Control Protocol";
              }
              enum "sip" {
                value 34;
                description
                  "Session Initiation Protocol";
              }
              enum "shell" {
                value 35;
                description "Shell";
              }
              enum "snmp" {
                value 36;
                description "SNMP";
              }
              enum "sqlnet" {
                value 37;
                description "SQLNet";
              }
              enum "sqlnet-v2" {
                value 38;
                description
                  "Oracle SQL*Net Version 2";
              }
              enum "sun-rpc" {
                value 39;
                description
                  "Sun Microsystems RPC";
              }
              enum "talk" {
                value 40;
                description "Talk Program";
              }
              enum "tftp" {
                value 41;
                description
                  "Trivial File Transfer Protocol";
              }
              enum "traceroute" {
                value 42;
                description "Traceroute";
              }
              enum "http" {
                value 43;
                description
                  "Hypertext Transfer Protocol";
              }
              enum "winframe" {
                value 44;
                description "WinFrame";
              }
              enum "https" {
                value 45;
                description
                  "Hypertext Transfer Protocol";
              }
              enum "imap" {
                value 46;
                description
                  "Internet Mail Access Protocol";
              }
              enum "smtp" {
                value 47;
                description
                  "Simple Mail Transfer Protocol";
              }
              enum "ssh" {
                value 48;
                description
                  "Secure Shell Protocol";
              }
              enum "telnet" {
                value 49;
                description "Telnet Protocol";
              }
              enum "twamp" {
                value 50;
                description
                  "Two Way Active Meaurement Protocol";
              }
              enum "pop3" {
                value 51;
                description
                  "Post Office Protocol 3 Protocol";
              }
              enum "smtps" {
                value 52;
                description
                  "Simple Mail Transfer Protocol Over TLS";
              }
              enum "imaps" {
                value 53;
                description
                  "Internet Mail Access Protocol Over TLS";
              }
              enum "pop3s" {
                value 54;
                description
                  "Post Office Protocol 3 Protocol Over TLS";
              }
            }
            description
              "Application Layer Gateway";
          }
    
          leaf protocol {
            type string;
            description "Match IP protocol type";
          }
    
          leaf source-port {
            type string;
            description
              "Match TCP/UDP source port";
          }
    
          leaf destination-port {
            type string;
            description
              "Match TCP/UDP destination port";
          }
    
          leaf icmp-type {
            type string;
            description
              "Match ICMP message type";
          }
    
          leaf icmp-code {
            type string;
            description
              "Match ICMP message code";
          }
    
          leaf icmp6-type {
            type string;
            description
              "Match ICMP6 message type";
          }
    
          leaf icmp6-code {
            type string;
            description
              "Match ICMP6 message code";
          }
    
          leaf rpc-program-number {
            type string {
              junos:posix-pattern "^(0|[1-9][0-9]{0,9})(-(0|[1-9][0-9]{0,9}))?$";
              junos:pattern-message "Value must be an integer or a range of integers";
            }
            description
              "Match range of RPC program numbers";
          }
    
          leaf uuid {
            type string {
              junos:posix-pattern "^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}$";
              junos:pattern-message "Value must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
            }
            description
              "Match universal unique identifier for DCE RPC objects";
          }
    
          leaf inactivity-timeout {
            type string;
            units "seconds";
            description
              "Application-specific inactivity timeout";
          }
        }  // grouping term_object
    
        grouping time-format-object {
          uses apply-advanced;
    
          leaf year {
            type empty;
            description
              "Year in time format for syslog";
          }
    
          leaf millisecond {
            type empty;
            description
              "Millisecond in time format for syslog";
          }
        }  // grouping time-format-object
    
        grouping tunable-object {
          leaf name {
            type string;
          }
    
          uses apply-advanced;
    
          leaf tunable-value {
            type union {
              type uint32;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Protocol tunable value";
          }
        }  // grouping tunable-object
    
        grouping tunnel-inspection-profile-type {
          description
            "Configure tunnel-inspection profile";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description
              "Tunnel-inspection profile name";
          }
    
          uses apply-advanced;
    
          choice inspection-type {
            list vxlan {
              key "name";
              ordered-by user;
              description
                "Define a vxlan tunnel";
              uses vxlan-tunnel-type;
            }  // list vxlan
          }  // choice inspection-type
        }  // grouping tunnel-inspection-profile-type
    
        grouping tunnel-inspection-vni-type {
          description "VNI config";
          leaf name {
            type string {
              length "1 .. 64";
            }
            description "VNI name";
          }
    
          uses apply-advanced;
    
          choice vni-type {
            list vni-range {
              key "name";
              ordered-by user;
              description "VNI range";
              uses vni-range-type;
            }  // list vni-range
            leaf-list vni-id {
              type union {
                type uint32;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              ordered-by user;
              description "VNI ID";
            }
          }  // choice vni-type
        }  // grouping tunnel-inspection-vni-type
    
        grouping tunnel_type {
          description "Tunnel packets";
          uses apply-advanced;
    
          choice ipsec-vpn-choice {
            leaf ipsec-vpn {
              junos:must "(!("security ipsec vpn $$ bind-interface"))";
              junos:must-message "Route based ipsec-vpn cannot be referenced for policy";
              junos:must "("security ipsec vpn $$")";
              junos:must-message "Security VPN must be defined";
              type string {
                length "1 .. 63";
              }
              description "Enable VPN with name";
            }
            leaf ipsec-group-vpn {
              junos:must "("security group-vpn member ipsec vpn $$")";
              junos:must-message "Security group VPN must be defined";
              type string {
                length "1 .. 63";
              }
              status deprecated;
              description
                "Enable dynamic IPSEC group with name";
            }
          }  // choice ipsec-vpn-choice
    
          leaf pair-policy {
            type string {
              junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$";
              junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 63";
            }
            description
              "Policy in the reverse direction, to form a pair";
          }
        }  // grouping tunnel_type
    
        grouping url-list-type {
          description
            "Configure url-list object";
          leaf name {
            type string {
              junos:posix-pattern "^[a-zA-Z_]+[a-zA-Z_0-9-]*$";
              junos:pattern-message "Must be a string beginning with a letter or underscore and consisting of letters, numbers, dashes and underscores.";
              length "1 .. 29";
            }
            description
              "Configure name of url-list object";
          }
    
          uses apply-advanced;
    
          leaf-list value {
            type string {
              length "1 .. 249";
            }
            ordered-by user;
            description
              "Configure value of url-list object";
          }
        }  // grouping url-list-type
    
        grouping user-group-mapping-type {
          uses apply-advanced;
    
          container ldap {
            description "LDAP";
            uses apply-advanced;
    
            leaf authentication-algorithm {
              type enumeration {
                enum "simple" {
                  value 0;
                  description
                    "Simple authentication";
                }
              }
              description
                "Authentication-algorithm";
            }
    
            leaf ssl {
              type empty;
              description "SSL";
            }
    
            leaf base {
              type string {
                length "1 .. 128";
              }
              description
                "Base distinguished name";
            }
    
            container user {
              description "User name";
              uses apply-advanced;
    
              leaf user-name {
                type string {
                  junos:posix-pattern "^[[:alnum:]._-]+$|^\\*$";
                  junos:pattern-message "Must be a string consisting of letters, numbers, dashes, underscores and dots";
                  length "1 .. 64";
                }
                description "User name";
              }
    
              leaf password {
                type string {
                  length "1 .. 128";
                }
                description "Password string";
              }
            }  // container user
    
            list address {
              key "name";
              ordered-by user;
              description
                "Address of LDAP server";
              leaf name {
                type jt:ipaddr;
                description "Address";
              }
    
              uses apply-advanced;
    
              leaf port {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint16 {
                    range "1 .. 65535";
                  }
                }
                description "LDAP port";
              }
            }  // list address
          }  // container ldap
        }  // grouping user-group-mapping-type
    
        grouping usf-range-address-type {
          description "Range address";
          leaf name {
            type jt:ipprefix;
            description
              "Lower limit of address range";
          }
    
          uses apply-advanced;
    
          container to {
            description "Port range upper limit";
            uses apply-advanced;
    
            leaf range-high {
              type jt:ipprefix;
              description
                "Upper limit of address range";
            }
          }  // container to
        }  // grouping usf-range-address-type
    
        grouping utm-apppxy-traceoptions {
          description
            "Traceoptions for utm application proxy process";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Tracing parameters for utm application proxy";
            leaf name {
              type enumeration {
                enum "abort" {
                  value 0;
                  description
                    "Trace application-proxy session abort";
                }
                enum "application-objects" {
                  value 1;
                  description
                    "Trace application-proxy objects information";
                }
                enum "utm-realtime" {
                  value 2;
                  description
                    "Trace application-proxy realtime-thread information";
                }
                enum "anti-virus" {
                  value 3;
                  description
                    "Trace anti-virus information";
                }
                enum "basic" {
                  value 4;
                  description
                    "Trace application-proxy basic information";
                }
                enum "buffer" {
                  value 5;
                  description
                    "Trace application-proxy data buffer information";
                }
                enum "detail" {
                  value 6;
                  description
                    "Trace application-proxy detailed information";
                }
                enum "ftp-data" {
                  value 7;
                  description
                    "Trace FTP data connection information";
                }
                enum "ftp-control" {
                  value 8;
                  description
                    "Trace FTP control connection information";
                }
                enum "http" {
                  value 9;
                  description
                    "Trace HTTP protocol information";
                }
                enum "imap" {
                  value 10;
                  description
                    "Trace IMAP protocol information";
                }
                enum "memory" {
                  value 11;
                  description
                    "Trace memory usage";
                }
                enum "parser" {
                  value 12;
                  description
                    "Trace protocol parser";
                }
                enum "pfe" {
                  value 13;
                  description
                    "Trace communication with PFE";
                }
                enum "pop3" {
                  value 14;
                  description
                    "Trace POP3 protocol information";
                }
                enum "queue" {
                  value 15;
                  description
                    "Trace queue information";
                }
                enum "smtp" {
                  value 16;
                  description
                    "Trace SMTP protocol information";
                }
                enum "tcp" {
                  value 17;
                  description
                    "Trace TCP level information";
                }
                enum "timer" {
                  value 18;
                  description
                    "Trace timer processing";
                }
                enum "connection-rating" {
                  value 19;
                  description
                    "Trace connection rating information";
                }
                enum "mime" {
                  value 20;
                  description
                    "Trace MIME parser information";
                }
                enum "regex-engine" {
                  value 21;
                  description
                    "Trace Pattern Match Engine (PME) information";
                }
                enum "sophos-anti-virus" {
                  value 22;
                  description
                    "Trace anti-virus sophos engine information";
                }
                enum "all" {
                  value 23;
                  description
                    "Enable all application-proxy trace options";
                }
              }
              description
                "Tracing parameters for utm application proxy flag name";
            }
          }  // list flag
        }  // grouping utm-apppxy-traceoptions
    
        grouping utm-ipc-traceoptions {
          description "Traceoptions for utm IPC";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Traceoptions for utm IPC flag";
            leaf name {
              type enumeration {
                enum "basic" {
                  value 0;
                  description
                    "Trace basic IPC related information";
                }
                enum "detail" {
                  value 1;
                  description
                    "Trace detail IPC related information";
                }
                enum "connection-manager" {
                  value 2;
                  description
                    "Trace IPC connection manager";
                }
                enum "connection-status" {
                  value 3;
                  description
                    "Trace IPC connection status";
                }
                enum "pfe" {
                  value 4;
                  description
                    "Trace communication with pfe";
                }
                enum "utm-realtime" {
                  value 5;
                  description
                    "Trace IPC realtime-thread information";
                }
                enum "all" {
                  value 6;
                  description
                    "Enable all IPC trace options";
                }
              }
              description
                "Trace options for utm IPC flag name";
            }
          }  // list flag
        }  // grouping utm-ipc-traceoptions
    
        grouping utm-traceoptions {
          description
            "Trace options for utm process";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Tracing UTM information";
            leaf name {
              type enumeration {
                enum "cli" {
                  value 0;
                  description "Trace CLI";
                }
                enum "daemon" {
                  value 1;
                  description
                    "Trace daemon information";
                }
                enum "ipc" {
                  value 2;
                  description
                    "Trace IPC information";
                }
                enum "pfe" {
                  value 3;
                  description
                    "Trace pfe information";
                }
                enum "all" {
                  value 4;
                  description
                    "Enable all utm trace options";
                }
              }
              description "Flag name";
            }
          }  // list flag
        }  // grouping utm-traceoptions
    
        grouping v6-relay-option-interface-id-type {
          description "Interface ID processing";
          uses apply-advanced;
    
          container prefix {
            description
              "Add prefix to circuit/interface-id or remote-id";
            uses apply-advanced;
    
            leaf host-name {
              type empty;
              description
                "Add router host name to circuit / interface-id or remote-id";
            }
    
            leaf logical-system-name {
              type empty;
              description
                "Add logical system name to circuit / interface-id or remote-id";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Add routing instance name to circuit / interface-id or remote-id";
            }
          }  // container prefix
    
          leaf use-interface-description {
            junos:must "(!(".. require-interface-description"))";
            junos:must-message "use-interface-description may not be set with require-interface-desciption";
            type enumeration {
              enum "logical" {
                value 0;
                description
                  "Use the logical interface description";
              }
              enum "device" {
                value 1;
                description
                  "Use the device interface description";
              }
            }
            description
              "Use interface description instead of circuit identifier";
          }
    
          leaf use-vlan-id {
            junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))";
            junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured";
            type empty;
            description
              "Use VLAN id instead of name";
          }
    
          leaf no-vlan-interface-name {
            type empty;
            description
              "Not include vlan or interface name";
          }
    
          leaf include-irb-and-l2 {
            type empty;
            description
              "Include IRB and L2 interface name";
          }
    
          container use-option-82 {
            presence "enable use-option-82";
            description
              "Use option-82 circuit-id for interface-id";
            uses v6-relay-option-cid-rid-action;
          }  // container use-option-82
    
          container keep-incoming-interface-id {
            presence
              "enable keep-incoming-interface-id";
            description
              "Keep incoming interface identifier";
            uses v6-relay-option-cid-rid-action;
          }  // container keep-incoming-interface-id
        }  // grouping v6-relay-option-interface-id-type
    
        grouping v6-relay-option-cid-rid-action {
          uses apply-advanced;
    
          leaf strict {
            type empty;
            description
              "Drop packet if id not present";
          }
        }  // grouping v6-relay-option-cid-rid-action
    
        grouping v6-relay-option-remote-id-type {
          description "Remote ID processing";
          uses apply-advanced;
    
          container prefix {
            description
              "Add prefix to circuit/interface-id or remote-id";
            uses apply-advanced;
    
            leaf host-name {
              type empty;
              description
                "Add router host name to circuit / interface-id or remote-id";
            }
    
            leaf logical-system-name {
              type empty;
              description
                "Add logical system name to circuit / interface-id or remote-id";
            }
    
            leaf routing-instance-name {
              type empty;
              description
                "Add routing instance name to circuit / interface-id or remote-id";
            }
          }  // container prefix
    
          leaf use-interface-description {
            junos:must "(!(".. require-interface-description"))";
            junos:must-message "use-interface-description may not be set with require-interface-desciption";
            type enumeration {
              enum "logical" {
                value 0;
                description
                  "Use the logical interface description";
              }
              enum "device" {
                value 1;
                description
                  "Use the device interface description";
              }
            }
            description
              "Use interface description instead of circuit identifier";
          }
    
          leaf use-vlan-id {
            junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))";
            junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured";
            type empty;
            description
              "Use VLAN id instead of name";
          }
    
          leaf no-vlan-interface-name {
            type empty;
            description
              "Not include vlan or interface name";
          }
    
          leaf include-irb-and-l2 {
            type empty;
            description
              "Include IRB and L2 interface name";
          }
    
          container use-option-82 {
            presence "enable use-option-82";
            description
              "Use option-82 remote-id for v6 remote-id";
            uses v6-relay-option-cid-rid-action;
          }  // container use-option-82
    
          leaf keep-incoming-remote-id {
            type empty;
            description
              "Keep incoming remote identifier";
          }
        }  // grouping v6-relay-option-remote-id-type
    
        grouping v6-server-group-type {
          uses apply-advanced;
    
          list server-group {
            key "name";
            ordered-by user;
            description
              "One or more server groups";
            leaf name {
              type string {
                junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$";
                junos:pattern-message "Must be a non-reserved string of 64 characters or less";
                length "1 .. 64";
              }
              description
                "DHCPv6 Server group name";
            }
    
            uses apply-advanced;
    
            list address {
              key "name";
              max-elements 32;
              ordered-by user;
              description
                "IP Address of one or more DHCP servers";
              leaf name {
                type jt:ipaddr;
                description
                  "IP Address of DHCP server";
              }
    
              uses apply-advanced;
            }  // list address
          }  // list server-group
        }  // grouping v6-server-group-type
    
        grouping vendor-object {
          leaf name {
            type string;
            description
              "Values for vendor field";
          }
    
          uses apply-advanced;
    
          leaf product-name {
            type string;
            description
              "Values for product field";
          }
        }  // grouping vendor-object
    
        grouping vlan-policy {
          description "Virtual LAN";
          leaf name {
            type string;
            description "VLAN id";
          }
    
          uses apply-advanced;
    
          container policy {
            description "Attach policy";
            uses apply-advanced;
    
            leaf policy-name {
              type string;
              description
                "Router Advertisement Guard policy name";
            }
    
            choice policy-type {
              leaf stateful {
                type empty;
                description
                  "Stateful router advertisement guard";
              }
              leaf stateless {
                type empty;
                description
                  "Stateless router advertisement guard";
              }
            }  // choice policy-type
          }  // container policy
        }  // grouping vlan-policy
    
        grouping vlan-types {
          description "Virtual LAN";
          leaf name {
            junos:must "(("vlans ${vlan} vlan-id" || ("vlans ${vlan} vlan-id-list" || "vlans ${vlan} vlan-range")))";
            junos:must-message "Default bridge-domain mode without any vlan-id configuration is not supported.";
            junos:must "(((!("vlans ${vlan} isolated-vlan") && (!("vlans ${vlan} community-vlans") && !("vlans ${vlan} private-vlan"))) || !("vlans ${vlan} forwarding-options filter output")))";
            junos:must-message "Configuring Egress VACL is not supported on PVLAN";
            type string {
              length "2 .. 64";
            }
            description "VLAN name";
          }
    
          uses apply-advanced;
    
          leaf description {
            type string {
              junos:posix-pattern "^.{1,255}$";
              junos:pattern-message "Must be a string of 255 characters or less";
            }
            description
              "Text description of VLANs";
          }
    
          choice vlan-identifier-choice {
            leaf vlan-id {
              type string;
              description
                "IEEE 802.1q VLAN identifier for VLAN";
            }
            leaf-list vlan-id-list {
              junos:must "(!(("routing-instances ${instance} instance-type mac-vrf" && " .. vxlan")))";
              junos:must-message "vxlan can not be specified under vlan-id-list for mac-vrf instance";
              type jt:vlan-range;
              description
                "Create VLAN for each of the vlan-id specified in the vlan-id-list";
            }
            container vlan-tags {
              presence "enable vlan-tags";
              description
                "IEEE 802.1q VLAN tags for VLANs";
              leaf outer {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
    
              leaf inner {
                type string {
                  junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$";
                  junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094";
                }
                description
                  "[tpid.]vlan-id, tpid format is 0xNNNN and is optional";
              }
            }  // container vlan-tags
          }  // choice vlan-identifier-choice
    
          list interface {
            key "name";
            ordered-by user;
            description
              "Interface name for this VLAN";
            leaf name {
              junos:must "(!("interfaces $$-IFL encapsulation ethernet"))";
              junos:must-message "encapsulation ethernet is not allowed on l2 interface";
              junos:must "(!((("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-id-range") && (".. .. .. .. instance-type mac-vrf" && (".. .. .. .. service-type vlan-aware" || ".. .. .. .. service-type vlan-based")))))";
              junos:must-message "Interface with vlan-id-list/vlan-id-range cannot be added to vlan under mac-vrf routing-instance with vlan-based/vlan-aware service-type";
              junos:must "((!("interfaces $$-IFL family") || "interfaces $$-IFL family ethernet-switching"))";
              junos:must-message "only family ethernet-switching can be configured on this interface";
              junos:must "((!(("interfaces $$ vlan-id-list" || "interfaces $$ vlan-tags inner-list")) || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))";
              junos:must-message "interface with vlan-id-list/inner-list cannot be added to a vlan with a vlan-id/vlan-tags configured";
              junos:must "(!(("interfaces $$-IFL family ethernet-switching interface-mode" || "interfaces $$-IFL family ethernet-switching vlan members")))";
              junos:must-message "Interface with 'interface-mode' config is not allowed under vlans";
              junos:must "(!(".. .. .. interfaces $$"))";
              junos:must-message "This interface is already defined at the routing-instance level";
              junos:must "(("interfaces $$-IFL" || !(".. .. .. .. protocols evpn encapsulation")))";
              junos:must-message "Interface not defined; Interface must be defined for configuring under VLAN for protocols evpn";
              junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || ((".. .. vlan-id inner-all" && "interfaces $$-IFL input-vlan-map") || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))))";
              junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured";
              junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))";
              junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled";
              junos:must "(((!("interfaces $$-IFL vlan-id-range") || ".. .. vlan-id all") || (".. .. no-normalization" || ".. .. switch-options no-normalization")))";
              junos:must-message "vlan-id-range is specified for this logical interface; 'vlan-id all' should also be enabled";
              type string;
            }
    
            uses apply-advanced;
          }  // list interface
    
          leaf l3-interface {
            junos:must "(!((".. .. .. protocols evpn mclag" && !(".. no-arp-suppression"))))";
            junos:must-message "no-arp-suppression needs to be configured, when evpn is configured with mclag.";
            junos:must "(!((".. mcae-mac-synchronize" && "interfaces $$-IFL mac")))";
            junos:must-message "irb-ifl mac and vlan mcae-mac-synchronize cannot coexist";
            junos:must "((!("interfaces $$-IFL family mpls") || !(("routing-instances ${instance} instance-type virtual-switch" && ("routing-instances ${instance} protocols vpls" && "routing-instances ${instance} route-distinguisher")))))";
            junos:must-message "routing-interface with family MPLS cannot be added to virtual-switch with protocol VPLS";
            junos:must "((!(".. vlan-tags") || !("interfaces $$-IFL family mpls")))";
            junos:must-message "routing-interface with family MPLS cannot be added to bridge-domain with 'vlan-tags'";
            junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))";
            junos:must-message "routing-interface not valid for vlan-bundle service type";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))";
            junos:must-message "l3-interface cannot be configured under vlans with 'vlan-id all' or 'vlan-id inner-all'";
            junos:must "((".. vlan-id" || ".. vlan-tags"))";
            junos:must-message "l3-interface can be configured only under vlans with 'vlan-id'/'vlan-tags'";
            type union {
              type jt:interface-unit;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description
              "L3 interface name for this vlans";
          }
    
          leaf no-local-switching {
            type empty;
            description
              "Disable local switching within CE-facing interfaces";
          }
    
          container forwarding-options {
            description
              "Forwarding options configuration";
            uses juniper-ethernet-switching-forwarding-options;
          }  // container forwarding-options
    
          container multicast-snooping-options {
            junos:must "(".. .. .. protocols igmp-snooping vlan ${vlan}")";
            junos:must-message "multicast-snooping-options can be configured only if snooping is enabled on the vlan";
            description
              "Multicast snooping option configuration";
            uses juniper-multicast-snooping-options;
          }  // container multicast-snooping-options
    
          container switch-options {
            description
              "VLANs switch-options configuration";
            uses juniper-protocols-vlan;
          }  // container switch-options
    
          leaf domain-type {
            type enumeration {
              enum "bridge" {
                value 0;
                description
                  "Forwarding instance";
              }
            }
            description
              "Type of VLANs SVLAN/DVLAN";
          }
    
          leaf no-irb-layer-2-copy {
            junos:must "(".. l3-interface")";
            junos:must-message "l3-interface must be configured to configure this feature";
            type empty;
            description
              "Disable transmission of layer-2 copy of packets of IRB routing-interface";
          }
    
          leaf service-id {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 65535";
              }
            }
            description
              "Service id required if VLAN is of type MC-AE, and vlan-id all or vlan-id none or vlan-tags is configured";
          }
    
          leaf mcae-mac-synchronize {
            junos:must "(".. l3-interface")";
            junos:must-message "Layer 3 interface for this VLAN is not configured";
            type empty;
            description
              "Enable IRB MAC synchronization in this VLAN";
          }
    
          leaf mcae-mac-flush {
            type empty;
            description
              "Enable IRB MAC flush in a/s mode for this VLAN on MCAE link up";
          }
    
          leaf private-vlan {
            junos:must "(!((".. isolated-vlan" || ".. community-vlans")))";
            junos:must-message "This vlan is already configured as primary vlan";
            junos:must "(!(".. l3-interface"))";
            junos:must-message "l3-interface cannot be configured on a secondary vlan";
            type enumeration {
              enum "isolated" {
                value 0;
                description "Isolated vlan";
              }
              enum "community" {
                value 1;
                description "Community vlan";
              }
            }
            description
              "Type of secondary vlan for private vlan";
          }
    
          leaf isolated-vlan {
            junos:must "(!(".. private-vlan"))";
            junos:must-message "This vlan is already configured as secondary vlan";
            type string;
            description "VLAN id or name";
          }
    
          leaf-list community-vlans {
            junos:must "(!(".. private-vlan"))";
            junos:must-message "This vlan is already configured as secondary vlan";
            type string;
            ordered-by user;
            description
              "List of VLAN id or name";
          }
    
          container vxlan {
            junos:must "((". riot-loopback" || (!(". riot-loopback") && (((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed") && (!((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan")) && !(". multicast-group"))) || ((!((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed")) && ((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan") && !(". multicast-group"))) || (!((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed")) && (!((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan")) && ". multicast-group")))))))";
            junos:must-message "ovsdb, multicast-group, ingress-node-replication cannot be configured together. ingress-node-replication must be configured when remote-vtep-list is configured";
            junos:must "((". ovsdb-managed" || (".. .. .. switch-options ovsdb-managed" || (". multicast-group" || ("routing-instances ${instance} remote-vtep-list" || (".. .. .. switch-options remote-vtep-list" || (". ingress-node-replication" || (".. .. .. protocols evpn encapsulation vxlan" || ". riot-loopback"))))))))";
            junos:must-message "One of multicast-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan or remote-vtep-list or riot-loopback should be enabled";
            junos:must "((!(".. vlan-id all") && !(".. vlan-id all")))";
            junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or 'vlan-id inner-all'";
            junos:must "((". riot-loopback" || (!(". riot-loopback") && ("routing-instances ${instance} vtep-source-interface" || ".. .. .. switch-options vtep-source-interface"))))";
            junos:must-message "vtep-source-interface is required for VXLAN configuration";
            uses apply-advanced;
    
            leaf ovsdb-managed {
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || (".. multicast-group" || ".. .. .. .. protocols evpn encapsulation vxlan")))))";
              junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group or protocol evpn encapsulation vxlan";
              type empty;
              description
                "Bridge-domain is managed remotely via VXLAN OVSDB Controller";
            }
    
            leaf vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16777214";
                }
              }
              description "VXLAN identifier";
            }
    
            leaf translation-vni {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 16777214";
                }
              }
              description
                "Translated VXLAN identifier";
            }
    
            leaf multicast-group {
              junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. switch-options remote-vtep-list" || (".. ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || ".. .. .. .. protocols evpn encapsulation vxlan"))))))";
              junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed or evpn configuration";
              type jt:ipv4addr;
              description
                "Multicast group registered for VXLAN segment";
            }
    
            leaf encapsulate-inner-vlan {
              type empty;
              description
                "Retain inner VLAN in the packet";
            }
    
            leaf decapsulate-accept-inner-vlan {
              type empty;
              description
                "Accept VXLAN packets with inner VLAN";
            }
    
            leaf unreachable-vtep-aging-timer {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint16 {
                  range "300 .. 1800";
                }
              }
              units "seconds";
              description
                "Unreachable VXLAN tunnel endpoint removal timer";
            }
    
            leaf-list static-remote-vtep-list {
              type jt:ipaddr;
              max-elements 1024;
              description
                "Configure vlan specific static remote VXLAN tunnel endpoints";
            }
    
            leaf riot-loopback {
              type empty;
              description
                "Enable loopback on RIOT platform";
            }
          }  // container vxlan
        }  // grouping vlan-types
    
        grouping juniper-ethernet-switching-forwarding-options {
          uses apply-advanced;
    
          container filter {
            description
              "Filtering for ethernet switching forwarding table";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of input filter to apply for forwarded packets";
            }
          }  // container filter
    
          container flood {
            description
              "Filtering for ethernet switching flood table";
            uses apply-advanced;
    
            leaf input {
              type string;
              description
                "Name of input filter to apply for ethernet switching flood packets";
            }
          }  // container flood
    
          container dhcp-relay {
            junos:must "(!("forwarding-options helpers bootp"))";
            junos:must-message "'dhcp-relay' statement cannot be included along with 'forwarding-options helpers bootp' statement";
            status deprecated;
            description
              "Dynamic Host Configuration Protocol relay configuration";
            uses jdhcp-relay-type;
          }  // container dhcp-relay
    
          container dhcp-security {
            presence "enable dhcp-security";
            description
              "DHCP access security configuration";
            uses jdhcp-security-type;
          }  // container dhcp-security
        }  // grouping juniper-ethernet-switching-forwarding-options
    
        grouping juniper-protocols-vlan {
          description
            "VLANs switch-options configuration";
          uses apply-advanced;
    
          container mac-table-size {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC address forwarding table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container mac-table-size
    
          container mac-ip-table-size {
            junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance";
            description
              "Size of MAC+IP bindings table";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings";
            }
          }  // container mac-ip-table-size
    
          container interface-mac-limit {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance";
            description
              "Maximum MAC address learned per interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC addresses per interface";
            }
    
            leaf packet-action {
              type enumeration {
                enum "none" {
                  value 0;
                  description
                    "Forward the packet";
                }
                enum "drop" {
                  value 1;
                  description
                    "Drop packets and do not learn. Default is forward";
                }
                enum "log" {
                  value 2;
                  description
                    "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                }
                enum "shutdown" {
                  value 3;
                  description
                    "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                }
                enum "drop-and-log" {
                  value 4;
                  description
                    "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                }
              }
              description
                "Action when MAC limit is reached";
            }
          }  // container interface-mac-limit
    
          container interface-mac-ip-limit {
            description
              "Maximum number of MAC+IP bindings learned on the interface";
            uses apply-advanced;
    
            leaf limit {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              description
                "Maximum number of MAC+IP bindings per interface";
            }
          }  // container interface-mac-ip-limit
    
          leaf mac-table-aging-time {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32;
            }
            units "seconds";
            description
              "Delay for discarding MAC address if no updates are received";
          }
    
          leaf no-mac-learning {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Disable dynamic MAC address learning";
          }
    
          leaf no-normalization {
            type empty;
            description
              "Disable vlan id normalization for interfaces";
          }
    
          leaf mac-statistics {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance";
            type empty;
            description
              "Enable MAC address statistics";
          }
    
          container static-rvtep-mac {
            description
              "Configure Static MAC and remote VxLAN tunnel endpoint entries";
            uses apply-advanced;
    
            list mac {
              key "mac_addr remote-vtep";
              description "Unicast MAC address";
              leaf mac_addr {
                type jt:mac-unicast;
              }
    
              leaf remote-vtep {
                type jt:ipaddr;
                description
                  "Configure static remote VXLAN tunnel endpoints";
              }
            }  // list mac
          }  // container static-rvtep-mac
    
          list interface {
            junos:must "(!((".. .. .. protocols vpls" && ".. .. ..  instance-type virtual-switch")))";
            junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance";
            key "name";
            ordered-by user;
            description
              "Interface that connect this site to the VPN";
            leaf name {
              junos:must "(((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching vlan")) || "interfaces $$-IFL family ethernet-switching"))";
              junos:must-message "Interface must be part of this routing instance";
              type union {
                type jt:interface-name;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description "Interface name";
            }
    
            uses apply-advanced;
    
            container interface-mac-limit {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              description
                "Maximum number of MAC addresses learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC addresses per interface";
              }
    
              leaf disable {
                type empty;
                description
                  "Disable interface for interface-mac-limit";
              }
    
              leaf packet-action {
                type enumeration {
                  enum "none" {
                    value 0;
                    description
                      "Forward the packet";
                  }
                  enum "drop" {
                    value 1;
                    description
                      "Drop packets and do not learn. Default is forward";
                  }
                  enum "log" {
                    value 2;
                    description
                      "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "shutdown" {
                    value 3;
                    description
                      "Disable the interface and generate an alarm, an SNMP trap or a system log entry";
                  }
                  enum "drop-and-log" {
                    value 4;
                    description
                      "Drop the packet and generate an alarm, an SNMP trap or a system log entry";
                  }
                }
                description
                  "Action when MAC limit is reached";
              }
            }  // container interface-mac-limit
    
            leaf action-priority {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 8";
                }
              }
              description
                "Blocking priority of this interface on mac move detection";
            }
    
            list static-mac {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              key "name";
              ordered-by user;
              description
                "Static MAC addresses assigned to this interface";
              leaf name {
                junos:must "((!(".. .. .. .. vlan-id all") || all ".. vlan-id <*>"))";
                junos:must-message " Specify vlan-id for qualified learning ";
                type jt:mac-addr;
                description "MAC address";
              }
    
              uses apply-advanced;
    
              list vlan-id {
                junos:must "(".. .. .. .. vlan-id all")";
                junos:must-message "'vlan-id all' has to be configured for the bridging domain";
                key "name";
                ordered-by user;
                description
                  "VLAN ID of learning VLAN";
                leaf name {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "0 .. 4094";
                    }
                  }
                  description "Learning VLAN";
                }
    
                uses apply-advanced;
              }  // list vlan-id
            }  // list static-mac
    
            container interface-mac-ip-limit {
              description
                "Maximum number of MAC+IP bindings learned on the interface";
              uses apply-advanced;
    
              leaf limit {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32;
                }
                description
                  "Maximum number of MAC+IP bindings per interface";
              }
            }  // container interface-mac-ip-limit
    
            leaf no-mac-learning {
              junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))";
              junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs";
              type empty;
              description
                "Disable dynamic MAC address learning";
            }
    
            leaf mac-pinning {
              type empty;
              description "Enable MAC pinning";
            }
    
            leaf persistent-learning {
              junos:must "(!("switch-options mac-table-aging-time "))";
              junos:must-message "Persistent learning can not co-exist with mac-table-aging-time";
              type empty;
              description
                "Enable persistent MAC learning on this interface";
            }
          }  // list interface
    
          container traceoptions {
            description
              "Trace options for this bridge domain";
            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 "learning-domain" {
                    value 5;
                    description
                      "Learning domain operations";
                  }
                  enum "ipc" {
                    value 6;
                    description
                      "Inter-process communications operations";
                  }
                  enum "mac-learning" {
                    value 7;
                    description
                      "MAC address learning operations";
                  }
                  enum "initialization" {
                    value 8;
                    description
                      "Initialization operations";
                  }
                  enum "flood-next-hop" {
                    value 9;
                    description
                      "Flood next hop operations";
                  }
                  enum "storm-control" {
                    value 10;
                    description "Storm-control";
                  }
                  enum
                    "unknown-unicast-forwarding" {
                    value 11;
                    description
                      "Trace unknown unicast forwarding events";
                  }
                  enum "all" {
                    value 12;
                    description "All operations";
                  }
                }
              }
            }  // list flag
          }  // container traceoptions
        }  // grouping juniper-protocols-vlan
    
        grouping vlan_map {
          description
            "IEEE 802.1q Virtual LAN (VLAN) Tag mapping";
          uses apply-advanced;
    
          choice operation_choices {
            leaf push {
              type empty;
              description "Push a VLAN tag";
            }
            leaf swap {
              type empty;
              description "Swap a VLAN tag";
            }
            leaf pop {
              type empty;
              description "Pop a VLAN tag";
            }
            leaf push-push {
              type empty;
              description "Push two VLAN tags";
            }
            leaf swap-push {
              type empty;
              description
                "Swap VLAN tag and push a new VLAN tag";
            }
            leaf swap-swap {
              type empty;
              description
                "Swap both outer and inner VLAN tags";
            }
            leaf pop-swap {
              type empty;
              description
                "Pop outer VLAN tag and swap inner VLAN tag";
            }
            leaf pop-pop {
              type empty;
              description
                "Pop both outer and inner VLAN tags";
            }
          }  // choice operation_choices
    
          leaf tag-protocol-id {
            type string {
              junos:posix-pattern "^0x[abcdefABCDEF0123456789]{4}$";
              junos:pattern-message "Must be hexadecimal bit pattern of form 0xNNNN";
            }
            description
              "IEEE 802.1q Tag Protocol Identifier to rewrite";
          }
    
          leaf inner-tag-protocol-id {
            type string;
            description
              "IEEE 802.1q Tag Protocol ID to rewrite for inner tag";
          }
    
          leaf vlan-id {
            type string;
            description "VLAN ID to rewrite";
          }
    
          leaf inner-vlan-id {
            type string;
            description
              "VLAN ID to rewrite for inner tag";
          }
        }  // grouping vlan_map
    
        grouping vni-range-type {
          leaf name {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 16777215";
              }
            }
            description "VNI range Lower limit";
          }
    
          uses apply-advanced;
    
          container to {
            description "VNI range upper limit";
            uses apply-advanced;
    
            leaf range-high {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 16777215";
                }
              }
              description
                "Upper limit of vni range";
            }
          }  // container to
        }  // grouping vni-range-type
    
        grouping vrf-group-type {
          description
            "Configure vrf group object";
          leaf name {
            type string {
              length "1 .. 64";
            }
            description "Vrf group name";
          }
    
          uses apply-advanced;
    
          leaf-list vrf {
            junos:must "("routing-instances $$ vrf-table-label")";
            junos:must-message "referenced routing-instance must configured with vrf-table-label";
            junos:must "("routing-instances $$ instance-type vrf")";
            junos:must-message "referenced routing-instance must be vrf type";
            type string;
            ordered-by user;
            description "L3vpn vrf name";
          }
        }  // grouping vrf-group-type
    
        grouping vrrp-group {
          description
            "Virtual Router Redundancy Protocol group";
          leaf name {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 255";
              }
            }
            description
              "Identifier for VRRP group";
          }
    
          uses apply-advanced;
    
          choice address {
            leaf-list virtual-address {
              type jt:ipv4addr;
              ordered-by user;
              description
                "One or more virtual IPv4 addresses";
            }
            leaf-list virtual-inet6-address {
              type jt:ipv6addr;
              ordered-by user;
              description
                "One or more virtual inet6 addresses";
            }
          }  // choice address
    
          leaf virtual-link-local-address {
            junos:must "(".. .. vrrp-inet6-group")";
            junos:must-message "'virtual-link-local-address' statement can be included only for interfaces of type 'family inet6'";
            type jt:ipv6addr;
            description
              "Virtual link-local addresses";
          }
    
          leaf priority {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "0 .. 255";
              }
            }
            description
              "Virtual router election priority";
          }
    
          leaf preferred {
            type empty;
            description
              "Preferred group on subnet";
          }
    
          choice advertisement_type {
            leaf advertise-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 255";
                }
              }
              units "seconds";
              description
                "Advertisement interval";
            }
            leaf fast-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "10 .. 40950";
                }
              }
              units "milliseconds";
              description
                "Fast advertisement interval";
            }
            leaf inet6-advertise-interval {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "100 .. 40000";
                }
              }
              units "milliseconds";
              description
                "Inet6 advertisement interval";
            }
          }  // choice advertisement_type
    
          choice preempt_type {
            container preempt {
              presence "enable preempt";
              description "Allow preemption";
              uses apply-advanced;
    
              leaf hold-time {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "0 .. 3600";
                  }
                }
                units "seconds";
                description
                  "Preemption hold time";
              }
            }  // container preempt
            leaf no-preempt {
              type empty;
              description
                "Don't allow preemption";
            }
          }  // choice preempt_type
    
          choice accept_type {
            leaf accept-data {
              type empty;
              description
                "Accept packets destined for virtual IP address";
            }
            leaf no-accept-data {
              type empty;
              description
                "Don't accept packets destined for virtual IP address";
            }
          }  // choice accept_type
    
          leaf authentication-type {
            junos:must "(".. .. vrrp-group")";
            junos:must-message "'authentication-type' statement can be included only for interfaces of type 'family inet'";
            type enumeration {
              enum "md5" {
                value 0;
                description "HMAC-MD5-96";
              }
              enum "simple" {
                value 1;
                description "Simple password";
              }
            }
            description "Authentication type";
          }
    
          leaf authentication-key {
            junos:must "(".. .. vrrp-group")";
            junos:must-message "'authentication-key' statement can be included only for interfaces of type 'family inet'";
            type jt:unreadable;
            description "Authentication key";
          }
    
          container track {
            description
              "Interfaces to track for VRRP group";
            uses apply-advanced;
    
            leaf priority-hold-time {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 3600";
                }
              }
              units "seconds";
              description "Priority hold time";
            }
    
            list interface {
              key "name";
              ordered-by user;
              description
                "Interface to track in VRRP group";
              leaf name {
                type union {
                  type jt:interface-unit;
                  type string {
                    pattern "<.*>|$.*";
                  }
                }
                description "Name of interface";
              }
    
              uses apply-advanced;
    
              list bandwidth-threshold {
                key "name";
                description
                  "Track bandwidth of interface";
                leaf name {
                  type string;
                  units "bits per second";
                  description
                    "Interface speed below which priority cost is incurred";
                }
    
                leaf priority-cost {
                  type union {
                    type string {
                      pattern "<.*>|$.*";
                    }
                    type uint32 {
                      range "1 .. 254";
                    }
                  }
                  description
                    "Value subtracted from priority when bandwidth is below threshold";
                }
              }  // list bandwidth-threshold
    
              leaf priority-cost {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 254";
                  }
                }
                description
                  "Value to subtract from priority when interface is down";
              }
            }  // list interface
    
            list route {
              key "route_address routing-instance";
              ordered-by user;
              description
                "Route to track in VRRP group";
              leaf route_address {
                type jt:ipprefix-mandatory;
                description "Route address";
              }
    
              leaf routing-instance {
                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 which route belongs, or 'default'";
              }
    
              leaf priority-cost {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 254";
                  }
                }
                description
                  "Value to subtract from priority when route is down";
              }
            }  // list route
          }  // container track
    
          container vrrp-inherit-from {
            description
              "VRRP group to follow for this VRRP group";
            uses apply-advanced;
    
            leaf active-interface {
              type union {
                type jt:interface-unit;
                type string {
                  pattern "<.*>|$.*";
                }
              }
              description
                "Interface name of VRRP active group";
            }
    
            leaf active-group {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "0 .. 255";
                }
              }
              description
                "Identifier for VRRP active group";
            }
          }  // container vrrp-inherit-from
    
          leaf advertisements-threshold {
            type union {
              type string {
                pattern "<.*>|$.*";
              }
              type uint32 {
                range "1 .. 15";
              }
            }
            description
              "Number of vrrp advertisements missed before declaring master down";
          }
        }  // grouping vrrp-group
    
        grouping vxlan-tunnel-type {
          description "Configure vxlan tunnel";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description "Vxlan tunnel name";
          }
    
          uses apply-advanced;
    
          leaf policy-set {
            junos:must "((".. .. .. .. security policies policy-set $$" || ".. .. .. .. .. security policies policy-set $$"))";
            junos:must-message "Security policy policy-set must be defined";
            type string {
              length "1 .. 63";
            }
            description
              "Define a security policy set";
          }
    
          list vni {
            key "name";
            max-elements 4096;
            ordered-by user;
            description "Define VNI";
            uses vni-list-type;
          }  // list vni
        }  // grouping vxlan-tunnel-type
    
        grouping vni-list-type {
          leaf name {
            type string;
            description "VNI name";
          }
        }  // grouping vni-list-type
    
        grouping web-filtering-fallback-setting {
          description
            "Web-filtering fallback settings";
          uses apply-advanced;
    
          leaf default {
            type enumeration {
              enum "log-and-permit" {
                value 0;
              }
              enum "block" {
                value 1;
              }
            }
            description
              "Fallback default settings";
          }
    
          leaf server-connectivity {
            type enumeration {
              enum "log-and-permit" {
                value 0;
              }
              enum "block" {
                value 1;
              }
            }
            description
              "Fallback action when device cannot connect to server";
          }
    
          leaf timeout {
            type enumeration {
              enum "log-and-permit" {
                value 0;
              }
              enum "block" {
                value 1;
              }
            }
            description
              "Fallback action when connection to server timeout";
          }
    
          leaf too-many-requests {
            type enumeration {
              enum "log-and-permit" {
                value 0;
              }
              enum "block" {
                value 1;
              }
            }
            description
              "Fallback action when requests exceed the limit of engine";
          }
        }  // grouping web-filtering-fallback-setting
    
        grouping web-filtering-traceoptions {
          description
            "Trace options for web-filtering feature";
          uses apply-advanced;
    
          list flag {
            key "name";
            ordered-by user;
            description
              "Trace options for web-filtering feature trace flag";
            leaf name {
              type enumeration {
                enum "basic" {
                  value 0;
                  description
                    "Trace web-filtering module generic basic information";
                }
                enum "session-manager" {
                  value 1;
                  description
                    "Trace session management information";
                }
                enum "heartbeat" {
                  value 2;
                  description
                    "Trace connectivity information with web-filter server";
                }
                enum "packet" {
                  value 3;
                  description
                    "Trace packet information from session management";
                }
                enum "profile" {
                  value 4;
                  description
                    "Trace profile config information";
                }
                enum "requests" {
                  value 5;
                  description
                    "Trace requests sent to web-filter server";
                }
                enum "response" {
                  value 6;
                  description
                    "Trace response received from web-filter server";
                }
                enum "socket" {
                  value 7;
                  description
                    "Trace communication socket with web-filter server";
                }
                enum "timer" {
                  value 8;
                  description
                    "Trace aging information for requests sent to server";
                }
                enum "ipc" {
                  value 9;
                  description
                    "Trace communication events with PFE";
                }
                enum "cache" {
                  value 10;
                  description
                    "Trace category cache operations";
                }
                enum "enhanced" {
                  value 11;
                  description
                    "Trace Juniper enhanced web-filtering operations";
                }
                enum "all" {
                  value 12;
                  description
                    "Enable trace all anti-virus trace options";
                }
              }
              description
                "Trace options for web-filtering feature trace flag name";
            }
          }  // list flag
        }  // grouping web-filtering-traceoptions
    
        grouping webfilter-feature {
          description
            "Web-filtering feature settings";
          uses apply-advanced;
    
          container surf-control-integrated {
            status deprecated;
            description
              "Configure web-filtering surf-control integrated engine";
            uses surf-control-integrated-type;
          }  // container surf-control-integrated
    
          container websense-redirect {
            description
              "Configure web-filtering websense redirect engine";
            uses websense-type;
          }  // container websense-redirect
    
          container juniper-local {
            description
              "Configure web-filtering juniper local engine";
            uses juniper-local-type;
          }  // container juniper-local
    
          container juniper-enhanced {
            description
              "Configure web-filtering juniper enhanced engine";
            uses juniper-enhanced-type;
          }  // container juniper-enhanced
        }  // grouping webfilter-feature
    
        grouping juniper-enhanced-type {
          description "Juniper Enhanced";
          uses apply-advanced;
    
          list profile {
            key "name";
            ordered-by user;
            description
              "Juniper enhanced profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Juniper enhanced profile name";
            }
    
            uses apply-advanced;
    
            leaf base-filter {
              type string;
              description "Juniper base filter";
            }
    
            list category {
              key "name";
              ordered-by user;
              description
                "Juniper enhanced category";
              uses juniper-enhanced-category-type;
            }  // list category
    
            container site-reputation-action {
              presence
                "enable site-reputation-action";
              description
                "Juniper enhanced site reputation action";
              uses juniper-enhanced-site-reputation-setting;
            }  // container site-reputation-action
    
            leaf default {
              type enumeration {
                enum "permit" {
                  value 0;
                  description "Permit action";
                }
                enum "block" {
                  value 1;
                  description "Block action";
                }
                enum "log-and-permit" {
                  value 2;
                  description
                    "Log and permit action";
                }
                enum "quarantine" {
                  value 3;
                  description
                    "Quarantine action";
                }
              }
              description
                "Juniper enhanced profile default";
            }
    
            leaf custom-message {
              junos:must "("security utm custom-objects custom-message $$")";
              junos:must-message "custom-message must be defined";
              type string;
              description "Custom message";
            }
    
            container fallback-settings {
              presence
                "enable fallback-settings";
              description
                "Juniper enhanced fallback settings";
              uses web-filtering-fallback-setting;
            }  // container fallback-settings
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32;
              }
              units "seconds";
              description
                "Juniper enhanced timeout";
            }
    
            leaf no-safe-search {
              type empty;
              description
                "Do not perform safe-search for Juniper enhanced protocol";
            }
          }  // list profile
        }  // grouping juniper-enhanced-type
    
        grouping juniper-local-type {
          description "Juniper local";
          uses apply-advanced;
    
          list profile {
            key "name";
            ordered-by user;
            description "Juniper local profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Juniper local profile name";
            }
    
            uses apply-advanced;
    
            leaf default {
              type enumeration {
                enum "permit" {
                  value 0;
                  description "Permit action";
                }
                enum "block" {
                  value 1;
                  description "Block action";
                }
                enum "log-and-permit" {
                  value 2;
                  description
                    "Log and permit action";
                }
              }
              description
                "Juniper local profile default";
            }
    
            list category {
              key "name";
              ordered-by user;
              description "Custom category";
              uses custom-category-type;
            }  // list category
    
            leaf custom-message {
              junos:must "("security utm custom-objects custom-message $$")";
              junos:must-message "custom-message must be defined";
              type string;
              description "Custom message";
            }
    
            leaf no-safe-search {
              type empty;
              description
                "Do not perform safe-search for Juniper local protocol";
            }
    
            container fallback-settings {
              presence
                "enable fallback-settings";
              description
                "Juniper local fallback settings";
              uses web-filtering-fallback-setting;
            }  // container fallback-settings
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              description
                "Juniper local timeout";
            }
          }  // list profile
        }  // grouping juniper-local-type
    
        grouping surf-control-integrated-type {
          description "Surf control integrated";
          uses apply-advanced;
    
          container cache {
            presence "enable cache";
            uses apply-advanced;
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "minutes";
              default "1440";
              description
                "Surf control integrated cache timeout";
            }
    
            leaf size {
              type string;
              units "kilobytes";
              default "1024";
              description
                "Surf control integrated cache size";
            }
          }  // container cache
    
          container server {
            presence "enable server";
            description "Surf control server";
            uses server;
          }  // container server
    
          list profile {
            key "name";
            ordered-by user;
            description
              "Surf control integrated profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Surf control integrated profile name";
            }
    
            uses apply-advanced;
    
            list category {
              key "name";
              ordered-by user;
              description
                "Surf control integrated category";
              uses surf-control-integrated-category-type;
            }  // list category
    
            leaf default {
              type enumeration {
                enum "permit" {
                  value 0;
                  description "Permit action";
                }
                enum "block" {
                  value 1;
                  description "Block action";
                }
                enum "log-and-permit" {
                  value 2;
                  description
                    "Log and permit action";
                }
              }
              description
                "Surf control integrated profile default";
            }
    
            leaf custom-block-message {
              type string {
                length "1 .. 512";
              }
              description
                "Surf control integrated custom block message";
            }
    
            container fallback-settings {
              presence
                "enable fallback-settings";
              description
                "Surf control integrated fallback settings";
              uses web-filtering-fallback-setting;
            }  // container fallback-settings
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              default "15";
              description
                "Surf control integrated timeout";
            }
          }  // list profile
        }  // grouping surf-control-integrated-type
    
        grouping surf-control-integrated-category-type {
          description
            "Surf control integrated category type";
          leaf name {
            type string {
              length "1 .. 59";
            }
            description
              "Surf control integrated category type name";
          }
    
          uses apply-advanced;
    
          leaf action {
            type enumeration {
              enum "permit" {
                value 0;
                description "Permit action";
              }
              enum "block" {
                value 1;
                description "Block action";
              }
              enum "log-and-permit" {
                value 2;
                description
                  "Log and permit action";
              }
            }
            description
              "Surf control integrated category type action";
          }
        }  // grouping surf-control-integrated-category-type
    
        grouping websense-type {
          description "Websense redirect";
          uses apply-advanced;
    
          list profile {
            key "name";
            ordered-by user;
            description
              "Websense redirect profile";
            leaf name {
              type string {
                length "1 .. 29";
              }
              description
                "Websense redirect profile name";
            }
    
            uses apply-advanced;
    
            container server {
              presence "enable server";
              description
                "Websense redirect server";
              uses server;
            }  // container server
    
            list category {
              key "name";
              ordered-by user;
              description "Custom category";
              uses custom-category-type;
            }  // list category
    
            leaf custom-message {
              junos:must "("security utm custom-objects custom-message $$")";
              junos:must-message "custom-message must be defined";
              type string;
              description "Custom message";
            }
    
            leaf no-safe-search {
              type empty;
              description
                "Do not perform safe-search for websense redirect protocol";
            }
    
            container fallback-settings {
              presence
                "enable fallback-settings";
              description
                "Websense redirect fallback settings";
              uses web-filtering-fallback-setting;
            }  // container fallback-settings
    
            leaf timeout {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 1800";
                }
              }
              units "seconds";
              description
                "Websense redirect timeout";
            }
    
            leaf sockets {
              type union {
                type string {
                  pattern "<.*>|$.*";
                }
                type uint32 {
                  range "1 .. 32";
                }
              }
              description
                "Websense redirect sockets number";
            }
    
            leaf account {
              type string {
                length "1 .. 28";
              }
              description
                "Websense redirect account";
            }
          }  // list profile
        }  // grouping websense-type
    
        grouping wildcard-address-type {
          description
            "Wildcard address and mask";
          leaf name {
            type string {
              length "1 .. 63";
            }
            description
              "Numeric IPv4 wildcard address with in the form of a.d.d.r/netmask";
          }
    
          uses apply-advanced;
        }  // grouping wildcard-address-type
    
        grouping write-option-82-type {
          uses apply-advanced;
        }  // grouping write-option-82-type
    
        grouping zone-interface-list-type {
          description
            "Logical interfaces in this zone";
          leaf name {
            junos:must "(!(("protocols l2-learning global-mode switching" && "interfaces $$ family ethernet-switching")))";
            junos:must-message "Referenced interface must not be ethernet-switching interface of switching mode";
            junos:must "(!((!("protocols l2-learning global-mode transparent-bridge") && "interfaces $$ family ethernet-switching")))";
            junos:must-message "Referenced interface must not be ethernet-switching interface of switching mode";
            type union {
              type jt:interface-name;
              type string {
                pattern "<.*>|$.*";
              }
            }
            description "Logical interface";
          }
    
          uses apply-advanced;
    
          container host-inbound-traffic {
            uses interface_host_inbound_traffic_t;
          }  // container host-inbound-traffic
        }  // grouping zone-interface-list-type
    
        grouping interface_host_inbound_traffic_t {
          uses apply-advanced;
    
          list system-services {
            key "name";
            ordered-by user;
            description
              "Type of incoming system-service traffic to accept";
            uses interface-system-services-object-type;
          }  // list system-services
    
          list protocols {
            key "name";
            ordered-by user;
            description
              "Protocol type of incoming traffic to accept";
            uses host-inbound-protocols-object-type;
          }  // list protocols
        }  // grouping interface_host_inbound_traffic_t
    
        grouping host-inbound-protocols-object-type {
          description
            "Protocol type of incoming traffic to accept";
          leaf name {
            type enumeration {
              enum "all" {
                value 0;
                description "All protocols";
              }
              enum "bfd" {
                value 1;
                description
                  "Bidirectional Forwarding Detection";
              }
              enum "bgp" {
                value 2;
                description
                  "Border Gateway Protocol";
              }
              enum "dvmrp" {
                value 3;
                description
                  "Distance Vector Multicast Routing Protocol";
              }
              enum "igmp" {
                value 4;
                description
                  "Internet Group Management Protocol";
              }
              enum "ldp" {
                value 5;
                description
                  "Label Distribution Protocol";
              }
              enum "msdp" {
                value 6;
                description
                  "Multicast Source Discovery Protocol";
              }
              enum "ndp" {
                value 7;
                description
                  "IPv6 Neighbor Discovery Protocol";
              }
              enum "nhrp" {
                value 8;
                description
                  "Next Hop Resolution Protocol";
              }
              enum "ospf" {
                value 9;
                description
                  "Open Shortest Path First";
              }
              enum "ospf3" {
                value 10;
                description
                  "Open Shortest Path First version 3";
              }
              enum "pgm" {
                value 11;
                description
                  "Pragmatic General Multicast";
              }
              enum "pim" {
                value 12;
                description
                  "Protocol Independent Multicast";
              }
              enum "rip" {
                value 13;
                description
                  "Routing Information Protocol";
              }
              enum "ripng" {
                value 14;
                description
                  "Routing Information Protocol next generation";
              }
              enum "router-discovery" {
                value 15;
                description "Router Discovery";
              }
              enum "rsvp" {
                value 16;
                description
                  "Resource Reservation Protocol";
              }
              enum "sap" {
                value 17;
                description
                  "Session Announcement Protocol";
              }
              enum "vrrp" {
                value 18;
                description
                  "Virtual Router Redundancy Protocol";
              }
            }
            description "Protocol name";
          }
    
          uses apply-advanced;
    
          leaf except {
            junos:must "(".. .. protocols all")";
            junos:must-message "'except'' statement can be included only along with 'protocols all' statement";
            type empty;
            description
              "Protocol type of incoming traffic to disallow";
          }
        }  // grouping host-inbound-protocols-object-type
    
        grouping interface-system-services-object-type {
          description
            "Type of incoming system-service traffic to accept";
          leaf name {
            type enumeration {
              enum "all" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 0;
                description
                  "All system services";
              }
              enum "bootp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 1;
                description
                  "Bootp and dhcp relay-agent service";
              }
              enum "dhcp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 2;
                description
                  "Dynamic Host Configuration Protocol";
              }
              enum "dhcpv6" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 3;
                description
                  "Enable Dynamic Host Configuration Protocol for IPv6";
              }
              enum "dns" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 4;
                description "DNS service";
              }
              enum "finger" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 5;
                description "Finger service";
              }
              enum "ftp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 6;
                description "FTP";
              }
              enum "ident-reset" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 7;
                description
                  "Send back TCP RST to IDENT request for port 113";
              }
              enum "http" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 8;
                description
                  "Web management service using HTTP";
              }
              enum "https" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 9;
                description
                  "Web management service using HTTP secured by SSL";
              }
              enum "ike" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 10;
                description
                  "Internet Key Exchange";
              }
              enum "netconf" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 11;
                description "NETCONF service";
              }
              enum "ping" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 12;
                description
                  "Internet Control Message Protocol echo requests";
              }
              enum "rlogin" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 13;
                description "Rlogin service";
              }
              enum "reverse-telnet" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 14;
                description
                  "Reverse telnet service";
              }
              enum "reverse-ssh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 15;
                description
                  "Reverse SSH service";
              }
              enum "rpm" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 16;
                description
                  "Real-time performance monitoring";
              }
              enum "rsh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 17;
                description "Rsh service";
              }
              enum "snmp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 18;
                description
                  "Simple Network Management Protocol service";
              }
              enum "snmp-trap" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 19;
                description
                  "Simple Network Management Protocol traps";
              }
              enum "ssh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 20;
                description "SSH service";
              }
              enum "telnet" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 21;
                description "Telnet service";
              }
              enum "traceroute" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 22;
                description "Traceroute service";
              }
              enum "xnm-ssl" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 23;
                description
                  "JUNOScript API service over SSL";
              }
              enum "xnm-clear-text" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 24;
                description
                  "JUNOScript API for unencrypted traffic over TCP";
              }
              enum "tftp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 25;
                description "TFTP";
              }
              enum "lsping" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 26;
                description
                  "Label Switched Path ping service";
              }
              enum "ntp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 27;
                description
                  "Network Time Protocol service";
              }
              enum "sip" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 28;
                description
                  "Enable Session Initiation Protocol service";
              }
              enum "r2cp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 29;
                description
                  "Enable Radio-Router Control Protocol service";
              }
              enum "webapi-clear-text" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 30;
                description
                  "Webapi service using http";
              }
              enum "webapi-ssl" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 31;
                description
                  "Webapi service using HTTP secured by SSL";
              }
              enum "tcp-encap" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 32;
                description
                  "Tcp encapsulation service";
              }
              enum "appqoe" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 33;
                description
                  "APPQOE active probe service";
              }
              enum "high-availability" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 34;
                description
                  "High Availability service";
              }
              enum "any-service" {
                value 35;
                description
                  "Enable services on entire port range";
              }
            }
          }
    
          uses apply-advanced;
    
          leaf except {
            junos:must "(".. .. system-services all")";
            junos:must-message "'except'' statement can be included only along with 'system-services all' statement";
            type empty;
            description
              "Type of incoming system-service traffic to disallow";
          }
        }  // grouping interface-system-services-object-type
    
        grouping zone_host_inbound_traffic_t {
          uses apply-advanced;
    
          list system-services {
            key "name";
            ordered-by user;
            description
              "Type of incoming system-service traffic to accept";
            uses zone-system-services-object-type;
          }  // list system-services
    
          list protocols {
            key "name";
            ordered-by user;
            description
              "Protocol type of incoming traffic to accept";
            uses host-inbound-protocols-object-type;
          }  // list protocols
        }  // grouping zone_host_inbound_traffic_t
    
        grouping zone-system-services-object-type {
          description
            "Type of incoming system-service traffic to accept";
          leaf name {
            type enumeration {
              enum "all" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 0;
                description
                  "All system services";
              }
              enum "bootp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 1;
                description
                  "Bootp and dhcp relay-agent service";
              }
              enum "dhcp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 2;
                description
                  "Dynamic Host Configuration Protocol";
              }
              enum "dhcpv6" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 3;
                description
                  "Enable Dynamic Host Configuration Protocol for IPv6";
              }
              enum "dns" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 4;
                description "DNS service";
              }
              enum "finger" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 5;
                description "Finger service";
              }
              enum "ftp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 6;
                description "FTP";
              }
              enum "ident-reset" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 7;
                description
                  "Send back TCP RST to IDENT request for port 113";
              }
              enum "http" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 8;
                description
                  "Web management service using HTTP";
              }
              enum "https" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 9;
                description
                  "Web management service using HTTP secured by SSL";
              }
              enum "ike" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 10;
                description
                  "Internet Key Exchange";
              }
              enum "netconf" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 11;
                description "NETCONF service";
              }
              enum "ping" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 12;
                description
                  "Internet Control Message Protocol echo requests";
              }
              enum "rlogin" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 13;
                description "Rlogin service";
              }
              enum "reverse-telnet" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 14;
                description
                  "Reverse telnet service";
              }
              enum "reverse-ssh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 15;
                description
                  "Reverse SSH service";
              }
              enum "rpm" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 16;
                description
                  "Real-time performance monitoring";
              }
              enum "rsh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 17;
                description "Rsh service";
              }
              enum "snmp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 18;
                description
                  "Simple Network Management Protocol service";
              }
              enum "snmp-trap" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 19;
                description
                  "Simple Network Management Protocol traps";
              }
              enum "ssh" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 20;
                description "SSH service";
              }
              enum "telnet" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 21;
                description "Telnet service";
              }
              enum "traceroute" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 22;
                description "Traceroute service";
              }
              enum "xnm-ssl" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 23;
                description
                  "JUNOScript API service over SSL";
              }
              enum "xnm-clear-text" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 24;
                description
                  "JUNOScript API for unencrypted traffic over TCP";
              }
              enum "tftp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 25;
                description "TFTP";
              }
              enum "lsping" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 26;
                description
                  "Label Switched Path ping service";
              }
              enum "ntp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 27;
                description
                  "Network Time Protocol service";
              }
              enum "sip" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 28;
                description
                  "Enable Session Initiation Protocol service";
              }
              enum "r2cp" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 29;
                description
                  "Enable Radio-Router Control Protocol service";
              }
              enum "webapi-clear-text" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 30;
                description
                  "Webapi service using http";
              }
              enum "webapi-ssl" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 31;
                description
                  "Webapi service using HTTP secured by SSL";
              }
              enum "tcp-encap" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 32;
                description
                  "Tcp encapsulation service";
              }
              enum "appqoe" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 33;
                description
                  "APPQOE active probe service";
              }
              enum "high-availability" {
                junos:must "(!(".. .. system-services $$={any-service}"))";
                junos:must-message "If `any` is set other services are disallowed";
                value 34;
                description
                  "High Availability service";
              }
              enum "any-service" {
                value 35;
                description
                  "Enable services on entire port range";
              }
            }
          }
    
          uses apply-advanced;
    
          leaf except {
            junos:must "(".. .. system-services all")";
            junos:must-message "'except'' statement can be included only along with 'system-services all' statement";
            type empty;
            description
              "Type of incoming system-service traffic to disallow";
          }
        }  // grouping zone-system-services-object-type
      }  // module junos-es-conf-tenants
    

© 2024 YumaWorks, Inc. All rights reserved.