Junos routing-options configuration module
Version: 2019-01-01
module junos-nfx-conf-routing-options { yang-version 1; namespace "http://yang.juniper.net/junos-nfx/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-nfx-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 iso-route { key "name"; ordered-by user; description "ISO family static route"; leaf name { type jt:isoprefix; } uses apply-advanced; choice next_hop { leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } leaf reject { type empty; description "Drop packets to destination; send ICMP unreachables"; } leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf receive { type empty; description "Install a receive route for the destination"; } leaf next-table { type string { junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$"; junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>"; } description "Next hop to another table"; } } // choice next_hop list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf backup-pe-group { junos:must "(".. p2mp-lsp-next-hop")"; junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop"; type string; description "Multicast source redundancy group"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf neighbor { type jt:ipaddr; description "BFD neighbor address"; } leaf local-address { type jt:ipaddr; description "BFD local address (for multihop only)"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } leaf minimum-receive-ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "Minimum receive TTL below which to drop"; } } // container bfd-liveness-detection choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path list lsp-next-hop { key "name"; ordered-by user; description "LSP next hop"; uses lsp_nh_obj; } // list lsp-next-hop list p2mp-lsp-next-hop { key "name"; max-elements 1; ordered-by user; description "Point-to-multipoint LSP next hop"; uses lsp_nh_obj; } // list p2mp-lsp-next-hop container spring-te-lsp-next-hop { junos:must "("protocols source-packet-routing tunnel-tracking")"; junos:must-message "Please enable the tunnel-tracking under 'protocols source-packet-routing' hierarchy"; description "SPRING-TE LSP next hop"; uses springte_lsp_nh_obj; } // container spring-te-lsp-next-hop container p2mp-ldp-next-hop { description "Point-to-multipoint LDP LSP next hop"; uses p2mp_ldp_lsp_nh_obj; } // container p2mp-ldp-next-hop } // list iso-route list route-target-filter { key "name"; ordered-by user; description "Route-target-filter route"; leaf name { type string { junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$"; junos:pattern-message "Use format 'x:y/len' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100 and len is a prefix length from 0 to 64"; length "1 .. 47"; } } uses apply-advanced; leaf-list neighbor { type jt:ipaddr-scoped; ordered-by user; description "BGP peers for filter"; } leaf-list group { type string; ordered-by user; description "BGP groups for filter"; } leaf local { type empty; description "Locally originated filter"; } } // list route-target-filter } // container static list martians { key "address choice-ident choice-value"; ordered-by user; description "Invalid routes"; uses martian_type; } // list martians container aggregate { description "Coalesced routes"; uses rib_aggregate_type; } // container aggregate container generate { description "Route of last resort"; uses rib_aggregate_type; } // container generate choice maximum-paths-type { container maximum-routes { status deprecated; description "Maximum number of routes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of routes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-routes container maximum-paths { description "Maximum number of paths"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of paths"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-paths } // choice maximum-paths-type container maximum-prefixes { description "Maximum number of prefixes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-prefixes container multipath { presence "enable multipath"; description "Protocol-independent load balancing"; uses apply-advanced; container vpn-unequal-cost { presence "enable vpn-unequal-cost"; description "Include VPN routes with unequal IGP metrics"; leaf equal-external-internal { type empty; description "Include external and internal VPN routes"; } } // container vpn-unequal-cost leaf as-path-compare { type empty; description "Compare AS path sequences in addition to AS path length"; } leaf preserve-nexthop-hierarchy { type empty; description "Force multipath to create List nexthop"; } } // container multipath container policy-multipath { description "Policy based multipath"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Import policy to create policy based multipath"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Policy-multipath route tracing."; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container policy-multipath container protect { description "Protocol-independent protection"; leaf core { type empty; description "Protect against unreachability to service-edge router"; } } // container protect container access { description "Access routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access route"; leaf name { type jt:ipprefix; description "IP address of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Metric value"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag2 string"; } } // list route } // container access container access-internal { description "Access-internal routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access-internal route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop } // list route } // container access-internal container bgp-static { description "Routes for BGP static advertisements"; uses apply-advanced; list route { key "name"; ordered-by user; description "BGP-static route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // list route } // container bgp-static container flow { description "Locally defined flow routing information"; uses apply-advanced; container validation { presence "enable validation"; description "Flow route validation options"; uses flow-validation; } // container validation list route { key "name"; ordered-by user; description "Flow route"; uses flow-route-inet6; } // list route list security-group { key "name"; ordered-by user; description "Security groups"; leaf name { type string { length "1 .. 16"; } description "Name of the security group"; } uses apply-advanced; list rule { key "name"; ordered-by user; description "Flow route"; uses flow-rule-inet6; } // list rule } // list security-group 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; leaf table-id { junos:must "(unique ".. .. topology <*> table-id $$")"; junos:must-message "Table-id has to be unique among all topology names"; type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Table-id"; } } // 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"; } list security-group { key "name"; ordered-by user; description "Security groups"; leaf name { type string { length "1 .. 16"; } description "Name of the security group"; } uses apply-advanced; list rule { key "name"; ordered-by user; description "Flow route"; uses flow-rule-inet; } // list rule } // list security-group } // 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 iso-route { key "name"; ordered-by user; description "ISO family static route"; leaf name { type jt:isoprefix; } uses apply-advanced; choice next_hop { leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } leaf reject { type empty; description "Drop packets to destination; send ICMP unreachables"; } leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf receive { type empty; description "Install a receive route for the destination"; } leaf next-table { type string { junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$"; junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>"; } description "Next hop to another table"; } } // choice next_hop list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf backup-pe-group { junos:must "(".. p2mp-lsp-next-hop")"; junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop"; type string; description "Multicast source redundancy group"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf neighbor { type jt:ipaddr; description "BFD neighbor address"; } leaf local-address { type jt:ipaddr; description "BFD local address (for multihop only)"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } leaf minimum-receive-ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "Minimum receive TTL below which to drop"; } } // container bfd-liveness-detection choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path list lsp-next-hop { key "name"; ordered-by user; description "LSP next hop"; uses lsp_nh_obj; } // list lsp-next-hop list p2mp-lsp-next-hop { key "name"; max-elements 1; ordered-by user; description "Point-to-multipoint LSP next hop"; uses lsp_nh_obj; } // list p2mp-lsp-next-hop container spring-te-lsp-next-hop { junos:must "("protocols source-packet-routing tunnel-tracking")"; junos:must-message "Please enable the tunnel-tracking under 'protocols source-packet-routing' hierarchy"; description "SPRING-TE LSP next hop"; uses springte_lsp_nh_obj; } // container spring-te-lsp-next-hop container p2mp-ldp-next-hop { description "Point-to-multipoint LDP LSP next hop"; uses p2mp_ldp_lsp_nh_obj; } // container p2mp-ldp-next-hop } // list iso-route list route-target-filter { key "name"; ordered-by user; description "Route-target-filter route"; leaf name { type string { junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$"; junos:pattern-message "Use format 'x:y/len' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100 and len is a prefix length from 0 to 64"; length "1 .. 47"; } } uses apply-advanced; leaf-list neighbor { type jt:ipaddr-scoped; ordered-by user; description "BGP peers for filter"; } leaf-list group { type string; ordered-by user; description "BGP groups for filter"; } leaf local { type empty; description "Locally originated filter"; } } // list route-target-filter } // container static list martians { key "address choice-ident choice-value"; ordered-by user; description "Invalid routes"; uses martian_type; } // list martians container aggregate { description "Coalesced routes"; uses rib_aggregate_type; } // container aggregate container generate { description "Route of last resort"; uses rib_aggregate_type; } // container generate choice maximum-paths-type { container maximum-routes { status deprecated; description "Maximum number of routes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of routes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-routes container maximum-paths { description "Maximum number of paths"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of paths"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-paths } // choice maximum-paths-type container maximum-prefixes { description "Maximum number of prefixes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-prefixes container multipath { presence "enable multipath"; description "Protocol-independent load balancing"; uses apply-advanced; container vpn-unequal-cost { presence "enable vpn-unequal-cost"; description "Include VPN routes with unequal IGP metrics"; leaf equal-external-internal { type empty; description "Include external and internal VPN routes"; } } // container vpn-unequal-cost leaf as-path-compare { type empty; description "Compare AS path sequences in addition to AS path length"; } leaf preserve-nexthop-hierarchy { type empty; description "Force multipath to create List nexthop"; } } // container multipath container policy-multipath { description "Policy based multipath"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Import policy to create policy based multipath"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Policy-multipath route tracing."; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container policy-multipath container protect { description "Protocol-independent protection"; leaf core { type empty; description "Protect against unreachability to service-edge router"; } } // container protect container access { description "Access routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access route"; leaf name { type jt:ipprefix; description "IP address of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Metric value"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag2 string"; } } // list route } // container access container access-internal { description "Access-internal routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access-internal route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop } // list route } // container access-internal container bgp-static { description "Routes for BGP static advertisements"; uses apply-advanced; list route { key "name"; ordered-by user; description "BGP-static route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // list route } // container bgp-static list rib-groups { key "name"; ordered-by user; description "Group of routing tables"; uses rpd_rib_group_type; } // list rib-groups leaf route-record { type empty; description "Enable route recording"; } container localized-fib { junos:must "(!(".. .. .. .. .. logical-systems"))"; junos:must-message "localized-fib cannot be configured on logical systems"; junos:must "(!("virtual-chassis"))"; junos:must-message "localized-fib cannot be configured on virtual-chassis"; junos:must "(any "chassis fpc <*> vpn-localization")"; junos:must-message "To configure localized-fib, at least one core facing FPC must be configured at 'chassis fpc <*> vpn-localization'"; junos:must "(".. .. instance-type vrf")"; junos:must-message "localized-fib is valid only for instance-type vrf"; presence "enable localized-fib"; description "Localize vrf routing-instance routes to specific FPC hardware"; uses apply-advanced; leaf-list fpc-slot { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Local FPC list"; } } // container localized-fib 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-gre-key { junos:must "(".. dynamic-tunnel-type GRE")"; junos:must-message "Only supported for tunnel type GRE"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "RFC 2890 Dynamic Tunnel GRE Key"; } 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 v4ov6 { type enumeration { enum "ipv6-anycast-source-duplication" { value 0; description "Enable full resolved nh base source-tunnel"; } } description "Enable dynamic tunnel V4oV6 mode"; } leaf gre { type enumeration { enum "next-hop-based-tunnel" { value 0; description "Enable nh base dynamic-tunnel"; } } description "Enable dynamic gre tunnel mode"; } container signal-tunnel-preference { presence "enable signal-tunnel-preference"; description "Set tunnel preference for signalled tunnels"; uses apply-advanced; leaf gre { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Preference of GRE signalled tunnels"; } leaf udp { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Preference of UDP signalled tunnels"; } leaf ipip { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Preference of IPIP signalled tunnels"; } } // container signal-tunnel-preference 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 l3vpn-composite-nexthop { junos:must "(!(".. forwarding-table chained-composite-next-hop ingress l3vpn"))"; junos:must-message "Deprecated/duplicate option configured; use [forwarding-table chained-composite-next-hop ingress l3vpn] only"; presence "enable l3vpn-composite-nexthop"; status deprecated; description "Enable composite nexthop for l3vpn"; uses apply-advanced; } // container l3vpn-composite-nexthop 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-rule-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-rule-qualifier-inet; } // container match container then { description "Actions to take for this flow"; uses flow-rule-op; } // container then } // grouping flow-rule-inet grouping flow-rule-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-rule-qualifier-inet6; } // container match container then { description "Actions to take for this flow"; uses flow-rule-op; } // container then } // grouping flow-rule-inet6 grouping flow-rule-op { uses apply-advanced; 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 } // grouping flow-rule-op grouping flow-rule-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 destination { type jt:ipv4prefix; description "Destination prefix for this traffic flow"; } leaf source { type jt:ipv4prefix; description "Source prefix for this traffic flow"; } } // grouping flow-rule-qualifier-inet grouping flow-rule-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; } 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 } // grouping flow-rule-qualifier-inet6 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 container fib-agent { junos:must "(!("routing-options forwarding-table channel"))"; junos:must-message "Can not be configured together with 'routing-options forwarding-table channel'"; presence "enable fib-agent"; description "Configure fib-agent parameters"; uses apply-advanced; leaf address { type jt:ipaddr; default "127.0.0.1"; description "IP address of the FIB agent"; } leaf port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } default "2620"; description "TCP port of the FIB agent"; } leaf protocol-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } default "22"; description "Protocol ID to be used for programming routes"; } } // container fib-agent list channel { junos:must "(!("routing-options forwarding-table fib-agent"))"; junos:must-message "Can not be configured together with 'routing-options forwarding-table fib-agent'"; key "name"; ordered-by user; description "Configure fib-channel parameters"; leaf name { type string; description "FIB Channel Name"; } uses apply-advanced; container protocol { presence "enable protocol"; description "Configure fib-channel protocol"; uses apply-advanced; leaf protocol-type { junos:must "((unique "routing-options forwarding-table channel <*> protocol protocol-type netlink-fpm" || unique "routing-options forwarding-table channel <*> protocol protocol-type gRPC"))"; junos:must-message "protocol-type is already configured for a different channel"; type enumeration { enum "netlink-fpm" { value 0; description "Configure SONiC FIB Channel"; } enum "gRPC" { value 1; description "Configure vRouter FIB channel."; } } } leaf destination { type string; description "Destination of the FIB"; } leaf source-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } default "22"; description "Source ID to be used for programming routes"; } } // container protocol leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } } // list channel } // 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-nfx-conf-routing-options
© 2023 YumaWorks, Inc. All rights reserved.