Junos policy-options configuration module
Version: 2019-01-01
module junos-conf-policy-options { yang-version 1; namespace "http://yang.juniper.net/junos/conf/policy-options"; prefix jc-policy-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-conf-root { prefix jc; revision-date "2019-01-01"; } organization "Juniper Networks, Inc."; contact "yang-support@juniper.net"; description "Junos policy-options configuration module"; revision "2019-01-01" { description "Junos: 21.3R1.9"; } augment /jc:configuration { uses policy-options-group; } augment /jc:configuration/jc:groups { uses policy-options-group; } grouping policy-options-group { container policy-options { description "Policy option configuration"; uses juniper-policy-options; } // container policy-options } // grouping policy-options-group grouping juniper-policy-options { description "Define a redundancy policy"; uses apply-advanced; container satellite-policies { description "Satellite Policy configuration"; uses satellite-policy-options; } // container satellite-policies list prefix-list { key "name"; ordered-by user; description "Define a named set of address prefixes"; leaf name { type string; description "Prefix list name"; } uses apply-advanced; list prefix-list-item { key "name"; uses prefix_list_items; } // list prefix-list-item leaf apply-path { type string; description "Apply IP prefixes from a configuration statement"; } } // list prefix-list list mac-list { key "name"; ordered-by user; description "Define a named set of mac addresses"; leaf name { type string; description "MAc Address list name"; } uses apply-advanced; list mac-addr-list-item { key "name"; uses mac_addr_list_items; } // list mac-addr-list-item } // list mac-list list vsi-policy { key "name"; ordered-by user; description "Define a named set of VSI policies"; leaf name { type string; description "VSI policy name"; } uses apply-advanced; container from { description "Conditions to match the VSI policy"; uses apply-advanced; list vsi-manager { key "vsi-manager-id vsi-type vsi-version vsi-instance"; ordered-by user; description "VSI manager"; leaf vsi-manager-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "VSI manager ID"; } leaf vsi-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777216"; } } description "VSI type"; } leaf vsi-version { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "VSI version"; } leaf vsi-instance { type string; description "VSI instance"; } uses apply-advanced; } // list vsi-manager } // container from container then { description "Actions to take if 'from' conditions match"; uses apply-advanced; leaf filter { junos:must "("firewall family ethernet-switching filter $$")"; junos:must-message "filter should be defined under 'firewall family ethernet-switching filter'"; type string; description "Filter name"; } } // container then } // list vsi-policy leaf skip-then-actions { type empty; description "Skip 'then' actions and allow route actions in 'from'"; } list route-filter-list { key "name"; ordered-by user; description "Define a named set of route-filter address prefixes"; leaf name { type string; description "Route filter list name"; } uses apply-advanced; list rf_list { key "address choice-ident choice-value"; ordered-by user; uses route_filter_list_items; } // list rf_list } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "Define a named set of source address filter address prefixes"; leaf name { type string; description "Source address filter list name"; } uses apply-advanced; list saf_list { key "address choice-ident choice-value"; ordered-by user; uses source_address_filter_list_items; } // list saf_list } // list source-address-filter-list list policy-statement { key "name"; description "Routing policy"; leaf name { type string; description "Name to identify a policy filter"; } uses apply-advanced; container defaults { description "Policy default behaviour"; uses apply-advanced; container route-filter { description "Set route filter behaviour"; choice scope-choice { leaf no-walkup { type empty; description "Route filter walk up disable"; } leaf walkup { type empty; description "Route filter walk up enable"; } } // choice scope-choice } // container route-filter } // container defaults list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string; } uses apply-advanced; container from { description "Conditions to match the source of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } 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"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path list route-filter { key "address choice-ident choice-value"; ordered-by user; description "List of routes to match"; uses control_route_filter_type; } // list route-filter list source-address-filter { key "address choice-ident choice-value"; ordered-by user; description "List of source addresses to match"; uses control_source_address_filter_type; } // list source-address-filter list prefix-list { key "name"; ordered-by user; description "List of prefix-lists of routes to match"; uses control_prefix_list_type; } // list prefix-list list as-path-neighbors { key "list-type list-name"; ordered-by user; description "List of peer AS to match"; uses control_as_list_type; } // list as-path-neighbors list as-path-origins { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-origins list as-path-transits { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-transits list prefix-list-filter { key "list_name choice-ident choice-value"; ordered-by user; description "List of prefix-list-filters to match"; uses control_prefix_list_filter_type; } // list prefix-list-filter list rtf-prefix-list { key "name"; ordered-by user; description "List of rtf-prefix-lists of routes to match"; uses control_rtf_prefix_list_type; } // list rtf-prefix-list list route-filter-list { key "name"; ordered-by user; description "List of route-filter-lists of routes to match"; uses control_route_filter_list_type; } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "List of source-address-filter-lists of routes to match"; uses control_source_address_filter_list_type; } // list source-address-filter-list container multicast-scope { description "Multicast scope to match"; choice scope-choice { leaf node-local { type empty; description "Node-local scope"; } leaf link-local { type empty; description "Link-local scope"; } leaf site-local { type empty; description "Site-local scope"; } leaf organization-local { type empty; description "Organization-local scope"; } leaf global { type empty; description "Global scope"; } leaf scope_value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15"; } } description "Scope value"; } } // choice scope-choice choice scope-operator { leaf orhigher { type empty; description "Match higher values"; } leaf orlower { type empty; description "Match lower values"; } } // choice scope-operator } // container multicast-scope leaf aggregate-contributor { type empty; description "Match more specifics of an aggregate"; } leaf state { type enumeration { enum "active" { value 0; description "Active route"; } enum "inactive" { value 1; description "Inactive route"; } } description "Route state"; } leaf-list tunnel-type { type enumeration { enum "gre" { value 0; description "GRE tunnel"; } enum "udp" { value 1; description "UDP tunnel"; } enum "ipip" { value 2; description "IPIP tunnel"; } } ordered-by user; description "Tunnel type"; } leaf route-type { type enumeration { enum "internal" { value 0; description "Internal route"; } enum "external" { value 1; description "External route"; } } description "Route type"; } leaf-list nlri-route-type { junos:must "((".. family evpn" || (".. family inet-mvpn" || ".. family inet6-mvpn")))"; junos:must-message "nlri-route-type is only valid with a family qualifier such as evpn, inet-mvpn, inet6-mvpn, or other family that supports a route type"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } ordered-by user; description "Route type from NLRI"; } leaf-list evpn-tag { junos:must "(".. family evpn")"; junos:must-message "evpn-tag is only valid with a family qualifier evpn"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } ordered-by user; description "Tag in EVPN Route"; } leaf-list evpn-esi { junos:must "(".. family evpn")"; junos:must-message "evpn-esi is only valid with a family qualifier evpn"; type string; ordered-by user; description "ESI in EVPN Route"; } list mac-filter-list { junos:must "(".. family evpn")"; junos:must-message "mac-filter is only valid with a family qualifier evpn"; key "name"; ordered-by user; description "List of mac-filter-list macs to match"; uses control_mac_address_filter_list_type; } // list mac-filter-list leaf evpn-mac-route { junos:must "(".. family evpn")"; junos:must-message "evpn-mac-route is only valid with a family qualifier evpn"; type enumeration { enum "mac-only" { value 0; description "MAC route"; } enum "mac-ipv4" { value 1; description "MAC IPV4 route"; } enum "mac-ipv6" { value 2; description "MAC IPV6 route"; } } description "EVPN Mac Route type"; } leaf next-hop-type { type enumeration { enum "merged" { value 0; description "Merged next hop"; } } description "Next-hop type"; } leaf-list condition { type string; ordered-by user; description "Condition to match on"; } list community-count { key "name"; ordered-by user; description "Number of BGP communities"; uses community_count_type; } // list community-count list as-path-unique-count { key "name"; ordered-by user; description "Number of unique BGP ASes excluding confederations"; uses as-path-unique-count-type; } // list as-path-unique-count list as-path-calc-length { key "name"; ordered-by user; description "Number of BGP ASes excluding confederations"; uses as-path-calc-length-type; } // list as-path-calc-length container traffic-engineering { junos:must "(!(".. family"))"; junos:must-message "traffic-engineering family implied"; presence "enable traffic-engineering"; description "Traffic-Engineering related parameters"; uses apply-advanced; leaf-list protocol { type enumeration { enum "direct" { value 0; description "Directly originated"; } enum "ospf" { value 1; description "OSPF originated"; } enum "isis-level-1" { value 2; description "ISIS level-1 originated"; } enum "isis-level-2" { value 3; description "ISIS level-2 originated"; } enum "static" { value 4; description "Statically originated"; } enum "unknown" { value 5; description "Originated by unknown sources"; } } ordered-by user; description "Protocol that originated the entry"; } container node { junos:must "(!((".. link" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable node"; description "Node-related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Real or pseudo-node"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container node container ipv4-prefix { junos:must "(!((".. link" || ".. node")))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable ipv4-prefix"; description "IPV4 prefix-related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf prefix { type jt:ipprefix; description "IP prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv4-prefix container ipv6-prefix { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. srv6-sid")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable ipv6-prefix"; description "IPV6 prefix related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IPv6 prefix to match the router-id against"; } leaf prefix { type jt:ipv6prefix; description "IPv6 prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv6-prefix container srv6-sid { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. ipv6-prefix")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable srv6-sid"; description "SRV6 SID related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "SRv6 SID to match the router-id against"; } leaf sid { type jt:ipv6addr; description "SRv6 SID to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container srv6-sid container link { junos:must "(!((".. node" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable link"; description "Link-related parameters"; uses apply-advanced; container from { description "Specify parameter of the 'from' side"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container from container to { description "Specify parameters of the 'to' side"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container to } // container link } // container traffic-engineering leaf-list route-distinguisher { type string; ordered-by user; description "Name of the route-distinguisher"; } } // container from container to { description "Conditions to match the destination of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } 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"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path } // container to container then { description "Actions to take if 'from' and 'to' conditions match"; uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // container then } // list term container from { description "Conditions to match the source of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } 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"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path list route-filter { key "address choice-ident choice-value"; ordered-by user; description "List of routes to match"; uses control_route_filter_type; } // list route-filter list source-address-filter { key "address choice-ident choice-value"; ordered-by user; description "List of source addresses to match"; uses control_source_address_filter_type; } // list source-address-filter list prefix-list { key "name"; ordered-by user; description "List of prefix-lists of routes to match"; uses control_prefix_list_type; } // list prefix-list list as-path-neighbors { key "list-type list-name"; ordered-by user; description "List of peer AS to match"; uses control_as_list_type; } // list as-path-neighbors list as-path-origins { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-origins list as-path-transits { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-transits list prefix-list-filter { key "list_name choice-ident choice-value"; ordered-by user; description "List of prefix-list-filters to match"; uses control_prefix_list_filter_type; } // list prefix-list-filter list rtf-prefix-list { key "name"; ordered-by user; description "List of rtf-prefix-lists of routes to match"; uses control_rtf_prefix_list_type; } // list rtf-prefix-list list route-filter-list { key "name"; ordered-by user; description "List of route-filter-lists of routes to match"; uses control_route_filter_list_type; } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "List of source-address-filter-lists of routes to match"; uses control_source_address_filter_list_type; } // list source-address-filter-list container multicast-scope { description "Multicast scope to match"; choice scope-choice { leaf node-local { type empty; description "Node-local scope"; } leaf link-local { type empty; description "Link-local scope"; } leaf site-local { type empty; description "Site-local scope"; } leaf organization-local { type empty; description "Organization-local scope"; } leaf global { type empty; description "Global scope"; } leaf scope_value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15"; } } description "Scope value"; } } // choice scope-choice choice scope-operator { leaf orhigher { type empty; description "Match higher values"; } leaf orlower { type empty; description "Match lower values"; } } // choice scope-operator } // container multicast-scope leaf aggregate-contributor { type empty; description "Match more specifics of an aggregate"; } leaf state { type enumeration { enum "active" { value 0; description "Active route"; } enum "inactive" { value 1; description "Inactive route"; } } description "Route state"; } leaf-list tunnel-type { type enumeration { enum "gre" { value 0; description "GRE tunnel"; } enum "udp" { value 1; description "UDP tunnel"; } enum "ipip" { value 2; description "IPIP tunnel"; } } ordered-by user; description "Tunnel type"; } leaf route-type { type enumeration { enum "internal" { value 0; description "Internal route"; } enum "external" { value 1; description "External route"; } } description "Route type"; } leaf-list nlri-route-type { junos:must "((".. family evpn" || (".. family inet-mvpn" || ".. family inet6-mvpn")))"; junos:must-message "nlri-route-type is only valid with a family qualifier such as evpn, inet-mvpn, inet6-mvpn, or other family that supports a route type"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } ordered-by user; description "Route type from NLRI"; } leaf-list evpn-tag { junos:must "(".. family evpn")"; junos:must-message "evpn-tag is only valid with a family qualifier evpn"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } ordered-by user; description "Tag in EVPN Route"; } leaf-list evpn-esi { junos:must "(".. family evpn")"; junos:must-message "evpn-esi is only valid with a family qualifier evpn"; type string; ordered-by user; description "ESI in EVPN Route"; } list mac-filter-list { junos:must "(".. family evpn")"; junos:must-message "mac-filter is only valid with a family qualifier evpn"; key "name"; ordered-by user; description "List of mac-filter-list macs to match"; uses control_mac_address_filter_list_type; } // list mac-filter-list leaf evpn-mac-route { junos:must "(".. family evpn")"; junos:must-message "evpn-mac-route is only valid with a family qualifier evpn"; type enumeration { enum "mac-only" { value 0; description "MAC route"; } enum "mac-ipv4" { value 1; description "MAC IPV4 route"; } enum "mac-ipv6" { value 2; description "MAC IPV6 route"; } } description "EVPN Mac Route type"; } leaf next-hop-type { type enumeration { enum "merged" { value 0; description "Merged next hop"; } } description "Next-hop type"; } leaf-list condition { type string; ordered-by user; description "Condition to match on"; } list community-count { key "name"; ordered-by user; description "Number of BGP communities"; uses community_count_type; } // list community-count list as-path-unique-count { key "name"; ordered-by user; description "Number of unique BGP ASes excluding confederations"; uses as-path-unique-count-type; } // list as-path-unique-count list as-path-calc-length { key "name"; ordered-by user; description "Number of BGP ASes excluding confederations"; uses as-path-calc-length-type; } // list as-path-calc-length container traffic-engineering { junos:must "(!(".. family"))"; junos:must-message "traffic-engineering family implied"; presence "enable traffic-engineering"; description "Traffic-Engineering related parameters"; uses apply-advanced; leaf-list protocol { type enumeration { enum "direct" { value 0; description "Directly originated"; } enum "ospf" { value 1; description "OSPF originated"; } enum "isis-level-1" { value 2; description "ISIS level-1 originated"; } enum "isis-level-2" { value 3; description "ISIS level-2 originated"; } enum "static" { value 4; description "Statically originated"; } enum "unknown" { value 5; description "Originated by unknown sources"; } } ordered-by user; description "Protocol that originated the entry"; } container node { junos:must "(!((".. link" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable node"; description "Node-related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Real or pseudo-node"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container node container ipv4-prefix { junos:must "(!((".. link" || ".. node")))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable ipv4-prefix"; description "IPV4 prefix-related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf prefix { type jt:ipprefix; description "IP prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv4-prefix container ipv6-prefix { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. srv6-sid")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable ipv6-prefix"; description "IPV6 prefix related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IPv6 prefix to match the router-id against"; } leaf prefix { type jt:ipv6prefix; description "IPv6 prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv6-prefix container srv6-sid { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. ipv6-prefix")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable srv6-sid"; description "SRV6 SID related parameters"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "SRv6 SID to match the router-id against"; } leaf sid { type jt:ipv6addr; description "SRv6 SID to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container srv6-sid container link { junos:must "(!((".. node" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable link"; description "Link-related parameters"; uses apply-advanced; container from { description "Specify parameter of the 'from' side"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container from container to { description "Specify parameters of the 'to' side"; uses apply-advanced; leaf 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 "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container to } // container link } // container traffic-engineering leaf-list route-distinguisher { type string; ordered-by user; description "Name of the route-distinguisher"; } } // container from container to { description "Conditions to match the destination of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } 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"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path } // container to container then { description "Actions to take if 'from' and 'to' conditions match"; uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // container then } // list policy-statement container defaults { description "Policy default behaviour"; uses apply-advanced; container route-filter { description "Set route filter behaviour"; leaf walkup { type empty; description "Route filter walk up enable"; } } // container route-filter } // container defaults list tunnel-attribute { key "name"; ordered-by user; description "BGP 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 "Tunnel attribute name"; } uses apply-advanced; leaf tunnel-type { type enumeration { enum "ipip" { value 0; description "Tunnel type IP-IN-IP"; } } description "Tunnel type"; } leaf tunnel-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tunnel color"; } leaf remote-end-point { type jt:ipaddr; description "Tunnel remote end point"; } } // list tunnel-attribute list community { key "name"; description "BGP community information"; leaf name { type string; description "Name to identify BGP community"; } uses apply-advanced; leaf invert-match { type empty; description "Invert the result of the community expression matching"; } leaf-list members { type string; ordered-by user; description "Community members"; } } // list community list as-list { key "name"; description "BGP as range list information"; leaf name { type string; description "Name to identify BGP as-list"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Single autonomous system number or range of autonomous system numbers in plain number"; } } // list as-list list as-list-group { key "name"; description "Group a set of as-list"; leaf name { type string; description "Name to identify AS list group"; } uses apply-advanced; list as-list { key "name"; description "BGP as range list information"; leaf name { type string; description "Name to identify BGP as-list"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Single autonomous system number or range of autonomous system numbers"; } } // list as-list } // list as-list-group list route-distinguisher { key "name"; description "Route-distinguisher information"; leaf name { type string; description "Name to identify route-distinguisher"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Route distinguisher string in ( *:X ) or ( Y:* ) or (X:Y) format"; } } // list route-distinguisher list as-path { key "name"; ordered-by user; description "BGP autonomous system path regular expression"; leaf name { type string; description "Name to identify AS path regular expression"; } uses apply-advanced; leaf path { type string { junos:posix-pattern "![;#~&<>/a-zA-Z]"; junos:pattern-message "^$-,|*!+?{}.[]()0123456789: Only these characters are allowed"; } description "AS path regular expression"; } } // list as-path list as-path-group { key "name"; ordered-by user; description "Group a set of AS paths"; leaf name { type string; description "Name to identify AS path group"; } uses apply-advanced; list as-path { key "name"; ordered-by user; description "BGP autonomous system path regular expression"; leaf name { type string; description "Name to identify AS path regular expression"; } leaf path { type string { junos:posix-pattern "![;#~&<>/a-zA-Z]"; junos:pattern-message "^$-,|*!+?{}.[]()0123456789: Only these characters are allowed"; } description "AS path regular expression"; } } // list as-path } // list as-path-group list damping { key "name"; ordered-by user; description "BGP route flap damping properties"; leaf name { type string; description "Name to identify route flap damping parameters"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable damping"; } } // choice enable-disable leaf half-life { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 45"; } } units "minutes"; description "Decay half-life"; } leaf reuse { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 20000"; } } description "Reuse threshold (figure-of-merit value)"; } leaf suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 20000"; } } description "Cutoff threshold (figure-of-merit value)"; } leaf max-suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 720"; } } units "minutes"; description "Maximum hold-down time"; } } // list damping list condition { key "name"; description "Define a route advertisement condition"; leaf name { type string; description "Name to identify Condition"; } uses apply-advanced; choice condition_type { leaf route-active-on { type enumeration { enum "node0" { value 0; description "Route active on node 0"; } enum "node1" { value 1; description "Route active on node 1"; } } description "Route is active on a specific node"; } container if-route-exists { presence "enable if-route-exists"; description "Route exists in a specific routing table"; uses apply-advanced; container address-family { presence "enable address-family"; description "Indicates the address family of the route to match on"; uses apply-advanced; choice address-family { container inet { presence "enable inet"; description "Route to match corresponds to an inet/inet6 prefix"; uses apply-advanced; leaf address { junos:must "(!(".. .. .. address"))"; junos:must-message "A unique address field is allowed per condition"; junos:must "(!((".. .. ccc" || ".. .. mpls")))"; junos:must-message "Only one address-family type can be configured per condition"; type jt:ipprefix; description "Exact address of the route"; } leaf table { type string; description "Routing table in which route should exist"; } } // container inet container ccc { presence "enable ccc"; description "Route to match corresponds to a ccc prefix"; uses apply-advanced; leaf address { junos:must "(!(".. .. .. address"))"; junos:must-message "A unique address field is allowed per condition"; junos:must "(!((".. .. inet" || ".. .. mpls")))"; junos:must-message "Only one address-family type can be configured per condition"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Logical interface used to establish ccc route"; } leaf table { type string; description "Routing table in which route should exist"; } leaf standby { type empty; description "Indicates if route must be in standby state to be considered a match"; } leaf peer-unit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Associated LT ifl's peer-unit. Required for LT-based routes"; } } // container ccc } // choice address-family } // container address-family leaf address { junos:must "(!(".. address-family"))"; junos:must-message "Explicit address-family previously configured. Only one address-family type can be configured per condition"; type jt:ipprefix; description "Exact address of the route"; } leaf table { junos:must "(!(".. address-family"))"; junos:must-message "Explicit address-family previously configured. No route-table is allowed at this level"; type string; description "Routing table in which route should exist"; } } // container if-route-exists } // choice condition_type } // list condition list rtf-prefix-list { key "name"; ordered-by user; description "Define a named set of family route target prefixes"; leaf name { type string; description "RTF prefix list name"; } uses apply-advanced; list prefix-list { key "name"; uses rtf_prefix_list_items; } // list prefix-list } // list rtf-prefix-list list resolution-map { key "name"; ordered-by user; description "Define a set of PNH resolution modes"; leaf name { type string; description "Resolution Map name"; } uses apply-advanced; leaf-list mode { type enumeration { enum "ip-color" { value 0; description "Colored-IP PNH Resolution Mode"; } enum "color-only" { value 1; description "Color-only PNH Resolution Mode"; } } ordered-by user; description "List of resolution modes in order that defines fallback mechanism"; } } // list resolution-map list application-maps { key "name"; ordered-by user; description "Define application maps"; uses application_map_object; } // list application-maps list redundancy-policy { key "name"; leaf name { type string { length "1 .. 63"; } description "Redundancy policy name"; } uses apply-advanced; leaf-list redundancy-events { type string; description "Events related services redundancy under event-options"; } container then { junos:must "(".. redundancy-events")"; junos:must-message "Redundancy policy needs to have a redundancy-events-then condition"; presence "enable then"; description "Action to take when of the event occurs"; uses srd-ev-action-object; } // container then } // list redundancy-policy } // grouping juniper-policy-options grouping application_map_object { leaf name { type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Name of application map"; } uses apply-advanced; list application { key "name"; ordered-by user; description "Name of the application"; leaf name { junos:must "("applications application $$")"; junos:must-message "The referenced application is not defined"; type string { length "1 .. 63"; } description "Name of the application"; } leaf-list code-points { type string; ordered-by user; description "List of code point bit strings"; } } // list application } // grouping application_map_object grouping apply-advanced { description "Apply advanced configuration logic"; leaf-list apply-groups { type string; ordered-by user; description "Groups from which to inherit configuration data"; } leaf-list apply-groups-except { type string; ordered-by user; description "Don't inherit configuration data from these groups"; } list apply-macro { key "name"; ordered-by user; description "Macro and parameters for commit script expansion"; uses apply-macro-type; } // list apply-macro } // grouping apply-advanced grouping apply-macro-type { description "Macro data for commit-script expansion"; leaf name { type string; description "Name of the macro to be expanded"; } list data { key "name"; uses macro-data-type; } // list data } // grouping apply-macro-type grouping as-path-calc-length-type { description "Calculated BGP AS_PATH length per BGP rules"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of ASes"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping as-path-calc-length-type grouping as-path-unique-count-type { description "Number of unique BGP ASes excluding confederation ASes"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of ASes"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping as-path-unique-count-type grouping community_count_type { description "Number of BGP communities"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of communities"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping community_count_type grouping control_as_list_type { leaf list-type { type enumeration { enum "as-list" { value 0; description " Type as-list"; } enum "as-list-group" { value 1; description "Type as-list-group"; } } description "Type as-list or as-list-group"; } leaf list-name { type string; description "Name of as-list or as-list-group"; } uses apply-advanced; } // grouping control_as_list_type grouping control_mac_address_filter_list_type { leaf name { type string; description "Name of mac-filter-list of macs to match"; } uses apply-advanced; } // grouping control_mac_address_filter_list_type grouping control_prefix_list_filter_type { leaf list_name { type string; description "Name of prefix-list of routes to match"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "apply-advanced" { value 3; } enum "metric" { value 4; } enum "metric2" { value 5; } enum "metric3" { value 6; } enum "metric4" { value 7; } enum "tag" { value 8; } enum "tag2" { value 9; } enum "preference" { value 10; } enum "preference2" { value 11; } enum "color" { value 12; } enum "color2" { value 13; } enum "local-preference" { value 14; } enum "priority" { value 15; } enum "prefix-segment" { value 16; } enum "label-allocation" { value 17; } enum "add-path" { value 18; } enum "validation-state" { value 19; } enum "origin" { value 20; } enum "aigp-originate" { value 21; } enum "aigp-adjust" { value 22; } enum "community" { value 23; } enum "tunnel-attribute" { value 24; } enum "damping" { value 25; } enum "aggregate-bandwidth" { value 26; } enum "limit-bandwidth" { value 27; } enum "no-entropy-label-capability" { value 28; } enum "as-path-prepend" { value 29; } enum "as-path-expand" { value 30; } enum "next-hop" { value 31; } enum "install-nexthop" { value 32; } enum "trace" { value 33; } enum "external" { value 34; } enum "load-balance" { value 35; } enum "no-route-localize" { value 36; } enum "install-to-fib" { value 37; } enum "analyze" { value 38; } enum "class" { value 39; } enum "destination-class" { value 40; } enum "source-class" { value 41; } enum "forwarding-class" { value 42; } enum "map-to-interface" { value 43; } enum "ssm-source" { value 44; } enum "p2mp-lsp-root" { value 45; } enum "cos-next-hop-map" { value 46; } enum "dynamic-tunnel-attributes" { value 47; } enum "tunnel-end-point-address" { value 48; } enum "selected-mldp-egress" { value 49; } enum "mhop-bfd-port" { value 50; } enum "no-backup" { value 51; } enum "default-action" { value 52; } enum "next" { value 53; } enum "accept_reject" { value 54; } enum "bgp-output-queue-priority" { value 55; } enum "multipath-resolve" { value 56; } enum "source-routing-path-template" { value 57; } enum "label-allocation-fallback-reject" { value 58; } enum "resolution-map" { value 59; } enum "ignore-service-label" { value 60; } enum "request-long-lived-ack" { value 61; } enum "send-withdrawal-on-route-change" { value 62; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_prefix_list_filter_type grouping control_prefix_list_type { leaf name { type string; description "Name of prefix-list of routes to match"; } uses apply-advanced; } // grouping control_prefix_list_type grouping control_route_filter_list_type { leaf name { type string; description "Name of route-filter-list of routes to match"; } uses apply-advanced; choice modifier { leaf exact { type empty; description "Exactly match the prefix length"; } leaf longer { type empty; description "Mask is greater than the prefix length"; } leaf orlonger { type empty; description "Mask is greater than or equal to the prefix length"; } leaf upto { type string { junos:posix-pattern "^/[[:digit:]]+$"; junos:pattern-message "Should be number with prefix '/'"; } description "Mask falls between two prefix lengths"; } leaf prefix-length-range { type string { junos:posix-pattern "^/[[:digit:]]+-/[[:digit:]]+$"; junos:pattern-message "Must be in the form '/<minimum-length>-/<maximum-length>'"; } description "Mask falls between two prefix lengths"; } } // choice modifier container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_route_filter_list_type grouping control_route_filter_type { 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 "address-mask" { value 6; } enum "apply-advanced" { value 7; } enum "label" { value 8; } enum "get-route-range" { value 9; } enum "metric" { value 10; } enum "metric2" { value 11; } enum "metric3" { value 12; } enum "metric4" { value 13; } enum "tag" { value 14; } enum "tag2" { value 15; } enum "preference" { value 16; } enum "preference2" { value 17; } enum "color" { value 18; } enum "color2" { value 19; } enum "local-preference" { value 20; } enum "priority" { value 21; } enum "prefix-segment" { value 22; } enum "label-allocation" { value 23; } enum "add-path" { value 24; } enum "validation-state" { value 25; } enum "origin" { value 26; } enum "aigp-originate" { value 27; } enum "aigp-adjust" { value 28; } enum "community" { value 29; } enum "tunnel-attribute" { value 30; } enum "damping" { value 31; } enum "aggregate-bandwidth" { value 32; } enum "limit-bandwidth" { value 33; } enum "no-entropy-label-capability" { value 34; } enum "as-path-prepend" { value 35; } enum "as-path-expand" { value 36; } enum "next-hop" { value 37; } enum "install-nexthop" { value 38; } enum "trace" { value 39; } enum "external" { value 40; } enum "load-balance" { value 41; } enum "no-route-localize" { value 42; } enum "install-to-fib" { value 43; } enum "analyze" { value 44; } enum "class" { value 45; } enum "destination-class" { value 46; } enum "source-class" { value 47; } enum "forwarding-class" { value 48; } enum "map-to-interface" { value 49; } enum "ssm-source" { value 50; } enum "p2mp-lsp-root" { value 51; } enum "cos-next-hop-map" { value 52; } enum "dynamic-tunnel-attributes" { value 53; } enum "tunnel-end-point-address" { value 54; } enum "selected-mldp-egress" { value 55; } enum "mhop-bfd-port" { value 56; } enum "no-backup" { value 57; } enum "default-action" { value 58; } enum "next" { value 59; } enum "accept_reject" { value 60; } enum "bgp-output-queue-priority" { value 61; } enum "multipath-resolve" { value 62; } enum "source-routing-path-template" { value 63; } enum "label-allocation-fallback-reject" { value 64; } enum "resolution-map" { value 65; } enum "ignore-service-label" { value 66; } enum "request-long-lived-ack" { value 67; } enum "send-withdrawal-on-route-change" { value 68; } } } leaf choice-value { type string; } uses apply-advanced; container label { description "Set label for BGP LU label allocation"; choice label_value { container range { description "Label range"; choice range_value { leaf range { type string { junos:posix-pattern "^[0-9]+:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is start of label range and 'y' is end of label range. e.g. 1000000:1000500"; } description "Label range in <start>:<end> format"; } } // choice range_value } // container range leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label value"; } } // choice label_value } // container label leaf get-route-range { type empty; description "Get the range"; } container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_route_filter_type grouping control_rtf_prefix_list_type { description "RTF prefix list"; leaf name { type string; description "Name of rtf-prefix-list of routes to match"; } uses apply-advanced; } // grouping control_rtf_prefix_list_type grouping control_source_address_filter_list_type { leaf name { type string; description "Name of source-address-filter-list of routes to match"; } uses apply-advanced; } // grouping control_source_address_filter_list_type grouping control_source_address_filter_type { 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 "apply-advanced" { value 6; } enum "metric" { value 7; } enum "metric2" { value 8; } enum "metric3" { value 9; } enum "metric4" { value 10; } enum "tag" { value 11; } enum "tag2" { value 12; } enum "preference" { value 13; } enum "preference2" { value 14; } enum "color" { value 15; } enum "color2" { value 16; } enum "local-preference" { value 17; } enum "priority" { value 18; } enum "prefix-segment" { value 19; } enum "label-allocation" { value 20; } enum "add-path" { value 21; } enum "validation-state" { value 22; } enum "origin" { value 23; } enum "aigp-originate" { value 24; } enum "aigp-adjust" { value 25; } enum "community" { value 26; } enum "tunnel-attribute" { value 27; } enum "damping" { value 28; } enum "aggregate-bandwidth" { value 29; } enum "limit-bandwidth" { value 30; } enum "no-entropy-label-capability" { value 31; } enum "as-path-prepend" { value 32; } enum "as-path-expand" { value 33; } enum "next-hop" { value 34; } enum "install-nexthop" { value 35; } enum "trace" { value 36; } enum "external" { value 37; } enum "load-balance" { value 38; } enum "no-route-localize" { value 39; } enum "install-to-fib" { value 40; } enum "analyze" { value 41; } enum "class" { value 42; } enum "destination-class" { value 43; } enum "source-class" { value 44; } enum "forwarding-class" { value 45; } enum "map-to-interface" { value 46; } enum "ssm-source" { value 47; } enum "p2mp-lsp-root" { value 48; } enum "cos-next-hop-map" { value 49; } enum "dynamic-tunnel-attributes" { value 50; } enum "tunnel-end-point-address" { value 51; } enum "selected-mldp-egress" { value 52; } enum "mhop-bfd-port" { value 53; } enum "no-backup" { value 54; } enum "default-action" { value 55; } enum "next" { value 56; } enum "accept_reject" { value 57; } enum "bgp-output-queue-priority" { value 58; } enum "multipath-resolve" { value 59; } enum "source-routing-path-template" { value 60; } enum "label-allocation-fallback-reject" { value 61; } enum "resolution-map" { value 62; } enum "ignore-service-label" { value 63; } enum "request-long-lived-ack" { value 64; } enum "send-withdrawal-on-route-change" { value 65; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_source_address_filter_type grouping mac_addr_list_items { leaf name { type jt:mac-addr; description "Mac Address"; } uses apply-advanced; } // grouping mac_addr_list_items 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 metric_expression_type { uses apply-advanced; container metric { description "Parameters for metric attribute"; leaf multiplier { type decimal64 { fraction-digits 9; } description "Coefficient for metric attribute"; } leaf offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Offset for metric attribute"; } } // container metric container metric2 { description "Parameters for metric2 attribute"; leaf multiplier { type decimal64 { fraction-digits 9; } default "1.0"; description "Coefficient for metric2 attribute"; } leaf offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Offset for metric2 attribute"; } } // container metric2 } // grouping metric_expression_type grouping prefix_list_items { leaf name { type jt:ipprefix-only; description "Address prefix"; } uses apply-advanced; } // grouping prefix_list_items grouping route_filter_list_items { 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 "address-mask" { value 6; } enum "apply-advanced" { value 7; } enum "label" { value 8; } enum "get-route-range" { value 9; } enum "metric" { value 10; } enum "metric2" { value 11; } enum "metric3" { value 12; } enum "metric4" { value 13; } enum "tag" { value 14; } enum "tag2" { value 15; } enum "preference" { value 16; } enum "preference2" { value 17; } enum "color" { value 18; } enum "color2" { value 19; } enum "local-preference" { value 20; } enum "priority" { value 21; } enum "prefix-segment" { value 22; } enum "label-allocation" { value 23; } enum "add-path" { value 24; } enum "validation-state" { value 25; } enum "origin" { value 26; } enum "aigp-originate" { value 27; } enum "aigp-adjust" { value 28; } enum "community" { value 29; } enum "tunnel-attribute" { value 30; } enum "damping" { value 31; } enum "aggregate-bandwidth" { value 32; } enum "limit-bandwidth" { value 33; } enum "no-entropy-label-capability" { value 34; } enum "as-path-prepend" { value 35; } enum "as-path-expand" { value 36; } enum "next-hop" { value 37; } enum "install-nexthop" { value 38; } enum "trace" { value 39; } enum "external" { value 40; } enum "load-balance" { value 41; } enum "no-route-localize" { value 42; } enum "install-to-fib" { value 43; } enum "analyze" { value 44; } enum "class" { value 45; } enum "destination-class" { value 46; } enum "source-class" { value 47; } enum "forwarding-class" { value 48; } enum "map-to-interface" { value 49; } enum "ssm-source" { value 50; } enum "p2mp-lsp-root" { value 51; } enum "cos-next-hop-map" { value 52; } enum "dynamic-tunnel-attributes" { value 53; } enum "tunnel-end-point-address" { value 54; } enum "selected-mldp-egress" { value 55; } enum "mhop-bfd-port" { value 56; } enum "no-backup" { value 57; } enum "default-action" { value 58; } enum "next" { value 59; } enum "accept_reject" { value 60; } enum "bgp-output-queue-priority" { value 61; } enum "multipath-resolve" { value 62; } enum "source-routing-path-template" { value 63; } enum "label-allocation-fallback-reject" { value 64; } enum "resolution-map" { value 65; } enum "ignore-service-label" { value 66; } enum "request-long-lived-ack" { value 67; } enum "send-withdrawal-on-route-change" { value 68; } } } leaf choice-value { type string; } uses apply-advanced; container label { description "Set label for BGP LU label allocation"; choice label_value { container range { description "Label range"; choice range_value { leaf range { type string { junos:posix-pattern "^[0-9]+:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is start of label range and 'y' is end of label range. e.g. 1000000:1000500"; } description "Label range in <start>:<end> format"; } } // choice range_value } // container range leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label value"; } } // choice label_value } // container label leaf get-route-range { type empty; description "Get the range"; } container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping route_filter_list_items grouping rtf_prefix_list_items { leaf name { type string { junos:posix-pattern "^[0-9]{1,15}:[0-9.]{1,15}L?:[0-9]{1,10}/(0|3[2-9]|[4-8][0-9]|9[0-6])$"; junos:pattern-message "Use format 'as:x:y/len' where 'as' is an AS number and '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 32 to 96 or 0"; length "1 .. 63"; } description "Family route-target prefix"; } uses apply-advanced; } // grouping rtf_prefix_list_items grouping satellite-policy-options { uses apply-advanced; list extended-ports-template { key "name"; ordered-by user; description "Extended ports template"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; list pic { key "name"; description "PIC attributes"; uses satellite-pic-type; } // list pic } // list extended-ports-template list port-group-alias { key "name"; ordered-by user; description "Port group alias"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; list pic { key "name"; ordered-by user; description "Satellite PIC information"; leaf name { type union { type int32; type string { pattern "<.*>|$.*"; } } description "PIC identifier"; } uses apply-advanced; leaf-list port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } ordered-by user; description "Port id or range or all"; } } // list pic } // list port-group-alias list chassis-group-alias { key "name"; ordered-by user; description "Chassis group alias"; leaf name { type string { length "1 .. 32"; } description "Chassis group alias name"; } uses apply-advanced; leaf prefer-primary { type empty; description "Primary mode chassis will be preferred"; } list chassis-id { key "name"; ordered-by user; description "List of chassis-ids"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Chassis ID"; } uses apply-advanced; container mode { description "Mode Primary or Backup"; uses apply-advanced; choice mode-choice { leaf primary { type empty; description "Primary Mode"; } leaf backup { type empty; description "Backup Mode"; } } // choice mode-choice } // container mode list core-interface { key "name"; ordered-by user; description "Core interface"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Core interface name"; } uses apply-advanced; } // list core-interface } // list chassis-id } // list chassis-group-alias list extended-ports-policy { key "name"; ordered-by user; description "Define a extended-ports-policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } leaf extended-ports-template { junos:must "("policy-options satellite-policies extended-ports-template $$")"; junos:must-message "Extended ports template not defined"; type string; description "Apply extended ports template to satellite matching conditions defined in this term"; } } // container from } // list term } // list extended-ports-policy list candidate-uplink-port-policy { key "name"; ordered-by user; description "Define a candidate uplink-port policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; leaf uplink-port-group { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } leaf uplink-port-group { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } } // container from } // list term } // list candidate-uplink-port-policy list environment-monitoring-policy { key "name"; ordered-by user; description "Define a environment monitoring policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; container alarm { presence "enable alarm"; description "Policy default alarm policy"; uses apply-advanced; leaf linkdown { type enumeration { enum "ignore" { value 0; description "Ignore ethernet linkdown"; } enum "red" { value 1; description "Raise major alarm for ethernet linkdown"; } enum "yellow" { value 2; description "Raise minor alarm for ethernet linkdown"; } } description "Policy default linkdown alarm"; } } // container alarm list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } container alarm { presence "enable alarm"; description "Term alarm policy"; uses apply-advanced; leaf linkdown { type enumeration { enum "ignore" { value 0; description "Ignore ethernet linkdown"; } enum "red" { value 1; description "Raise major alarm for ethernet linkdown"; } enum "yellow" { value 2; description "Raise minor alarm for ethernet linkdown"; } } description "Set linkdown alarm"; } } // container alarm } // container from } // list term } // list environment-monitoring-policy list forwarding-policy { key "name"; ordered-by user; description "Define forwarding policy for extended ports"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; list port-group-extended { key "name"; ordered-by user; description "Define a extend port group mapping"; uses port-extend-type; } // list port-group-extended list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } list port-group-extended { key "name"; ordered-by user; description "Define a extend port group mapping"; uses port-extend-type; } // list port-group-extended } // container from } // list term } // list forwarding-policy } // grouping satellite-policy-options grouping port-extend-type { leaf name { type string; description "Extended port group alias name policy applied on"; } uses apply-advanced; leaf filter { junos:must "(("chassis satellite-management firewall family bridge filter $$" || "chassis satellite-management firewall family ethernet-switching filter $$"))"; junos:must-message "Filter should be defined under 'chassis satellite-management firewall family bridge filter'"; type string; description "Assign a filter for uplink selection"; } container port-group-uplink { description "Define a uplink port group mapping"; uses apply-advanced; leaf port-group-uplink-alias { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name used for uplink pinning mode"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } } // container port-group-uplink container mirror-ingress { description "Define a ingress port mirror"; uses apply-advanced; leaf port-group-mirror { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Mirror port group alias name for local port mirroring"; } } // container mirror-ingress container mirror-egress { description "Define a egress port mirror"; uses apply-advanced; leaf port-group-mirror { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Mirror port group alias name for local port mirroring"; } } // container mirror-egress } // grouping port-extend-type grouping satellite-pic-type { leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4"; } } description "PIC slot number"; } uses apply-advanced; list port { key "name"; description "Port number"; uses satellite-pic-port-attr; } // list port list port-range { key "port-range-low port-range-high"; ordered-by user; description "Physical ports to channelize"; leaf port-range-low { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port range low number"; } leaf port-range-high { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port range high number"; } uses apply-advanced; leaf channel-speed { type enumeration { enum "10g" { value 0; description "Set the port speed to 10G"; } enum "disable-auto-speed-detection" { value 1; description "Disables automatic speed detection"; } } description "Port channel speed"; } } // list port-range } // grouping satellite-pic-type grouping satellite-pic-port-attr { leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port number"; } uses apply-advanced; leaf channel-speed { type enumeration { enum "10g" { value 0; description "Set the port speed to 10G"; } enum "25g" { value 1; description "Set the port speed to 25G"; } enum "50g" { value 2; description "Set the port speed to 50G"; } enum "disable-auto-speed-detection" { value 3; description "Disables automatic speed detection"; } } description "Port channel speed"; } } // grouping satellite-pic-port-attr grouping source_address_filter_list_items { 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 "apply-advanced" { value 6; } enum "metric" { value 7; } enum "metric2" { value 8; } enum "metric3" { value 9; } enum "metric4" { value 10; } enum "tag" { value 11; } enum "tag2" { value 12; } enum "preference" { value 13; } enum "preference2" { value 14; } enum "color" { value 15; } enum "color2" { value 16; } enum "local-preference" { value 17; } enum "priority" { value 18; } enum "prefix-segment" { value 19; } enum "label-allocation" { value 20; } enum "add-path" { value 21; } enum "validation-state" { value 22; } enum "origin" { value 23; } enum "aigp-originate" { value 24; } enum "aigp-adjust" { value 25; } enum "community" { value 26; } enum "tunnel-attribute" { value 27; } enum "damping" { value 28; } enum "aggregate-bandwidth" { value 29; } enum "limit-bandwidth" { value 30; } enum "no-entropy-label-capability" { value 31; } enum "as-path-prepend" { value 32; } enum "as-path-expand" { value 33; } enum "next-hop" { value 34; } enum "install-nexthop" { value 35; } enum "trace" { value 36; } enum "external" { value 37; } enum "load-balance" { value 38; } enum "no-route-localize" { value 39; } enum "install-to-fib" { value 40; } enum "analyze" { value 41; } enum "class" { value 42; } enum "destination-class" { value 43; } enum "source-class" { value 44; } enum "forwarding-class" { value 45; } enum "map-to-interface" { value 46; } enum "ssm-source" { value 47; } enum "p2mp-lsp-root" { value 48; } enum "cos-next-hop-map" { value 49; } enum "dynamic-tunnel-attributes" { value 50; } enum "tunnel-end-point-address" { value 51; } enum "selected-mldp-egress" { value 52; } enum "mhop-bfd-port" { value 53; } enum "no-backup" { value 54; } enum "default-action" { value 55; } enum "next" { value 56; } enum "accept_reject" { value 57; } enum "bgp-output-queue-priority" { value 58; } enum "multipath-resolve" { value 59; } enum "source-routing-path-template" { value 60; } enum "label-allocation-fallback-reject" { value 61; } enum "resolution-map" { value 62; } enum "ignore-service-label" { value 63; } enum "request-long-lived-ack" { value 64; } enum "send-withdrawal-on-route-change" { value 65; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } 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"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } leaf random { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "To configure random mode, chassis network-services enhanced-ip must be set"; junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure random mode, CBF must not be enabled in the same policy term"; type empty; description "Load balance using packet random spray"; } leaf per-prefix { type empty; description "Load balance on a per-prefix basis"; } leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } leaf source-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure source ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a source based ip load-balancing"; } leaf destination-ip-only { junos:must "(!(".. .. cos-next-hop-map"))"; junos:must-message "To configure destination ip load balancing, CBF must not be enabled in the same policy term"; type empty; description "Give a destination based ip load-balancing"; } } // choice load_balance_type } // container load-balance leaf no-route-localize { type empty; description "Force route install on all fib-remote PFEs"; } choice install-to-fib-choice { leaf install-to-fib { type empty; description "Install route to fib"; } leaf no-install-to-fib { type empty; description "Don't install route to fib"; } } // choice install-to-fib-choice leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping source_address_filter_list_items grouping srd-ev-action-object { junos:must "(("add-static-route" || "delete-static-route"))"; junos:must-message "Add or delete of static route needed"; description "Action to be taken on the occurence if defined events"; uses apply-advanced; leaf mship-actions { type enumeration { enum "acquire-mastership" { value 0; description "Attempt to acquire mastership"; } enum "release-mastership" { value 1; description "Attempt to release mastership"; } enum "release-mastership-force" { value 2; description "Attempt to release mastership"; } enum "release-mastership-if-standby-clear" { value 3; description "Attempt to release mastership if standby has no warning"; } enum "broadcast-warning" { value 4; description "Attempt to release mastership"; } } description "Mastership related actions"; } list add-static-route { key "name"; max-elements 1; ordered-by user; description "Add a static route in the specified routing table"; uses srd-route-add-object; } // list add-static-route list delete-static-route { key "name"; max-elements 1; ordered-by user; description "Delete a static route in the specified routing table"; uses srd-route-delete-object; } // list delete-static-route } // grouping srd-ev-action-object grouping srd-route-add-object { description "Route details"; leaf name { type jt:ipv4prefix-mandatory; description " Destination route address with prefix length"; } uses apply-advanced; choice next-hop-details { leaf next-hop { type string; description "Next-hop (interface) to destination"; } leaf receive { type empty; description "Install a receive route for the destination"; } } // choice next-hop-details leaf routing-instance { type string; description "Routing instance where the route should be added"; } } // grouping srd-route-add-object grouping srd-route-delete-object { description "Route details"; leaf name { type jt:ipv4prefix-mandatory; description "Destination route address with prefix length"; } uses apply-advanced; leaf routing-instance { type string; description "Routing instance where the route should be added"; } } // grouping srd-route-delete-object } // module junos-conf-policy-options
© 2023 YumaWorks, Inc. All rights reserved.