junos-qfx-conf-routing-options

Junos routing-options configuration module

  • Version: 2019-01-01

    junos-qfx-conf-routing-options@2019-01-01


    
      module junos-qfx-conf-routing-options {
    
        yang-version 1;
    
        namespace
          "http://yang.juniper.net/junos-qfx/conf/routing-options";
    
        prefix jc-routing-options;
    
        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-qfx-conf-root {
          prefix jc;
          revision-date "2019-01-01";
        }
    
        organization "Juniper Networks, Inc.";
    
        contact "yang-support@juniper.net";
    
        description
          "Junos routing-options configuration module";
    
        revision "2019-01-01" {
          description "Junos: 21.3R1.9";
        }
    
    
        augment /jc:configuration {
          uses routing-options-group;
        }
    
        augment /jc:configuration/jc:groups {
          uses routing-options-group;
        }
    
        grouping routing-options-group {
          container routing-options {
            description
              "Protocol-independent routing option configuration";
            uses juniper-routing-options;
          }  // container routing-options
        }  // grouping routing-options-group
    
        grouping juniper-routing-options {
          uses apply-advanced;
    
          container rpm-tracking {
            description
              "RPM static route tracking options";
            uses apply-advanced;
    
            list route {
              key "name";
              ordered-by user;
              description "Static Route";
              leaf name {
                type jt:ipprefix;
                description
                  "IP address of destination";
              }
    
              uses apply-advanced;
    
              list next-hop {
                key "name";
                ordered-by user;
                description
                  "Next hop to destination";
                uses rpm-next-hop;
              }  // list next-hop
    
              leaf metric {
                type union {
                  type string {
                    pattern "<.*>|$.*";
                  }
                  type uint32 {
                    range "1 .. 16";
                  }
                }
                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 value";
              }
    
              list rpm-probe {
                key "name";
                ordered-by user;
                leaf name {
                  junos:must "("services rpm probe $$")";
                  junos:must-message "Referenced RPM probe must be defined under 'services rpm probe'";
                  type string;
                  description
                    "RPM probe to track";
                }
    
                leaf rpm-test {
                  junos:must "("services rpm probe ${rpm-probe} test $$")";
                  junos:must-message "Referenced RPM test must be defined under 'services rpm probe <probe> test '";
                  type string;
                  description
                    "RPM test to track";
                }
              }  // list rpm-probe
            }  // list route
          }  // container rpm-tracking
    
          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 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 inline-processing-enable {
              type empty;
              description
                "Enable PPM session inline distribution";
            }
    
            leaf inline-ae-processing-enable {
              type empty;
              status deprecated;
              description
                "Enable PPM session inline distribution on AE";
            }
    
            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 enable-sensors {
            type empty;
            description
              "Enable Sensor for MX/PTX/QFX/EX/ACX";
          }
    
          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 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";
            junos:must "("system commit synchronize")";
            junos:must-message "Synchronized commits must be configured with warm-standby";
            junos:must "("chassis redundancy graceful-switchover")";
            junos:must-message "Graceful switchover needs to be configured";
            type empty;
            description "Enable warm-standby";
          }
    
          leaf nonstop-routing {
            junos:must "("system commit synchronize")";
            junos:must-message "Synchronized commits must be configured with nonstop-routing";
            junos:must "("chassis redundancy graceful-switchover")";
            junos:must-message "Graceful switchover needs to be configured";
            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
    
          leaf lsp-telemetry {
            type empty;
            description
              "Turn on Jvision LSP telemetry";
          }
    
          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
    
            container stream-protection {
              presence
                "enable stream-protection";
              description
                "Multicast only Fast Re-Route";
              uses apply-advanced;
    
              leaf mofrr-primary-path-selection-by-routing {
                type empty;
                description
                  "Multicast only Fast Re-Route primary path by Routing";
              }
    
              leaf mofrr-disjoint-upstream-only {
                type empty;
                description
                  "Multicast only Fast Re-Route disjoint upstream only";
              }
    
              leaf mofrr-no-backup-join {
                type empty;
                description
                  "Multicast only Fast Re-Route no backup join";
              }
    
              leaf mofrr-asm-starg {
                type empty;
                description
                  "Multicast only Fast Re-Route asm (*,G)";
              }
    
              leaf-list policy {
                type jt:policy-algebra;
                ordered-by user;
                description "MoFRR Policy";
              }
            }  // container stream-protection
    
            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 admin_group_include_exclude {
          uses apply-advanced;
    
          choice include-any-choice {
            leaf-list include-any {
              type string;
              ordered-by user;
              description
                "Groups, one or more of which must be present";
            }
          }  // choice include-any-choice
    
          choice include-all-choice {
            leaf-list include-all {
              type string;
              ordered-by user;
              description
                "Groups, all of which must be present";
            }
          }  // choice include-all-choice
    
          choice exclude-choice {
            leaf-list exclude {
              type string;
              ordered-by user;
              description
                "Groups, all of which must be absent";
            }
          }  // choice exclude-choice
        }  // grouping admin_group_include_exclude
    
        grouping apply-advanced {
          description
            "Apply advanced configuration logic";
          leaf-list apply-groups {
            type string;
            ordered-by user;
            description
              "Groups from which to inherit configuration data";
          }
    
          leaf-list apply-groups-except {
            type string;
            ordered-by user;
            description
              "Don't inherit configuration data from these groups";
          }
    
          list apply-macro {
            key "name";
            ordered-by user;
            description
              "Macro and parameters for commit script expansion";
            uses apply-macro-type;
          }  // list apply-macro
        }  // grouping apply-advanced
    
        grouping apply-macro-type {
          description
            "Macro data for commit-script expansion";
          leaf name {
            type string;
            description
              "Name of the macro to be expanded";
          }
    
          list data {
            key "name";
            uses macro-data-type;
          }  // list data
        }  // grouping apply-macro-type
    
        grouping 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";
            }
            leaf udp {
              junos:must "((".. source-address" && ".. destination-networks"))";
              junos:must-message "Source address and Destination Networks must be configured for tunnel type UDP";
              type empty;
              description
                "UDP encapsulation type for IPv4";
            }
            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";
            }
            leaf ipip {
              junos:must "((".. source-address" && ".. destination-networks"))";
              junos:must-message "Source address and Destination Networks must be configured for tunnel type IPIP";
              type empty;
              description
                "IPIP encapsulation type for IPv4";
            }
          }  // 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 ecmp-fast-reroute-choice {
            leaf ecmp-fast-reroute {
              type empty;
              description
                "Enable fast reroute for ECMP next hops";
            }
            leaf no-ecmp-fast-reroute {
              type empty;
              description
                "Don't enable fast reroute for ECMP next hops";
            }
          }  // choice ecmp-fast-reroute-choice
    
          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
    
          list source-class {
            key "name";
            ordered-by user;
            description "Source class filters";
            uses source-class-filters;
          }  // list source-class
    
          list destination-class {
            key "name";
            ordered-by user;
            description
              "Destination class filters";
            uses destination-class-filters;
          }  // list destination-class
    
          leaf transit-lsp-statistics-from-route {
            type empty;
            description
              "Enable LSP statistics collection from the route";
          }
    
          container chained-composite-next-hop {
            description "Next-hop chaining mode";
            uses apply-advanced;
    
            container ingress {
              description
                "Ingress LSP nexthop settings";
              uses apply-advanced;
    
              choice l2vpn-choice {
                leaf l2vpn {
                  type empty;
                  description
                    "Create composite-chained nexthops for ingress l2vpn LSPs";
                }
                leaf no-l2vpn {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for ingress l2vpn LSPs";
                }
              }  // choice l2vpn-choice
    
              choice l2ckt-choice {
                leaf l2ckt {
                  type empty;
                  description
                    "Create composite-chained nexthops for ingress l2ckt LSPs";
                }
                leaf no-l2ckt {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for ingress l2ckt LSPs";
                }
              }  // choice l2ckt-choice
    
              choice fec129-vpws-choice {
                leaf fec129-vpws {
                  type empty;
                  description
                    "Create composite-chained nexthops for ingress fec129-vpws LSPs";
                }
                leaf no-fec129-vpws {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for ingress fec129-vpws LSPs";
                }
              }  // choice fec129-vpws-choice
    
              choice evpn-choice {
                leaf evpn {
                  type empty;
                  description
                    "Create composite-chained nexthops for ingress EVPN LSPs";
                }
                leaf no-evpn {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for ingress EVPN LSPs";
                }
              }  // choice evpn-choice
    
              container labeled-bgp {
                description
                  "Create composite-chained nexthops for ingress labeled-bgp LSPs";
                uses apply-advanced;
    
                choice inet-choice {
                  leaf inet {
                    type empty;
                    description
                      "Enable inet labeled-bgp composite nexthop creation";
                  }
                  leaf no-inet {
                    type empty;
                    description
                      "Don't enable inet labeled-bgp composite nexthop creation";
                  }
                }  // choice inet-choice
    
                choice inet6-choice {
                  leaf inet6 {
                    type empty;
                    description
                      "Enable inet6 labeled-bgp composite nexthop creation";
                  }
                  leaf no-inet6 {
                    type empty;
                    description
                      "Don't enable inet6 labeled-bgp composite nexthop creation";
                  }
                }  // choice inet6-choice
              }  // container labeled-bgp
    
              container l3vpn {
                junos:must "(!(".. .. .. .. l3vpn-composite-nexthop"))";
                junos:must-message "Equivalent options; only one may be configured; this way is preferred";
                presence "enable l3vpn";
                description
                  "Create composite-chained nexthops for ingress l3vpn LSPs";
                leaf extended-space {
                  junos:must "("chassis network-services enhanced-ip")";
                  junos:must-message "Network services mode must be Enhanced IP for extended space l3vpn";
                  type empty;
                  description
                    "Allocate in extended-space for scalability";
                }
              }  // container l3vpn
    
              choice ldp-choice {
                leaf ldp {
                  type empty;
                  description
                    "Create chained-composite nexthops to support segmentation LDP tunnels";
                }
                leaf no-ldp {
                  type empty;
                  description
                    "Don't create chained-composite nexthops to support segmentation LDP tunnels";
                }
              }  // choice ldp-choice
            }  // container ingress
    
            container transit {
              description
                "Transit LSP nexthops settings";
              uses apply-advanced;
    
              choice l2vpn-choice {
                leaf l2vpn {
                  type empty;
                  description
                    "Create composite-chained nexthops for transit l2vpn LSPs";
                }
                leaf no-l2vpn {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for transit l2vpn LSPs";
                }
              }  // choice l2vpn-choice
    
              choice l3vpn-choice {
                leaf l3vpn {
                  type empty;
                  description
                    "Create composite-chained nexthops for transit l3vpn LSPs";
                }
                leaf no-l3vpn {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for transit l3vpn LSPs";
                }
              }  // choice l3vpn-choice
    
              choice labeled-bgp-choice {
                leaf labeled-bgp {
                  type empty;
                  description
                    "Create composite-chained nexthops for transit labeled BGP routes";
                }
                leaf no-labeled-bgp {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for transit labeled BGP routes";
                }
              }  // choice labeled-bgp-choice
    
              choice static-choice {
                leaf static {
                  type empty;
                  description
                    "Create composite-chained nexthops for static LSPs";
                }
                leaf no-static {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for static LSPs";
                }
              }  // choice static-choice
    
              choice rsvp-choice {
                leaf rsvp {
                  type empty;
                  description
                    "Create composite-chained nexthops for RSVP LSPs";
                }
                leaf no-rsvp {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for RSVP LSPs";
                }
              }  // choice rsvp-choice
    
              choice rsvp-p2mp-choice {
                leaf rsvp-p2mp {
                  junos:must "(!("chassis network-services enhanced-ip"))";
                  junos:must-message "Transit rsvp-p2mp is not supported with enhanced-ip mode on MX platform";
                  type empty;
                  description
                    "Create composite-chained nexthops for RSVP p2mp LSPs";
                }
                leaf no-rsvp-p2mp {
                  junos:must "(!("chassis network-services enhanced-ip"))";
                  junos:must-message "Transit rsvp-p2mp is not supported with enhanced-ip mode on MX platform";
                  type empty;
                  description
                    "Don't create composite-chained nexthops for RSVP p2mp LSPs";
                }
              }  // choice rsvp-p2mp-choice
    
              choice express-segments-choice {
                leaf express-segments {
                  type empty;
                  description
                    "Create composite-chained nexthops for Express Segments";
                }
                leaf no-express-segments {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for Express Segments";
                }
              }  // choice express-segments-choice
    
              choice ldp-choice {
                leaf ldp {
                  type empty;
                  description
                    "Create composite-chained nexthops for LDP LSPs";
                }
                leaf no-ldp {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for LDP LSPs";
                }
              }  // choice ldp-choice
    
              choice ldp-p2mp-choice {
                leaf ldp-p2mp {
                  junos:must "(!("chassis network-services enhanced-ip"))";
                  junos:must-message "Transit ldp-p2mp is not supported with enhanced-ip mode on MX platform";
                  type empty;
                  description
                    "Create composite-chained nexthops for LDP P2MP LSPs";
                }
                leaf no-ldp-p2mp {
                  junos:must "(!("chassis network-services enhanced-ip"))";
                  junos:must-message "Transit ldp-p2mp is not supported with enhanced-ip mode on MX platform";
                  type empty;
                  description
                    "Don't create composite-chained nexthops for LDP P2MP LSPs";
                }
              }  // choice ldp-p2mp-choice
    
              choice labeled-isis-choice {
                leaf labeled-isis {
                  type empty;
                  description
                    "Create composite-chained nexthops for labeled ISIS routes";
                }
                leaf no-labeled-isis {
                  type empty;
                  description
                    "Don't create composite-chained nexthops for labeled ISIS routes";
                }
              }  // choice labeled-isis-choice
            }  // container transit
          }  // container chained-composite-next-hop
    
          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 destination-class-filters {
          leaf name {
            junos:must "((any "policy-options policy-statement <*> then destination-class $$" || (any "policy-options policy-statement <*> term <*> then destination-class $$" || (any "policy-options policy-statement <*> from route-filter <*> <*> destination-class $$" || (any "policy-options policy-statement <*> term <*> from route-filter <*> <*> destination-class $$" || (any "policy-options policy-statement <*> then forwarding-class $$" || (any "policy-options policy-statement <*> term <*> then forwarding-class $$" || (any "policy-options policy-statement <*> from route-filter <*> <*> forwarding-class $$" || (any "logical-systems <*> policy-options policy-statement <*> then destination-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> then destination-class $$" || (any "logical-systems <*> policy-options policy-statement <*> from route-filter <*> <*> destination-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> from route-filter <*> <*> destination-class $$" || (any "logical-systems <*> policy-options policy-statement <*> then forwarding-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> then forwarding-class $$" || any "logical-systems <*> policy-options policy-statement <*> from route-filter <*> <*> forwarding-class $$"))))))))))))))";
            junos:must-message "referenced destination-class must be defined";
            type string;
            description "Destination class name";
          }
    
          uses apply-advanced;
    
          container family {
            description "Protocol family";
            container inet {
              description
                "Protocol family IPv4 for firewall filter";
              uses apply-advanced;
    
              container filter {
                description "Packet filtering";
                uses apply-advanced;
    
                leaf filter-name {
                  type string;
                  description "Inet Filter name";
                }
              }  // container filter
            }  // container inet
    
            container inet6 {
              description
                "Protocol family IPv6 for firewall filter";
              uses apply-advanced;
    
              container filter {
                description "Packet filtering";
                uses apply-advanced;
    
                leaf filter-name {
                  type string;
                  description
                    "Inet6 Filter name";
                }
              }  // container filter
            }  // container inet6
          }  // container family
        }  // grouping destination-class-filters
    
        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 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 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 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 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 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 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_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 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 rpm-next-hop {
          leaf name {
            type jt:ipaddr;
            description
              "Next hop to destination";
          }
    
          uses apply-advanced;
    
          list rpm-probe {
            key "name";
            ordered-by user;
            leaf name {
              junos:must "("services rpm probe $$")";
              junos:must-message "Referenced RPM probe must be defined under 'services rpm probe'";
              type string;
              description "RPM probe to track";
            }
    
            leaf rpm-test {
              junos:must "("services rpm probe ${rpm-probe} test $$")";
              junos:must-message "Referenced RPM test must be defined under 'services rpm probe <probe> test '";
              type string;
              description "RPM test to track";
            }
          }  // list rpm-probe
        }  // grouping rpm-next-hop
    
        grouping source-class-filters {
          leaf name {
            junos:must "((any "policy-options policy-statement <*> then source-class $$" || (any "policy-options policy-statement <*> term <*> then source-class $$" || (any "policy-options policy-statement <*> from route-filter <*> <*> source-class $$" || (any "policy-options policy-statement <*> term <*> from route-filter <*> <*> source-class $$" || (any "policy-options policy-statement <*> then forwarding-class $$" || (any "policy-options policy-statement <*> term <*> then forwarding-class $$" || (any "policy-options policy-statement <*> from route-filter <*> <*> forwarding-class $$" || (any "logical-systems <*> policy-options policy-statement <*> then source-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> then source-class $$" || (any "logical-systems <*> policy-options policy-statement <*> from route-filter <*> <*> source-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> from route-filter <*> <*> source-class $$" || (any "logical-systems <*> policy-options policy-statement <*> then forwarding-class $$" || (any "logical-systems <*> policy-options policy-statement <*> term <*> then forwarding-class $$" || any "logical-systems <*> policy-options policy-statement <*> from route-filter <*> <*> forwarding-class $$"))))))))))))))";
            junos:must-message "referenced source-class must be defined";
            type string;
            description "Source class name";
          }
    
          uses apply-advanced;
    
          container family {
            description "Protocol family";
            container inet {
              description
                "Protocol family IPv4 for firewall filter";
              uses apply-advanced;
    
              container filter {
                description "Packet filtering";
                uses apply-advanced;
    
                leaf filter-name {
                  type string;
                  description "Inet Filter name";
                }
              }  // container filter
            }  // container inet
    
            container inet6 {
              description
                "Protocol family IPv6 for firewall filter";
              uses apply-advanced;
    
              container filter {
                description "Packet filtering";
                uses apply-advanced;
    
                leaf filter-name {
                  type string;
                  description
                    "Inet6 Filter name";
                }
              }  // container filter
            }  // container inet6
          }  // container family
        }  // grouping source-class-filters
    
        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
      }  // module junos-qfx-conf-routing-options
    

© 2023 YumaWorks, Inc. All rights reserved.