Junos routing-instances configuration module
Version: 2019-01-01
module junos-ex-conf-routing-instances { yang-version 1; namespace "http://yang.juniper.net/junos-ex/conf/routing-instances"; prefix jc-routing-instances; import junos-common-ddl-extensions { prefix junos; revision-date "2019-01-01"; } import junos-common-types { prefix jt; revision-date "2019-01-01"; } import junos-ex-conf-root { prefix jc; revision-date "2019-01-01"; } organization "Juniper Networks, Inc."; contact "yang-support@juniper.net"; description "Junos routing-instances configuration module"; revision "2019-01-01" { description "Junos: 21.3R1.9"; } augment /jc:configuration { uses routing-instances-group; } augment /jc:configuration/jc:groups { uses routing-instances-group; } grouping routing-instances-group { container routing-instances { description "Routing instance configuration"; uses apply-advanced; list instance { key "name"; uses juniper-routing-instance; } // list instance } // container routing-instances } // grouping routing-instances-group 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 juniper-routing-instance { description "Routing instance"; leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; leaf instance-type { type enumeration { enum "virtual-switch" { value 0; description "Virtual switch routing instance"; } enum "layer2-control" { value 1; description "Layer 2 control protocols"; } enum "mac-vrf" { junos:must "((".. bridge-domains" || ".. vlans"))"; junos:must-message "bridge-domains must be configured for mac-vrf instance"; junos:must "(".. service-type")"; junos:must-message "service-type must be configured for mac-vrf instance"; junos:must "("routing-instances ${instance} protocols evpn")"; junos:must-message "Protocol EVPN must be configured in the mac-vrf instance"; value 2; description "MAC-VRF routing instance"; } enum "forwarding" { value 3; description "Forwarding instance"; } enum "no-forwarding" { value 4; description "Nonforwarding instance"; } enum "l2vpn" { value 5; description "Layer 2 VPN routing instance"; } enum "vpls" { value 6; description "VPLS routing instance"; } enum "virtual-router" { value 7; description "Virtual routing instance"; } enum "l2backhaul-vpn" { junos:must "(".. instance-role")"; junos:must-message "'instance-role' statement must be configured for l2backhaul-vpn instance"; junos:must "(".. no-local-switching")"; junos:must-message "'no-local-switching' statement must be configured for l2backhaul-vpn instance"; junos:must "(".. vlan-model")"; junos:must-message "'vlan-model' statement must be configured for l2backhaul-vpn instance"; value 8; description "L2Backhaul/L2Wholesale routing instance"; } enum "mpls-internet-multicast" { junos:must "(("protocols pim" || ".. provider-tunnel inter-region"))"; junos:must-message "Protocol PIM must be configured in the master instance"; value 9; description "Internet Multicast over MPLS routing instance"; } enum "evpn" { junos:must "("routing-instances ${instance} protocols evpn")"; junos:must-message "Protocol EVPN must be configured in the evpn instance"; value 10; description "EVPN routing instance"; } enum "mpls-forwarding" { value 11; description "Routing instance provides a MPLS forwarding-context"; } enum "evpn-vpws" { junos:must "("routing-instances ${instance} protocols evpn")"; junos:must-message "Protocol EVPN must be configured in the evpn-vpws instance"; value 12; description "EVPN VPWS routing instance"; } enum "vrf" { value 13; description "Virtual routing forwarding instance"; } } description "Type of routing instance"; } container l2vpn-id { description "Layer-2 vpn-id for this instance"; uses apply-advanced; leaf community { junos:must "(!(".. .. protocols vpls neighbor"))"; junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the default mesh-group"; junos:must "(!(".. .. protocols vpls vpls-id"))"; junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the default mesh-group"; junos:must "(!(".. .. protocols vpls site"))"; junos:must-message "Does not support FEC129 LDP-VPLS and BGP-VPLS/FEC128-LDP-VPLS under the same instance"; junos:must "(!(".. .. protocols vpls site-range"))"; junos:must-message "site-range is not supported for FEC129 LDP VPLS"; junos:must "(!(".. .. protocols vpls mac-flush"))"; junos:must-message "mac-flush is not supported for FEC129 LDP VPLS"; junos:must "(!(".. .. protocols vpls label-block-size"))"; junos:must-message "label-block-size is not supported for FEC129 LDP VPLS"; junos:must "(!(".. .. protocols vpls connectivity-type"))"; junos:must-message "connectivity-type is not supported for FEC129 LDP VPLS"; junos:must "(!(".. .. protocols vpls community"))"; junos:must-message "community is not supported for FEC129 LDP VPLS"; junos:must "(!(".. .. provider-tunnel"))"; junos:must-message "provider-tunnel is not supported for FEC129 LDP VPLS/VPWS"; type string { junos:posix-pattern "^(l2vpn-id)+:[0-9.]+:[0-9]+$"; junos:pattern-message "Use format 'l2vpn-id:x:y' where 'x' is 2 byte AS number, or an IP address and 'y' is a number. e.g. l2vpn-id:1:100, l2vpn-id:1.2.3.4:100"; } description "L2VPN ID community for FEC129 VPLS/VPWS with BGP auto-discovery"; } } // container l2vpn-id container routing-options { description "Protocol-independent routing option configuration"; uses juniper-routing-options; } // container routing-options container egress-protection { description "Egress instance protection"; uses apply-advanced; leaf protector { junos:must "(any "protocols mpls egress-protection context-identifier <*> protector")"; junos:must-message "context-identifier must be type protector"; type empty; description "Enable Edge Protector functionality for this VPN"; } container context-identifier { description "Context identifier"; uses apply-advanced; leaf context-id { junos:must "("protocols mpls egress-protection context-identifier $$ primary")"; junos:must-message "context-identifier must be type primary"; junos:must "("protocols mpls egress-protection context-identifier $$")"; junos:must-message "same context-identifier must be defined in protocols mpls egress-protection"; type jt:ipv4addr; description "IP address"; } } // container context-identifier } // container egress-protection container protocols { junos:must "((!(". pim") || (".. instance-type" && !(".. instance-type no-forwarding"))))"; junos:must-message "pim configuration is not allowed for 'instance-type no-forwarding'"; description "Routing protocol configuration"; uses apply-advanced; container bfd { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "bfd configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "bfd configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "bfd configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "bfd configuration is not allowed for 'instance-type virtual-switch'"; presence "enable bfd"; uses juniper-ri-protocols-bfd; } // container bfd container igmp-snooping { junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || ".. .. instance-type virtual-switch"))))"; junos:must-message "igmp-snooping configuration is allowed only for 'instance-type vpls/virtual-switch/evpn/mac-vrf'"; junos:must "(!(".. pim-snooping"))"; junos:must-message "igmp-snooping configuration do not co-exist with pim-snooping"; junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || (".. .. instance-type virtual-switch " && !(".. vpls"))))))"; junos:must-message "igmp-snooping configuration is allowed only for 'instance-type vpls/evpn/mac-vrf or instance-type virtual-switch without vpls'"; presence "enable igmp-snooping"; description "IGMP snooping configuration"; uses juniper-ri-protocols-igmp-snooping; } // container igmp-snooping container mld-snooping { junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || ".. .. instance-type virtual-switch")))"; junos:must-message "mld-snooping configuration is allowed only for 'instance-type vpls/virtual-switch/evpn'"; junos:must "((".. .. instance-type vpls" || (".. .. instance-type evpn" || (".. .. instance-type mac-vrf" || (".. .. instance-type virtual-switch " && !(".. vpls"))))))"; junos:must-message "mld-snooping configuration is allowed only for 'instance-type vpls/evpn/mac-vrf or instance-type virtual-switch without vpls'"; presence "enable mld-snooping"; description "MLD snooping configuration"; uses juniper-ri-protocols-mld-snooping; } // container mld-snooping container amt { junos:must "(!(".. .. instance-type no-forwarding"))"; junos:must-message "amt configuration is not allowed for 'instance-type no-forwarding'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "amt configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "amt configuration is not allowed for 'instance-type virtual-switch'"; description "AMT relay configuration"; uses juniper-protocols-amt; } // container amt container bgp { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "bgp configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "bgp configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "bgp configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "bgp configuration is not allowed for 'instance-type virtual-switch'"; description "BGP options"; uses juniper-protocols-bgp; } // container bgp container router-discovery { junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "This configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "This configuration is not allowed for 'instance-type virtual-switch'"; description "ICMP router discovery options"; uses juniper-protocols-router-discovery; } // container router-discovery container isis { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "isis configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "isis configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "isis configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "isis configuration is not allowed for 'instance-type virtual-switch'"; description "IS-IS configuration"; uses juniper-protocols-isis; } // container isis container l2vpn { junos:must "(!(".. evpn"))"; junos:must-message "This configuration is not allowed with 'protocols evpn'"; junos:must "(!(".. vpls"))"; junos:must-message "This configuration is not allowed with 'protocols vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "This configuration is not allowed for 'instance-type layer2-control'"; description "Layer 2 VPN configuration"; uses juniper-protocols-l2vpn; } // container l2vpn container vpls { junos:must "(!(".. .. instance-type mac-vrf"))"; junos:must-message "This configuration is not allowed for instance-type mac-vrf"; junos:must "(!((".. .. instance-type virtual-switch" && ".. evpn")))"; junos:must-message "This configuration is not allowed for instance-type virtual-switch with 'protocols evpn' enabled"; junos:must "(!(".. l2vpn"))"; junos:must-message "This configuration is not allowed with 'protocols l2vpn'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "This configuration is not allowed for 'instance-type layer2-control'"; presence "enable vpls"; description "VPLS configuration"; uses juniper-protocols-l2vpn; } // container vpls container ldp { junos:must "((!(".. ldp p2mp") || (".. ldp p2mp" && !(".. .. instance-type virtual-router"))))"; junos:must-message "p2mp under ldp is not allowed for 'instance-type virtual-router'"; junos:must "((!(".. ldp p2mp") || (".. ldp p2mp" && !(".. .. instance-type vrf"))))"; junos:must-message "p2mp under ldp is not allowed for 'instance-type vrf'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "ldp configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "ldp configuration is not allowed for 'instance-type virtual-switch'"; description "LDP configuration"; uses juniper-protocols-ldp; } // container ldp container mpls { junos:must "(!(".. .. instance-type evpn"))"; junos:must-message "mpls configuration is not allowed for 'instance-type evpn'"; junos:must "(!(".. .. instance-type mpls-internet-multicast"))"; junos:must-message "mpls configuration is not allowed for 'instance-type mpls-internet-multicast'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "mpls configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type atmvpn"))"; junos:must-message "mpls configuration is not allowed for 'instance-type atmvpn'"; junos:must "(!(".. .. instance-type l2backhaul-vpn"))"; junos:must-message "mpls configuration is not allowed for 'instance-type l2backhaul-vpn'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "mpls configuration is not allowed for 'instance-type virtual-switch'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "mpls configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "mpls configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type no-forwarding"))"; junos:must-message "mpls configuration is not allowed for 'instance-type no-forwarding'"; junos:must "(!(".. .. instance-type forwarding"))"; junos:must-message "mpls configuration is not allowed for 'instance-type forwarding'"; description "MPLS configuration"; uses juniper-protocols-mpls; } // container mpls container msdp { junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "msdp configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "msdp configuration is not allowed for 'instance-type virtual-switch'"; description "MSDP configuration"; uses juniper-protocols-msdp; } // container msdp container mvpn { junos:must "((!("system processes routing bgp rib-sharding") || (!(".. .. protocols bgp group") || (!(".. .. routing-options auto-export") || "system processes routing bgp rib-sharding no-l3vpn"))))"; junos:must-message "Auto-export of BGP learned routes will not work with sharding MVPN context"; junos:must "((".. pim" || (".. .. instance-type mpls-internet-multicast" || (".. .. provider-tunnel inter-as" || ".. .. provider-tunnel inter-region"))))"; junos:must-message "MVPN configuration requires PIM configuration in the VRF or MPLS internet multicast instance"; junos:must "((!("routing-options nonstop-routing") || (".. .. route-distinguisher" || (".. pim mvpn" || ".. .. instance-type mpls-internet-multicast"))))"; junos:must-message "Nonstop routing and auto-rd mvpn instance may not be configured together"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "mvpn configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "mvpn configuration is not allowed for 'instance-type virtual-switch'"; presence "enable mvpn"; description "BGP-MVPN configuration"; uses juniper-protocols-mvpn; } // container mvpn container ospf { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "ospf configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "ospf configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "ospf configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "ospf configuration is not allowed for 'instance-type virtual-switch'"; description "OSPF configuration"; uses juniper-protocols-ospf; } // container ospf container ospf3 { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "ospf configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "ospf configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "ospf configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "ospf configuration is not allowed for 'instance-type virtual-switch'"; description "OSPF3 configuration"; uses juniper-protocols-ospf3; } // container ospf3 container pim { junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "pim configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "pim configuration is not allowed for 'instance-type virtual-switch'"; description "PIM configuration"; uses juniper-protocols-pim; } // container pim container ripng { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "ripng configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "ripng configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "ripng configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "ripng configuration is not allowed for 'instance-type virtual-switch'"; description "RIPng options"; uses juniper-protocols-ripng; } // container ripng container rip { junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "rip configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "rip configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "rip configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "rip configuration is not allowed for 'instance-type virtual-switch'"; description "RIP options"; uses juniper-protocols-rip; } // container rip container rsvp { junos:must "(!(".. .. instance-type evpn"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type evpn'"; junos:must "(!(".. .. instance-type mpls-internet-multicast"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type mpls-internet-multicast'"; junos:must "(!(".. .. instance-type layer2-control"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type layer2-control'"; junos:must "(!(".. .. instance-type atmvpn"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type atmvpn'"; junos:must "(!(".. .. instance-type l2backhaul-vpn"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type l2backhaul-vpn'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type virtual-switch'"; junos:must "(!(".. .. instance-type vpls"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type vpls'"; junos:must "(!(".. .. instance-type l2vpn"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type l2vpn'"; junos:must "(!(".. .. instance-type no-forwarding"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type no-forwarding'"; junos:must "(!(".. .. instance-type forwarding"))"; junos:must-message "rsvp configuration is not allowed for 'instance-type forwarding'"; description "RSVP configuration"; uses juniper-protocols-rsvp; } // container rsvp container pim-snooping { junos:must "(!(".. .. routing-interface"))"; junos:must-message "routing-interface can not be configured when pim-snooping is configured"; junos:must "(!(".. igmp-snooping"))"; junos:must-message "pim-snooping configuration can not coexist with igmp-snooping"; junos:must "(".. .. instance-type vpls")"; junos:must-message "pim-snooping configuration is allowed only for 'instance-type vpls'"; presence "enable pim-snooping"; description "PIM snooping configuration"; uses juniper-protocols-pim-snooping; } // container pim-snooping container mvrp { junos:must "((!(".. vstp") || ".. vstp disable"))"; junos:must-message "vstp enabled, mvrp is not supported"; junos:must "(((".. mstp" && !(".. mstp disable")) || (".. rstp" && !(".. rstp disable"))))"; junos:must-message "rstp/mstp is not enabled, mvrp is not allowed"; junos:must "(".. .. instance-type virtual-switch")"; junos:must-message "mvrp is allowed only in virtual-switch instance"; description "MVRP configuration"; uses juniper-protocols-mvrp; } // container mvrp container rstp { junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))"; junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance"; description "RSTP configuration"; uses juniper-protocols-stp; } // container rstp container mstp { junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))"; junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance"; description "MSTP configuration"; uses juniper-protocols-mstp; } // container mstp container vstp { junos:must "((".. vstp disable" || (!(".. mstp") || ".. mstp disable")))"; junos:must-message "MSTP is enabled in the same routing instance, VSTP not allowed"; junos:must "((".. .. instance-type layer2-control" || ".. .. instance-type virtual-switch"))"; junos:must-message "STP protocols allowed only in layer2-control or virtual-switch instance"; description "VSTP configuration"; uses juniper-protocols-vstp; } // container vstp } // container protocols leaf description { type string { junos:posix-pattern "^.{1,255}$"; junos:pattern-message "Must be a string of 255 characters or less"; } description "Text description of routing instance"; } leaf vlan-model { type enumeration { enum "one-to-one" { value 0; description "Customer VLAN model (1:1)"; } } description "Subscriber vlan-model in L2Wholesale framework"; } container vtep-source-interface { description "Source layer-3 IFL for VXLAN"; leaf interface-name { junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } } choice family { container inet { presence "enable inet"; description "IPv4 source"; uses apply-advanced; } // container inet container inet6 { junos:must "((!("routing-instances ${instance} protocols evpn") || "routing-instances ${instance} protocols evpn encapsulation vxlan"))"; junos:must-message "encapsulation vxlan must be enabled for IPv6 underlay"; presence "enable inet6"; description "IPv6 source"; uses apply-advanced; } // container inet6 } // choice family } // container vtep-source-interface container vtep-remote-interface { description "Remote VTEP interface"; uses apply-advanced; list remote-ip { key "name"; ordered-by user; description "Remote VTEP IP address"; leaf name { type jt:ipv4addr; description "IP address"; } uses apply-advanced; leaf dynamic-profile { junos:must "("dynamic-profiles $$")"; junos:must-message "Dynamic profile must be defined"; type string; description "Define associate dynamic profile"; } } // list remote-ip container default { description "To all remote vtep interface"; uses apply-advanced; leaf dynamic-profile { junos:must "("dynamic-profiles $$")"; junos:must-message "Dynamic profile must be defined"; type string; description "Define associate dynamic profile"; } } // container default } // container vtep-remote-interface leaf-list remote-vtep-list { type jt:ipaddr; max-elements 1024; description "Configure static remote VXLAN tunnel endpoints"; } leaf-list remote-vtep-v6-list { type jt:ipv6addr; max-elements 1024; description "Configurate static ipv6 remote VXLAN tunnel endpoints"; } leaf instance-role { type enumeration { enum "access" { value 0; description "Role of Access/Aggregation router"; } enum "nni" { value 1; description "Role of Provider network interfacing router"; } } description "Primary role of L2Backhaul-vpn router"; } choice vlan_choice { leaf vlan-id { junos:must "(!(".. instance-type mac-vrf"))"; junos:must-message "'vlan-id' must be configured within bridge-domains for 'instance-type mac-vrf'"; junos:must "((".. instance-type vpls" || ".. instance-type evpn"))"; junos:must-message "'vlan-id' statement can be included only for a VPLS or EVPN"; type string; description "IEEE 802.1q VLAN identifier for bridging domain"; } container vlan-tags { junos:must "(".. instance-type vpls")"; junos:must-message "'vlan-tags' statement can be included only for VPLS instance"; presence "enable vlan-tags"; description "IEEE 802.1q VLAN tags for bridging domain"; leaf outer { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } leaf inner { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } } // container vlan-tags } // choice vlan_choice container system { description "System parameters"; uses apply-advanced; container services { description "System services"; uses apply-advanced; container dhcp-local-server { description "Dynamic Host Configuration Protocol server configuration"; uses jdhcp-local-server-type; } // container dhcp-local-server container static-subscribers { description "Static Subscriber Client configuration"; uses jsscd-static-subscribers-type; } // container static-subscribers } // container services } // container system container access { description "Network access configuration"; uses apply-advanced; container address-assignment { description "Address assignment configuration"; uses address-assignment-type; } // container address-assignment container address-protection { presence "enable address-protection"; description "Initiate Duplicate Address Protection"; uses apply-advanced; leaf reassign-on-match { type empty; description "Disconnect owning session and reassign to this session"; } } // container address-protection } // container access container access-profile { description "Access profile for this instance"; leaf access-profile-name { junos:must "("access profile $$")"; junos:must-message "Access-profile must be defined in the [edit access profile] hierarchy"; type string; description "Profile name"; } } // container access-profile leaf routing-interface { junos:must "(!("interfaces $$-IFL family mpls"))"; junos:must-message "routing-interface with family mpls cannot be added to VPLS instance"; junos:must "(!(".. instance-type virtual-switch"))"; junos:must-message "routing-interface must be configured within bridge-domains for 'instance-type virtual-switch'"; junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))"; junos:must-message "routing-interface not valid for vlan-bundle service type"; junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))"; junos:must-message "routing-interface cannot be configured under routing-instance with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "((".. vlan-id" || ".. vlan-tags"))"; junos:must-message "routing-interface can be configured only under routing-instance with 'vlan-id' or 'vlan-tags'"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Routing interface name for this routing-instance"; } container vxlan { junos:must "((". ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || (". ingress-node-replication" || ("routing-instances ${instance} switch-options ovsdb-managed" || "routing-instances ${instance} protocols evpn encapsulation vxlan"))))))"; junos:must-message "multicast-group or multicast-v6-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan should be enabled. ingress-node-replication must be configured when remote-vtep-list is configured"; junos:must "((". ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || "routing-instances ${instance} protocols evpn encapsulation vxlan")))))))"; junos:must-message "One of multicast-group or multicast-v6-group or ovsdb-managed or protocols evpn encapsulation vxlan or remote-vtep-list or remote-vtep-v6-list should be enabled"; junos:must "((".. vlan-id" || (".. instance-type vpls" || (".. instance-type evpn" && ".. vxlan decapsulate-accept-inner-vlan"))))"; junos:must-message "decapsulate-accept-inner-vlan must be configured when vlan-id is not present for evpn vxlan"; junos:must "((".. vlan-id" || (".. instance-type vpls" || (".. instance-type evpn" && ".. vxlan encapsulate-inner-vlan"))))"; junos:must-message "encapsulate-inner-vlan must be configured when vlan-id is not present for evpn vxlan"; junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))"; junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "(!(".. instance-type mac-vrf"))"; junos:must-message "vxlan must be configured within bridge-domains for 'instance-type mac-vrf'"; junos:must "(!(".. instance-type virtual-switch"))"; junos:must-message "vxlan must be configured within bridge-domains for 'instance-type virtual-switch'"; junos:must "((".. instance-type vpls" || ".. instance-type evpn"))"; junos:must-message "vxlan in routing-instance is valid only for instance-type vpls or evpn"; junos:must "("routing-instances ${instance} vtep-source-interface")"; junos:must-message "vtep-source-interface is required for VXLAN configuration"; description "VXLAN options"; uses apply-advanced; leaf ovsdb-managed { junos:must "(!(("routing-instances ${instance} remote-vtep-list" || ".. multicast-group")))"; junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group"; type empty; description "Managed remotely via VXLAN OVSDB Controller"; } leaf vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777214"; } } description "VXLAN identifier"; } leaf translation-vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777214"; } } description "Translated VXLAN identifier"; } leaf multicast-group { junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. ovsdb-managed" || (".. multicast-v6-group" || "routing-instances ${instance} switch-options ovsdb-managed")))))"; junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed or multicast-v6-group"; type jt:ipv4addr; description "Multicast group registered for VXLAN segment"; } leaf multicast-v6-group { junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. ovsdb-managed" || (".. multicast-group" || "routing-instances ${instance} switch-options ovsdb-managed")))))"; junos:must-message "multicast-v6-group not valid with remote-vtep-list or ovsdb-managed or multicast-group"; type jt:ipv6addr; description "Multicast IPv6 group registered for VXLAN segment"; } leaf encapsulate-inner-vlan { junos:must "(!(".. .. vlan-id none"))"; junos:must-message "encapsulate inner vlan not valid with vlan-id none "; type empty; description "Retain inner VLAN in the packet"; } leaf decapsulate-accept-inner-vlan { junos:must "(!(".. .. vlan-id none"))"; junos:must-message "accept inner vlan not valid with vlan-id none"; type empty; description "Accept VXLAN packets with inner VLAN"; } leaf unreachable-vtep-aging-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "300 .. 1800"; } } units "seconds"; description "Unreachable VXLAN tunnel endpoint removal timer"; } leaf ingress-node-replication { junos:must "(!(".. .. .. .. protocols evpn assisted-replication"))"; junos:must-message "ingress-node-replication cannot be configured with assisted-replication"; junos:must "((".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || "routing-instances ${instance} protocols evpn encapsulation vxlan")))))"; junos:must-message "Valid for ovsdb-managed instance or with remote-vtep-list or remote-vtep-v6-list or evpn vxlan"; type empty; description "Enable ingress node replication"; } } // container vxlan leaf no-local-switching { junos:must "((".. instance-type vpls" || ((".. instance-type evpn" && ".. protocols vpls") || ".. instance-type l2backhaul-vpn")))"; junos:must-message "'no-local-switching' statement can be configured only for VPLS instances"; type empty; description "Disable local switching within CE-facing interfaces"; } leaf no-normalization { type empty; description "Disable vlan id normalization for interfaces"; } leaf qualified-bum-pruning-mode { junos:must "((".. instance-type vpls" || (".. instance-type evpn" && ".. protocols vpls")))"; junos:must-message "'bum-pruning-mode' statement can be configured only for VPLS instances!"; type empty; description "Enable BUM pruning for VPLS instance"; } leaf no-irb-layer-2-copy { junos:must "((".. routing-interface" || ".. l3-interface"))"; junos:must-message "routing-interface/l3-interface must be configured for this feature"; type empty; description "Disable transmission of layer-2 copy of packets of irb routing-interface"; } leaf connector-id-advertise { type empty; description "Advertise connector-id attribute"; } container forwarding-options { description "Forwarding options configuration"; uses juniper-forwarding-options; } // container forwarding-options container bridge-domains { junos:must "((".. instance-type virtual-switch" || ".. instance-type mac-vrf"))"; junos:must-message "'bridge-domains' configuration can only be used for 'instance-type virtual-switch' or 'instance-type mac-vrf'"; junos:must "(!("vlans"))"; junos:must-message "BDs cannot be configured when VLANs are configured"; description "Bridge domain configuration"; uses apply-advanced; list domain { key "name"; uses juniper-bridge-domains; } // list domain } // container bridge-domains container switch-options { junos:must "(".. instance-type virtual-switch")"; junos:must-message "This configuration is allowed for only 'instance-type virtual-switch'"; description "L2 options for routing-instance of type virtual-switch"; uses juniper-routing-instance-switch-options; } // container switch-options leaf service-type { junos:must "(".. instance-type mac-vrf")"; junos:must-message "service-type config is allowed for instance type mac-vrf only"; type enumeration { enum "vlan-based" { value 0; description "Instance service type vlan-based"; } enum "vlan-bundle" { value 1; description "Instance service type vlan-bundle"; } enum "vlan-aware" { value 2; description "Instance service type vlan-aware"; } } description "Sevice type"; } list interface { key "name"; description "Interface name for this routing instance"; leaf name { junos:must "((!("interfaces $$-IFL etree-ac-role") || ".. .. protocols evpn evpn-etree"))"; junos:must-message "etree must be enabled under routing-instance"; junos:must "(!(("interfaces $$-IFL family bridge interface-mode" && ".. .. instance-type evpn")))"; junos:must-message "access/trunk interfaces are not allowed in evpn instance"; junos:must "((!(("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-tags inner-list")) || !((".. .. vlan-id" || ".. .. vlan-tags"))))"; junos:must-message "interface with vlan-id-list/inner-list cannot be added to routing-instance with a vlan-id/vlan-tags configured"; junos:must "((!(("interfaces $$-IFL family bridge interface-mode" || "interfaces $$-IFL family ethernet-switching")) || (".. .. instance-type virtual-switch" || ".. .. instance-type mac-vrf")))"; junos:must-message "Interface with 'interface-mode' is allowed only in a virtual-switch or mac-vrf instance"; junos:must "((!(".. .. instance-type virtual-switch") || ("interfaces $$-IFL family bridge interface-mode" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Only interface with 'interface-mode' is allowed in a virtual-switch"; junos:must "(!(".. .. .. routing-instances bridge-domains interfaces $$"))"; junos:must-message "The interface cannot be defined both at routing-instance and bridge-domain level"; junos:must "((!("interfaces $$-IFL vlan-id-range") || (".. .. instance-type vpls" || ".. .. instance-type evpn")))"; junos:must-message "vlan-id-range is specified for this logical interface; the routing instance must be of type vpls or evpn"; junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || (".. .. vlan-id inner-all" || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))))"; junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured"; junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))"; junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled"; type string; } uses apply-advanced; choice mode { leaf any { type empty; description "Interface used for both unicast and multicast traffic"; } leaf unicast { type empty; description "Interface used for unicast traffic only"; } leaf multicast { type empty; description "Interface used for multicast traffic only"; } } // choice mode leaf primary { junos:must "(!(".. unicast"))"; junos:must-message "'primary' option can not be configured for unicast interface"; junos:must "((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))"; junos:must-message "'primary' option can only be configured for instance-type 'vrf' or 'mpls-internet-multicast'"; type empty; description "Preferred multicast vt interface for the routing-instance"; } leaf protect-interface { junos:must "("interfaces $$")"; junos:must-message "Interface must be part of this routing instance"; junos:must "(!("interfaces ${inter_name} esi"))"; junos:must-message "ESI can not be configured for protect interface"; junos:must "("routing-instances ${instance} protocols evpn")"; junos:must-message "Protocol EVPN must be configured in the evpn instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } } // list interface container route-distinguisher { description "Route distinguisher for this instance"; leaf rd-type { type string { junos:posix-pattern "^[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100"; } description "Number in (16 bit:32 bit) or (32 bit 'L':16 bit) or (IP address:16 bit) format"; } } // container route-distinguisher leaf-list vrf-import { type jt:policy-algebra; ordered-by user; description "Import policy for VRF instance RIBs"; } leaf-list vrf-export { type jt:policy-algebra; ordered-by user; description "Export policy for VRF instance RIBs"; } container vrf-target { description "VRF target community configuration"; uses apply-advanced; leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use in import and export"; } leaf import { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when filtering on import"; } leaf export { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when marking routes on export"; } leaf auto { junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || ".. .. instance-type mac-vrf")))"; junos:must-message "vrf-target auto is meant only for evpn or virtual-switch instance or mac-vrf"; type empty; description "Auto derive import and export target community from BGP AS & L2"; } } // container vrf-target leaf no-vrf-advertise { type empty; description "Don't advertise this instance to remote PEs"; } leaf non-forwarding-vrf { junos:must "(".. provider-tunnel inter-as")"; junos:must-message "Inter-AS segmented p-tunnel configuration is required"; type empty; description "Don't create VRF forwarding table for local or transit routes belonging to this VPN"; } container vrf-advertise-selective { junos:must "(!(".. no-vrf-advertise"))"; junos:must-message "Selective vrf advertise cannot be used with no-vrf-advertise knob"; presence "enable vrf-advertise-selective"; description "Override no-vrf-advertise knob for the specified address family"; uses apply-advanced; container family { description "Protocol family to be selectively advertised"; uses apply-advanced; leaf inet-mvpn { type empty; description "IPv4 MVPN Address Family"; } leaf inet6-mvpn { type empty; description "IPv6 MVPN Address Family"; } } // container family } // container vrf-advertise-selective container vrf-table-label { presence "enable vrf-table-label"; description "Advertise a single VPN label for all routes in the VRF"; leaf static { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Specify label value to be used"; } leaf source-class-usage { type empty; description "Enable source class usage"; } } // container vrf-table-label choice vrf-propagate-ttl-or-no-vrf-propagate-ttl { leaf no-vrf-propagate-ttl { type empty; description "Disable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)"; } leaf vrf-propagate-ttl { type empty; description "Enable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)"; } } // choice vrf-propagate-ttl-or-no-vrf-propagate-ttl container provider-tunnel { junos:must "(!((". inter-as" && ". selective")))"; junos:must-message "Selective p-tunnel configuration not allowed on ASBR"; junos:must "(!((" .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))"; junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf"; junos:must "((!(".. non-forwarding-vrf") || ". inter-as"))"; junos:must-message "Non-forwarding VRF can only be configured with Inter-AS segmented p-tunnels"; description "Provider tunnel configuration"; uses apply-advanced; container external-controller { junos:must "((".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast")))"; junos:must-message "External point-to-multipoint LSP provider can be configured only for MVPN instances"; description "External point-to-multipoint LSP provider for flooding"; uses apply-advanced; choice external-provider { leaf pccd { type empty; description "Use PCCD for external point-to-multipoint LSP computation entity"; } } // choice external-provider } // container external-controller choice tunnel-type { container rsvp-te { junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn encapsulation vxlan")))"; junos:must-message "P2MP Provider Tunnels are not allowed for VxLAN encapsulation"; junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn pbb-evpn-core")))"; junos:must-message "P2MP Provider Tunnels are not allowed for PBB-EVPN"; junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || (".. .. instance-type vpls" || (".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))))))"; junos:must-message "Point-to-multipoint LSPs can be configured only for EVPN, VPLS or MVPN instances"; junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "(!((".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))"; junos:must-message "Static LSPs are not allowed for EVPN instances"; junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. instance-type evpn" || (".. .. instance-type virtual-switch" || (".. .. protocols mvpn" && (".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast")))))"; junos:must-message "LDP P2MP LSPs can be configured only for EVPN or MVPN instances"; junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn encapsulation vxlan")))"; junos:must-message "P2MP Provider Tunnels are not allowed for VxLAN encapsulation"; junos:must "(!(((".. .. instance-type evpn" || ".. .. instance-type virtual-switch") && ".. .. protocols evpn pbb-evpn-core")))"; junos:must-message "P2MP Provider Tunnels are not allowed for PBB-EVPN"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container ingress-replication { junos:must "(((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast") && ".. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances"; junos:must "(!(".. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container pim-asm { junos:must "(!(".. .. protocols mvpn sender-based-rpf"))"; junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SM must be configured in the master instance"; junos:must "(".. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SM provider tunnel group address"; } container family { presence "enable family"; status deprecated; description "PIM-SM provider tunnel address family"; uses apply-advanced; container inet { presence "enable inet"; description "IPv4 PIM-SM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SM provider tunnel group address for IPV4"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container inet container inet6 { presence "enable inet6"; description "IPv6 PIM-SM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SM provider tunnel group address for IPV6"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container inet6 } // container family } // container pim-asm container pim-ssm { junos:must "(!(".. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for PIM-SSM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; junos:must "(".. .. protocols mvpn")"; junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances"; junos:must "(".. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SSM provider tunnel group address"; } container family { presence "enable family"; status deprecated; description "PIM-SSM provider tunnel address family"; uses apply-advanced; container inet { presence "enable inet"; description "IPv4 PIM-SSM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SSM provider tunnel group address for IPV4"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container inet container inet6 { presence "enable inet6"; description "IPv6 PIM-SSM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SSM provider tunnel group address for IPV6"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container inet6 } // container family } // container pim-ssm } // choice tunnel-type container inter-as { junos:must "(".. .. non-forwarding-vrf")"; junos:must-message "Inter-as segmented tunnels can only be configured for non-forwarding-vrfs"; junos:must "(!(".. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for inter-as provider tunnels"; junos:must "(".. .. instance-type vrf")"; junos:must-message "Inter-as segmented tunnels can only be configured for VRF instances"; junos:must "(".. .. protocols mvpn")"; junos:must-message "Inter-as segmented tunnels can only be configured for MVPN instances"; description "Inter-AS segmented tunnels"; uses apply-advanced; choice tunnel-type { container ingress-replication { junos:must "(". label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path template must be configured for Inter-AS segmented tunnel"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp } // choice tunnel-type container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out"; uses apply-advanced; leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold rate to trigger segmentation"; } leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented } // container inter-as container inter-region { junos:must "((".. .. instance-type vrf" || ".. .. instance-type mpls-internet-multicast"))"; junos:must-message "Inter-region segmented tunnels can only be configured for VRF or Internet-multicast instances"; junos:must "(!((".. selective" || (".. pim-ssm" || (".. pim-asm" || (".. rsvp-te" || (".. ldp-p2mp" || (".. ingress-replication" || ".. inter-as"))))))))"; junos:must-message "Inter-region on RBR can not be allowed with other tunnel options"; description "Inter-region segmented tunnels"; uses apply-advanced; choice segmented-or-not { leaf template { junos:must "("protocols mvpn inter-region-template template $$")"; junos:must-message "Referenced template doesn't exist"; type string; description "Use inter-region segmentation template"; } leaf no-inter-region-segmentation { type empty; description "Do not participate in inter-region segmentation"; } } // choice segmented-or-not } // container inter-region container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by fan-out factor only"; uses apply-advanced; leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented container selective { junos:must "(".. .. protocols mvpn")"; junos:must-message "Selective tunnels can only be configured for MVPN instances"; description "Selective tunnels"; uses apply-advanced; leaf tunnel-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30000"; } } description "Maximum number of selective tunnels"; } leaf leaf-tunnel-limit-inet { junos:must "(".. .. .. protocols mvpn mvpn-mode rpt-spt")"; junos:must-message "Selective leaf tunnel limit can only be configured for MVPN rpt-spt mode"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15000"; } } description "Maximum number of selective leaf tunnels for v4"; } leaf leaf-tunnel-limit-inet6 { junos:must "(".. .. .. protocols mvpn mvpn-mode rpt-spt")"; junos:must-message "Selective leaf tunnel limit can only be configured for MVPN rpt-spt mode"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15000"; } } description "Maximum number of selective leaf tunnels for v6"; } container wildcard-group-inet { description "IPv4 wilcard group matching any group address"; uses apply-advanced; container wildcard-source { junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")"; junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels"; presence "enable wildcard-source"; description "Use Selective-Tunnel for wildcard-source (*,G) joins"; uses apply-advanced; leaf threshold-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } choice tunnel-type { container ingress-replication { junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances. Sender based RPF is not supported for ingress-replication provider-tunnels"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))"; junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel"; junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container pim-ssm { junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel"; junos:must "(".. .. .. .. .. protocols mvpn")"; junos:must-message ""; junos:must "(".. .. .. .. .. instance-type vrf")"; junos:must-message "PIM-SSM can be configured only for vrf instances"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-range { type jt:ipv4prefix; description "PIM-SSM provider tunnel group range"; } } // container pim-ssm } // choice tunnel-type container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by fan-out factor only"; uses apply-advanced; leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented } // container wildcard-source } // container wildcard-group-inet container wildcard-group-inet6 { description "IPv6 wilcard group matching any group address"; uses apply-advanced; container wildcard-source { junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")"; junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels"; presence "enable wildcard-source"; description "Use Selective-Tunnel for wildcard-source (*,G) joins"; uses apply-advanced; leaf threshold-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } choice tunnel-type { container ingress-replication { junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))"; junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel"; junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container pim-ssm { junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel"; junos:must "(".. .. .. .. .. protocols mvpn")"; junos:must-message ""; junos:must "(".. .. .. .. .. instance-type vrf")"; junos:must-message "PIM-SSM can be configured only for vrf instances"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-range { type jt:ipv4prefix; description "PIM-SSM provider tunnel group range"; } } // container pim-ssm } // choice tunnel-type container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by fan-out factor only"; uses apply-advanced; leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented } // container wildcard-source } // container wildcard-group-inet6 list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; container wildcard-source { junos:must "(".. .. .. .. protocols mvpn mvpn-mode rpt-spt")"; junos:must-message "MVPN instance needs to be in rpt-spt mode while configuring wildcard-source for selective provider tunnels"; presence "enable wildcard-source"; description "Use Selective-Tunnel for wildcard-source (*,G) joins"; uses apply-advanced; leaf threshold-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } choice tunnel-type { container ingress-replication { junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances."; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))"; junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel"; junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container pim-ssm { junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel"; junos:must "(".. .. .. .. .. protocols mvpn")"; junos:must-message ""; junos:must "(".. .. .. .. .. instance-type vrf")"; junos:must-message "PIM-SSM can be configured only for vrf instances"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-range { type jt:ipv4prefix; description "PIM-SSM provider tunnel group range"; } } // container pim-ssm } // choice tunnel-type container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out"; uses apply-advanced; leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold rate to trigger segmentation"; } leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented } // container wildcard-source list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources"; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; choice tunnel-type { container ingress-replication { junos:must "(((".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "(!(".. .. .. .. .. rsvp-te static-lsp $$"))"; junos:must-message "Referenced point-to-multipoint static LSP configured for inclusive tunnel"; junos:must "(any "protocols mpls label-switched-path <*> p2mp $$")"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container pim-ssm { junos:must "(!(".. .. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support sender based RPF for PIM-SSM provider-tunnel"; junos:must "(".. .. .. .. .. protocols mvpn")"; junos:must-message ""; junos:must "(".. .. .. .. .. instance-type vrf")"; junos:must-message "PIM-SSM can be configured only for vrf instances"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-range { type jt:ipv4prefix; description "PIM-SSM provider tunnel group range"; } } // container pim-ssm container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. .. protocols mvpn" && (".. .. .. .. .. instance-type vrf" || ".. .. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp } // choice tunnel-type leaf threshold-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } container inter-region-segmented { junos:must "(!((".. pim-ssm" || ".. pim-asm")))"; junos:must-message "Inter-region-segmented cannot be set for PIM tunnel"; description "Inter-Region Segmented LSP triggered by threshold rate and/or fan-out"; uses apply-advanced; leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1000000"; } } units "kilobits"; description "Data threshold rate to trigger segmentation"; } leaf fan-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Number of remote Leaf-AD routes"; } } // container inter-region-segmented } // list source } // list group } // container selective container mdt { junos:must "(".. .. protocols pim mvpn")"; junos:must-message "Data MDT tunnels can only be configured for PIM MVPN instances"; status deprecated; description "Data MDT tunnels for PIM MVPN"; uses apply-advanced; container threshold { description "Threshold for creation of multicast tunnels"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources "; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } } // list source } // list group } // container threshold leaf data-mdt-reuse { type empty; description "Allow multiple customer streams to be transmitted over one data tunnel "; } leaf tunnel-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Maximum multicast data tunnels"; } leaf group-range { type jt:ipprefix; description "Group address range for multicast data tunnels"; } } // container mdt container family { presence "enable family"; uses apply-advanced; container inet { junos:must "(!((" .. .. .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))"; junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf"; presence "enable inet"; uses apply-advanced; choice tunnel-type { container rsvp-te { junos:must "((".. .. .. .. instance-type vpls" || (".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast"))))"; junos:must-message "Point-to-multipoint LSPs can be configured only for VPLS or MVPN instances"; junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for valid MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container ingress-replication { junos:must "(((".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances"; junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container pim-asm { junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SM must be configured in the master instance"; junos:must "(".. .. .. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SM provider tunnel group address"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container pim-asm container pim-ssm { junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "this release does not support sender based RPF for PIM-SSM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; junos:must "(".. .. .. .. protocols mvpn")"; junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances"; junos:must "(".. .. .. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SSM provider tunnel group address"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container pim-ssm } // choice tunnel-type container mdt { junos:must "(".. .. .. .. protocols pim mvpn")"; junos:must-message "Data MDT tunnels can only be configured for PIM MVPN instances"; description "IPv4 Data MDT tunnels for PIM MVPN"; uses apply-advanced; container threshold { description "Threshold for creation of multicast tunnels"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources "; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } } // list source } // list group } // container threshold leaf data-mdt-reuse { type empty; description "Allow multiple customer streams to be transmitted over one data tunnel "; } leaf tunnel-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Maximum multicast data tunnels"; } leaf group-range { type jt:ipprefix; description "Group address range for multicast data tunnels"; } } // container mdt } // container inet container inet6 { junos:must "(!((" .. .. .. non-forwarding-vrf" && (". rsvp-te" || (". pim-asm" || (". pim-ssm" || ". ldp-p2mp"))))))"; junos:must-message "Inclusive p-tunnel configuration not allowed on ASBR with non-forwarding-vrf"; presence "enable inet6"; uses apply-advanced; choice tunnel-type { container rsvp-te { junos:must "((".. .. .. .. instance-type vpls" || (".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast"))))"; junos:must-message "Point-to-multipoint LSPs can be configured only for VPLS or MVPN instances"; junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { junos:must "((any "protocols mpls label-switched-path <*> p2mp $$" || ".. .. .. instance-type vpls"))"; junos:must-message "Referenced point-to-multipoint static LSP does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; junos:must "((".. .. .. .. protocols mvpn" && (".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast")))"; junos:must-message "LDP P2MP LSPs can be configured only for valid MVPN instances"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container ingress-replication { junos:must "(((".. .. .. .. instance-type vrf" || ".. .. .. .. instance-type mpls-internet-multicast") && ".. .. .. .. protocols mvpn"))"; junos:must-message "Ingress Replication can be configured only for MVPN instances"; junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "This release does not support Sender based RPF for inclusive ingress replication provider tunnels"; description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication container pim-asm { junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "this release does not support sender based RPF for PIM-SM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SM must be configured in the master instance"; junos:must "(".. .. .. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SM provider tunnel group address"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container pim-asm container pim-ssm { junos:must "(!(".. .. .. .. protocols mvpn sender-based-rpf"))"; junos:must-message "this release does not support sender based RPF for PIM-SSM provider tunnels"; junos:must "(!("protocols pim mpls-internet-multicast"))"; junos:must-message "mpls-internet-multicast must not be configured"; junos:must "("protocols pim")"; junos:must-message "PIM-SSM must be configured in the master instance"; junos:must "(".. .. .. .. protocols mvpn")"; junos:must-message "PIM-SSM provider tunnel can be configured only for multicast VPN instances"; junos:must "(".. .. .. .. instance-type vrf")"; junos:must-message "PIM-SM must be configured only for vrf instances"; description "PIM-SSM provider tunnel"; uses apply-advanced; leaf group-address { type jt:ipv4addr; description "PIM-SSM provider tunnel group address"; } leaf tunnel-source { type jt:ipv4addr; description "Source address for the provider space mGRE tunnel"; } } // container pim-ssm } // choice tunnel-type container mdt { junos:must "(".. .. .. .. protocols pim mvpn")"; junos:must-message "Data MDT tunnels can only be configured for PIM MVPN instances"; description "IPv6 Data MDT tunnels for PIM MVPN"; uses apply-advanced; container threshold { description "Threshold for creation of multicast tunnels"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources "; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } } // list source } // list group } // container threshold leaf data-mdt-reuse { type empty; description "Allow multiple customer streams to be transmitted over one data tunnel "; } leaf tunnel-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Maximum multicast data tunnels"; } leaf group-range { type jt:ipprefix; description "Group address range for multicast data tunnels"; } } // container mdt } // container inet6 } // container family } // container provider-tunnel container multicast-snooping-options { junos:must "((".. instance-type vpls" || (".. instance-type evpn" || (".. instance-type virtual-switch " || ".. instance-type mac-vrf "))))"; junos:must-message "multicast-snooping-options configuration is allowed only for 'instance-type vpls/evpn or instance-type virtual-switch/mac-vrf'"; description "Multicast snooping option configuration"; uses juniper-multicast-snooping-options; } // container multicast-snooping-options container mld-snooping-options { junos:must "((".. instance-type vpls" || (".. instance-type virtual-switch" || (".. instance-type evpn" && ".. protocols vpls"))))"; junos:must-message "mld-snooping-options configuration is allowed only for 'instance-type vpls or instance-type virtual-switch'"; description "MLD snooping option configuration"; uses juniper-mld-snooping-options; } // container mld-snooping-options container vlans { junos:must "((".. instance-type virtual-switch" || ".. instance-type mac-vrf"))"; junos:must-message "'vlans' configuration can only be used for 'instance-type virtual-switch' or 'instance-type mac-vrf'"; junos:must "(!("bridge-domains"))"; junos:must-message "VLANs cannot be configured when BDs are configured"; description "VLAN configuration"; uses apply-advanced; list vlan { key "name"; description "Virtual LAN"; uses vlan-types; } // list vlan } // container vlans } // grouping juniper-routing-instance grouping address-assignment-type { description "Address assignment configuration"; uses apply-advanced; container neighbor-discovery-router-advertisement { description "Designated NDRA pool for this instance"; leaf ndra-name { junos:must "(".. .. pool $$ family inet6")"; junos:must-message "designated NDRA pool must be configured and family inet6 must be set"; type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Designated NDRA pool name"; } } // container neighbor-discovery-router-advertisement leaf high-utilization { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "2 .. 99"; } } description "Generate an SNMP trap when address pool use surpasses this percentage"; } leaf abated-utilization { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 98"; } } description "Generate an SNMP clear trap when address pool use falls below this percentage"; } leaf high-utilization-v6 { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "2 .. 99"; } } description "Generate an SNMP trap when address pool use surpasses this percentage"; } leaf abated-utilization-v6 { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 98"; } } description "Generate an SNMP clear trap when address pool use falls below this percentage"; } list pool { key "name"; ordered-by user; description "Address pool"; leaf name { junos:must "(!(".. link $$"))"; junos:must-message "Link cannot be self referential"; type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Address pool name"; } uses apply-advanced; leaf active-drain { type empty; description "Notify client of pool active drain mode"; } leaf hold-down { type empty; description "Place pool in passive drain mode"; } leaf link { junos:must "(".. .. pool $$")"; junos:must-message "Link must be to a valid pool name"; type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Address pool link name"; } container family { presence "enable family"; description "Address family"; choice family_type { container inet { presence "enable inet"; description "IPv4"; uses apply-advanced; leaf network { type jt:ipv4prefix; description "Network address"; } list range { key "name"; ordered-by user; description "Address range"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Range name"; } uses apply-advanced; leaf low { type jt:ipv4addr; description "Lower limit of address range"; } leaf high { type jt:ipv4addr; description "Upper limit of address range"; } } // list range container dhcp-attributes { description "DHCP options and match criteria"; uses dhcp-attribute-type; } // container dhcp-attributes container xauth-attributes { description "Configure xauth attributes"; uses apply-advanced; leaf primary-dns { type jt:ipv4prefix; description "Specify the primary-dns IP address"; } leaf secondary-dns { type jt:ipv4prefix; description "Specify the secondary-dns IP address"; } leaf primary-wins { type jt:ipv4prefix; description "Specify the primary-wins IP address"; } leaf secondary-wins { type jt:ipv4prefix; description "Specify the secondary-wins IP address"; } } // container xauth-attributes list host { key "name"; ordered-by user; description "Hostname for static reservations"; leaf name { junos:must "((".. hardware-address" || ".. user-name"))"; junos:must-message "either host's hardware address or identifier must be set"; type string { length "1 .. 256"; } description "Hostname"; } uses apply-advanced; leaf hardware-address { type jt:mac-addr; description "Hardware address"; } leaf ip-address { type jt:ipv4addr; description "Reserved address"; } choice host-identifier-type { leaf user-name { type empty; description "Set subscriber user name as host identifier"; } } // choice host-identifier-type } // list host list excluded-address { key "name"; max-elements 20; ordered-by user; description "Excluded Addresses"; leaf name { type jt:ipv4addr; description "Excluded address"; } uses apply-advanced; } // list excluded-address list excluded-range { key "name"; max-elements 20; ordered-by user; description "Excluded address range"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Range name"; } uses apply-advanced; leaf low { type jt:ipv4addr; description "Lower limit of excluded address range"; } leaf high { type jt:ipv4addr; description "Upper limit of excluded address range"; } } // list excluded-range } // container inet container inet6 { presence "enable inet6"; description "IPv6"; uses apply-advanced; leaf prefix { type jt:ipv6prefix-mandatory; description "IPv6 network prefix"; } list range { key "name"; ordered-by user; description "IPv6 address range"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Range name"; } uses apply-advanced; leaf low { junos:must "(".. high")"; junos:must-message "range upper bound must be defined"; type jt:ipv6prefix-mandatory; description "Lower limit of ipv6 address range"; } leaf high { junos:must "(".. low")"; junos:must-message "range lower bound must be defined"; type jt:ipv6prefix-mandatory; description "Upper limit of ipv6 address range"; } leaf prefix-length { junos:must "(!(".. low"))"; junos:must-message "range lower bound may not be defined"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 128"; } } description "IPv6 delegated prefix length"; } } // list range container dhcp-attributes { description "DHCP options and match criteria"; uses dhcp-attribute-type; } // container dhcp-attributes container xauth-attributes { description "Configure xauth ipv6 attributes"; uses apply-advanced; leaf primary-dns-ipv6 { type jt:ipv6addr; description "Specify the primary-dns IPv6 address"; } leaf secondary-dns-ipv6 { type jt:ipv6addr; description "Specify the secondary-dns IPv6 address"; } } // container xauth-attributes list host { key "name"; ordered-by user; description "Hostname for static reservations"; leaf name { junos:must "((".. hardware-address" || ".. user-name"))"; junos:must-message "either host's hardware address or identifier must be set"; type string { length "1 .. 256"; } description "Hostname"; } uses apply-advanced; leaf hardware-address { type jt:mac-addr; description "Hardware address"; } leaf ip-address { type jt:ipv6addr; description "Reserved address"; } choice host-identifier-type { leaf user-name { type empty; description "Set subscriber user name as host identifier"; } } // choice host-identifier-type } // list host list excluded-address { key "name"; max-elements 20; ordered-by user; description "Excluded Addresses"; leaf name { type jt:ipv6addr; description "Excluded address"; } uses apply-advanced; } // list excluded-address list excluded-range { key "name"; max-elements 20; ordered-by user; description "Excluded address range"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]{0,62}$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of no more than 63 total letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Range name"; } uses apply-advanced; leaf low { type jt:ipv6addr; description "Lower limit of excluded address range"; } leaf high { type jt:ipv6addr; description "Upper limit of excluded address range"; } } // list excluded-range } // container inet6 } // choice family_type } // container family } // list pool list domain-profile { key "name"; ordered-by user; description "Address domain profile"; leaf name { type string { length "1 .. 63"; } description "Pool domain profile name"; } uses apply-advanced; container family { description "Network family to which this configuration belongs"; uses apply-advanced; container inet { description "The IPv4 internet family"; uses apply-advanced; leaf preferred-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "8 .. 30"; } } description "Preferred prefix length"; } leaf source-partition-qualifier { type string { length "1 .. 63"; } description "Prefix source qualifier appended to location for partition name"; } container excluded-address { description "Excluded addresses from allocation"; leaf-list last-octet { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 255"; } } ordered-by user; description "Last octet of the excluded address"; } } // container excluded-address leaf install-discard-routes { type empty; description "Install discard route domain pool prefix"; } leaf dhcp-router-host-part { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 8"; } } description "DHCP host address component to be excluded and passed to DHCP"; } leaf protocol-attributes { junos:must "("access protocol-attributes $$")"; junos:must-message "referenced protocol-attributes must be defined"; type string { length "1 .. 63"; } description "Access protocol-attributes name"; } } // container inet } // container family } // list domain-profile } // grouping address-assignment-type grouping dhcp-attribute-type { uses apply-advanced; container option-match { description "Match"; uses apply-advanced; container option-82 { uses apply-advanced; list circuit-id { key "name"; ordered-by user; description "Circuit ID portion of the option 82"; leaf name { type string; } leaf range { type string; description "Range name"; } } // list circuit-id list remote-id { key "name"; ordered-by user; description "Remote ID portion of the option 82"; leaf name { type string; } leaf range { type string; description "Range name"; } } // list remote-id } // container option-82 } // container option-match leaf maximum-lease-time { type string; units "seconds"; description "Maximum lease time advertised to clients"; } leaf server-identifier { type jt:ipv4addr; description "Server Identifier - IP address value"; } leaf grace-period { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Grace period for leases"; } leaf domain-name { type string { junos:posix-pattern "^[[:alnum:]._-]+$"; junos:pattern-message "Must be a string of letters, numbers, dashes or underscores"; } description "Domain name advertised to clients"; } list name-server { key "name"; ordered-by user; description "Domain name servers available to the client"; leaf name { type jt:ipv4addr; description "DNS server's IPv4 address"; } uses apply-advanced; } // list name-server list wins-server { key "name"; ordered-by user; description "WINS name servers"; leaf name { type jt:ipv4addr; description "WINS server's IPv4 address"; } uses apply-advanced; } // list wins-server list router { key "name"; ordered-by user; description "Routers advertised to clients"; leaf name { type jt:ipv4addr; description "Router's IPv4 address"; } uses apply-advanced; } // list router leaf boot-file { type string; description "Boot filename advertised to clients"; } leaf boot-server { type string { junos:posix-pattern "^[[:alnum:]._-]+$"; junos:pattern-message "Must be a string of letters, numbers, dashes or underscores"; } description "Boot server advertised to clients"; } leaf tftp-server { type jt:ipv4addr; description "TFTP server IP address advertised to clients"; } leaf netbios-node-type { type enumeration { enum "b-node" { value 0; description "Broadcast node"; } enum "p-node" { value 1; description "Peer-to-peer node"; } enum "m-node" { value 2; description "Mixed Node"; } enum "h-node" { value 3; description "Hybrid node"; } } description "Type of NETBIOS node advertised to clients"; } leaf sip-server-domain-name { type string { junos:posix-pattern "^[[:alnum:]._-]+$"; junos:pattern-message "Must be a string of letters, numbers, dashes or underscores"; } description "SIP server domain name available to clients"; } list sip-server-address { key "name"; ordered-by user; description "SIP Servers list of IPv6 addresses available to the client"; leaf name { type jt:ipv6addr; description "SIP Server's IPv6 address"; } uses apply-advanced; } // list sip-server-address list dns-server { key "name"; ordered-by user; description "Domain name servers available to the client"; leaf name { type jt:ipv6addr; description "DNS server's IPv6 address"; } uses apply-advanced; } // list dns-server list option { key "name"; ordered-by user; description "DHCP option"; leaf name { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "DHCP option identifier code"; } choice option-type-choice { leaf flag { type enumeration { enum "true" { value 0; description "True value"; } enum "false" { value 1; description "False value"; } enum "on" { value 2; description "On value"; } enum "off" { value 3; description "Off value"; } } description "Boolean flag value"; } leaf byte { type union { type uint8; type string { pattern "<.*>|$.*"; } } description "Unsigned 8-bit value"; } leaf short { type union { type int16; type string { pattern "<.*>|$.*"; } } description "Signed 16-bit numeric value"; } leaf unsigned-short { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Unsigned 16-bit numeric value"; } leaf integer { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Signed 32-bit numeric value"; } leaf unsigned-integer { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Unsigned 32-bit numeric value"; } leaf hex-string { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 510"; } description "Hexadecimal string"; } leaf string { type string { length "1 .. 254"; } description "Character string value"; } leaf ip-address { type jt:ipv4addr; description "IP address value"; } leaf ipv6-address { type jt:ipv6addr; description "IPV6 address value"; } container array { presence "enable array"; description "Array of values"; uses apply-advanced; choice option-type-array-choice { leaf-list flag { type enumeration { enum "true" { value 0; description "True value"; } enum "false" { value 1; description "False value"; } enum "on" { value 2; description "On value"; } enum "off" { value 3; description "Off value"; } } ordered-by user; description "Array of boolean flag values"; } leaf-list byte { type union { type uint8; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Array of unsigned 8-bit values"; } leaf-list short { type union { type int16; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Array of signed 16-bit numeric values"; } leaf-list unsigned-short { type union { type uint16; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Array of 16-bit numeric values"; } leaf-list integer { type union { type int32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Array of signed 32-bit numeric values"; } leaf-list unsigned-integer { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Array of unsigned 32-bit numeric values"; } leaf-list hex-string { type string { length "1 .. 510"; } ordered-by user; description "Hexadecimal string"; } leaf-list string { type string { length "1 .. 254"; } ordered-by user; description "Array of character string values"; } leaf-list ip-address { type jt:ipv4addr; ordered-by user; description "Array of IP address values"; } leaf-list ipv6-address { type jt:ipv6addr; ordered-by user; description "Array of IPv6 address values"; } } // choice option-type-array-choice } // container array } // choice option-type-choice } // list option leaf valid-lifetime { junos:must "(!(".. maximum-lease-time"))"; junos:must-message "'valid-lifetime' statement cannot be included along with 'maximum-lease-time'"; type string; units "seconds"; description "Valid lifetime advertised to clients"; } leaf preferred-lifetime { junos:must "(!(".. maximum-lease-time"))"; junos:must-message "'preferred-lifetime' statement cannot be included along with 'maximum-lease-time'"; type string; units "seconds"; description "Preferred lifetime advertised to clients"; } leaf t1-percentage { junos:must "(!(".. t2-rebinding-time"))"; junos:must-message "T1 must be configured in seconds to match T2"; junos:must "(!(".. t1-renewal-time"))"; junos:must-message "T1 time in seconds already configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; description "T1 time as percentage of preferred lifetime or max lease"; } leaf t2-percentage { junos:must "(!(".. t1-renewal-time"))"; junos:must-message "T2 must be configured in seconds to match T1"; junos:must "(!(".. t2-rebinding-time"))"; junos:must-message "T2 time in seconds already configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; description "T2 time as percentage of preferred lifetime or max lease"; } leaf exclude-prefix-len { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 128"; } } description "Length of IPv6 prefix to be excluded from delegated prefix"; } leaf t1-renewal-time { junos:must "(!(".. t2-percentage"))"; junos:must-message "T1 must be configured as percentage to match T2"; junos:must "(!(".. t1-percentage"))"; junos:must-message "T1 time as percentage already configured"; type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "T1 renewal time"; } leaf t2-rebinding-time { junos:must "(!(".. t1-percentage"))"; junos:must-message "T2 must be configured as percentage to match T1"; type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "T2 rebinding time"; } } // grouping dhcp-attribute-type grouping jdhcp-local-server-type { uses apply-advanced; container traceoptions { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "Incompatible with 'forwarding-options helpers bootp'"; junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with 'set system services dhcp'"; status deprecated; description "DHCP local server trace options"; uses jdhcp-traceoptions-type; } // container traceoptions container interface-traceoptions { status deprecated; description "DHCP local server interface trace options"; uses jdhcp-interface-traceoptions-type; } // container interface-traceoptions container dhcpv6 { description "DHCPv6 configuration"; uses dhcpv6-local-server-type; } // container dhcpv6 list pool-match-order { key "name"; ordered-by user; description "Define order of attribute matching for pool selection"; leaf name { type enumeration { enum "external-authority" { value 0; description "External authority handles address selection"; } enum "ip-address-first" { value 1; description "IP address used first to select a pool"; } enum "option-82" { value 2; description "Option 82 used in matching of pool"; } enum "option-82-strict" { value 3; description "Option 82 used in strict matching of pool"; } } description "Match type"; } uses apply-advanced; } // list pool-match-order leaf duplicate-clients-on-interface { type empty; status deprecated; description "Allow duplicate clients on different interfaces in a subnet"; } container duplicate-clients-in-subnet { junos:must "(!(".. duplicate-clients-on-interface"))"; junos:must-message "Cannot specify duplicate-clients-in-subnet with duplicate-clients-on-interface"; description "Allow duplicate clients in a subnet"; uses jdhcp-duplicate-clients-in-subnet-type; } // container duplicate-clients-in-subnet container forward-snooped-clients { junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))"; junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured"; description "Forward snooped (unicast) packets"; choice interface-type { leaf configured-interfaces { type empty; description "Forward snooped (unicast) packets on configured interfaces"; } leaf non-configured-interfaces { type empty; description "Forward snooped (unicast) packets on non-configured interfaces"; } leaf all-interfaces { type empty; description "Forward snooped (unicast) packets on configured and non-configured interfaces"; } } // choice interface-type } // container forward-snooped-clients container authentication { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'authentication' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "DHCP authentication"; uses authentication-type; } // container authentication container liveness-detection { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'liveness-detection' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-type; } // container liveness-detection container reconfigure { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'reconfigure' statement cannot be included along with 'forwarding-options helpers bootp' statement"; presence "enable reconfigure"; description "DHCP reconfigure processing"; uses reconfigure-type; } // container reconfigure container overrides { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'overrides' statement cannot be included along with 'forwarding-options helpers bootp' statement"; presence "enable overrides"; description "DHCP override processing"; uses override-local-server-type; } // container overrides container dynamic-profile { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'dynamic-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'access-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container route-suppression { junos:must "(!(".. liveness-detection method layer2-liveness-detection"))"; junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection"; junos:must "(!(".. overrides no-arp"))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; description "Suppress access-internal and/or destination route addition"; uses dhcp-route-suppression-type; } // container route-suppression list group { junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'"; junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'group' statement cannot be included along with 'forwarding-options helpers bootp' statement"; key "name"; ordered-by user; description "Define a DHCP local server group"; uses dhcp-local-server-group; } // list group list dual-stack-group { key "name"; description "Define a DHCP dual stack group"; uses dhcp-local-server-dual-stack-group; } // list dual-stack-group container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation seconds"; } container violation-action { description "Lease time validation violation action"; choice violation-action-choice { leaf strict { type empty; description "Reject discover and renew"; } leaf override-lease { type empty; description "Override assigned lease time with threshold"; } } // choice violation-action-choice } // container violation-action } // container lease-time-validation choice requested-ip-check { leaf requested-ip-network-match { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 31"; } } default "8"; description "Subnet to match server's address for active and giaddr for passive clients"; } leaf requested-ip-interface-match { type empty; description "Use incoming-interface's subnet to check"; } } // choice requested-ip-check leaf no-snoop { junos:must "(!("legacy-snooping"))"; junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement"; type empty; description "Do not snoop DHCP packets"; } container persistent-storage { description "Trigger to enable flat file storage"; leaf automatic { type empty; description "Trigger automatically"; } } // container persistent-storage container allow-leasequery { presence "enable allow-leasequery"; description "Allow DHCP leasequery"; uses server-leasequery-type; } // container allow-leasequery container remote-id-mismatch { junos:must "(!(".. reauthenticate"))"; junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'"; presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container reauthenticate { junos:must "(!(".. remote-id-mismatch"))"; junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'"; junos:must "((".. authentication" || ".. .. authentication"))"; junos:must-message "'authentication' statement must be included with 'reauthenticate'"; description "DHCP client reauthenticate processing"; leaf lease-renewal { type empty; description "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT"; } leaf remote-id-mismatch { type empty; description "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation"; } } // container reauthenticate container allow-bulk-leasequery { presence "enable allow-bulk-leasequery"; description "Allow DHCP bulk leasequery"; uses server-bulk-leasequery-type; } // container allow-bulk-leasequery container allow-active-leasequery { presence "enable allow-active-leasequery"; description "Allow DHCP active leasequery"; uses server-active-leasequery-type; } // container allow-active-leasequery } // grouping jdhcp-local-server-type grouping authentication-type { description "DHCP authentication"; uses apply-advanced; leaf password { type string { length "1 .. 64"; } description "Username password to use"; } container username-include { description "Add username options"; uses apply-advanced; leaf delimiter { type string { length "1"; } description "Change delimiter/separator character"; } leaf domain-name { type string { length "1 .. 64"; } description "Add domain name"; } leaf user-prefix { type string { length "1 .. 64"; } description "Add user defined prefix"; } leaf mac-address { type empty; description "Include MAC address"; } container option-82 { presence "enable option-82"; description "Include option 82"; leaf circuit-id { type empty; description "Include option 82 circuit-id (sub option 1)"; } leaf remote-id { type empty; description "Include option 82 remote-id (sub option 2)"; } } // container option-82 leaf logical-system-name { type empty; description "Include logical system name"; } leaf routing-instance-name { type empty; description "Include routing instance name"; } container client-id { presence "enable client-id"; description "Include client ID"; leaf exclude-headers { type empty; description "Exclude all the headers"; } leaf use-automatic-ascii-hex-encoding { type empty; description "Use automatic ascii hex username encoding"; } } // container client-id leaf option-60 { type empty; description "Include option 60"; } leaf circuit-type { type empty; description "Include circuit type"; } leaf interface-name { type empty; description "Include interface name"; } leaf interface-description { type enumeration { enum "device" { value 0; description "Add the device interface description"; } enum "logical" { value 1; description "Add the logical interface description"; } } description "Include interface description"; } leaf vlan-tags { type empty; description "Include the vlan tag(s)"; } } // container username-include } // grouping authentication-type grouping dhcp-liveness-detection-type { description "DHCP client liveness detection processing"; uses apply-advanced; container failure-action { description "Liveness detection failure action options"; uses dhcp-liveness-detection-failure-action-type; } // container failure-action container method { description "Liveness detection method options"; uses apply-advanced; choice method-choice { container bfd { description "Bidirectional Forwarding Detection (BFD) options"; uses dhcp-bfd-liveness-detection-type; } // container bfd container layer2-liveness-detection { junos:must "((!(".. .. route-suppression") && (!(".. .. .. route-suppression") && !(".. .. .. .. route-suppression"))))"; junos:must-message "Method not allowed with route-suppression enabled"; description "Address resolution options"; uses dhcp-arp-nud-liveness-detection-type; } // container layer2-liveness-detection } // choice method-choice } // container method } // grouping dhcp-liveness-detection-type grouping dhcp-arp-nud-liveness-detection-type { description "Address Resolution detection options"; uses apply-advanced; leaf transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "300 .. 1800"; } } units "seconds"; default "300"; description "Transmit interval for address resolution"; } leaf max-consecutive-retries { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 6"; } } default "3"; description "Retry attempts"; } } // grouping dhcp-arp-nud-liveness-detection-type grouping dhcp-bfd-liveness-detection-type { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30000 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30000 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30000 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30000 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time leaf session-mode { type enumeration { enum "automatic" { value 0; description "Choose session-mode automatically"; } enum "single-hop" { value 1; description "Use single-hop"; } enum "multihop" { value 2; description "Use multihop"; } } default "automatic"; description "BFD single-hop or multihop session-mode"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; default "0"; description "Time to hold the session-UP notification to the client"; } } // grouping dhcp-bfd-liveness-detection-type grouping dhcp-liveness-detection-failure-action-type { description "Liveness detection failure action options"; uses apply-advanced; choice failure-action-type { leaf clear-binding { type empty; description "Clear the client binding"; } leaf clear-binding-if-interface-up { type empty; description "Clear the client binding only if the incoming interface is up"; } leaf log-only { type empty; description "Maintain the client binding and log the failure event"; } } // choice failure-action-type } // grouping dhcp-liveness-detection-failure-action-type grouping dhcp-local-server-dual-stack-group { description "DHCP dual stack groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Dual stack group name"; } uses apply-advanced; container authentication { description "DHCP authentication"; uses dual-stack-authentication-type; } // container authentication leaf access-profile { type string { length "1 .. 128"; } description "Access profile to be used for jdhcpd"; } container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf on-demand-address-allocation { type empty; description "Allocate addresses on demand"; } container classification-key { junos:must "(".. dynamic-profile")"; junos:must-message "dynamic profile configuration in dual-stack-group is must for configuring classification-type"; description "Classification key for identifying dual stack household"; uses classification-types; } // container classification-key leaf dual-stack-interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of client allowed on an interface"; } container protocol-master { description "Select family as protocol master"; uses jdhcp-dual-stack-protocol-mstr-type; } // container protocol-master container liveness-detection { description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-dualstack-type; } // container liveness-detection container reauthenticate { junos:must "(".. on-demand-address-allocation")"; junos:must-message "'on-demand-address-allocation' statement must be included with 'reauthenticate'"; junos:must "(".. authentication")"; junos:must-message "'authentication' statement must be included with 'reauthenticate'"; description "DHCP client reauthenticate processing"; leaf lease-renewal { type empty; description "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT"; } leaf remote-id-mismatch { type empty; description "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation"; } } // container reauthenticate container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // grouping dhcp-local-server-dual-stack-group grouping classification-types { description "Different mechanisms to identify a single household"; uses apply-advanced; leaf mac-address { type empty; description "MAC address of client"; } leaf circuit-id { type empty; description "Circuit-id as key"; } leaf remote-id { type empty; description "Remote-id as key"; } } // grouping classification-types grouping dhcp-liveness-detection-dualstack-type { description "DHCP client liveness detection processing"; uses apply-advanced; container failure-action { description "Liveness detection failure action options"; uses dhcp-liveness-detection-failure-action-type; } // container failure-action container method { description "Liveness detection method options"; uses apply-advanced; choice method-choice { container layer2-liveness-detection { junos:must "((!(".. .. route-suppression") && (!(".. .. .. route-suppression") && !(".. .. .. .. route-suppression"))))"; junos:must-message "Method not allowed with route-suppression enabled"; description "Address resolution options"; uses dhcp-arp-nud-liveness-detection-type; } // container layer2-liveness-detection } // choice method-choice } // container method } // grouping dhcp-liveness-detection-dualstack-type grouping dhcp-local-server-group { description "DHCP groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container authentication { description "DHCP authentication"; uses authentication-type; } // container authentication container liveness-detection { description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-type; } // container liveness-detection container reconfigure { presence "enable reconfigure"; description "DHCP reconfigure processing"; uses reconfigure-type; } // container reconfigure container overrides { presence "enable overrides"; description "DHCP override processing"; uses override-local-server-type; } // container overrides container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container route-suppression { junos:must "(!(".. liveness-detection method layer2-liveness-detection"))"; junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection"; junos:must "((!(".. overrides no-arp") && !(".. .. overrides no-arp")))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; description "Suppress access-internal and/or destination route addition"; uses dhcp-route-suppression-type; } // container route-suppression list interface { key "name"; description "One or more interfaces"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf upto { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface up to"; } leaf exclude { type empty; description "Exclude this interface range"; } leaf trace { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify tracing with exclude"; type empty; description "Enable tracing for this interface"; } container overrides { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "DHCP override processing"; uses override-local-server-type; } // container overrides container dynamic-profile { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // list interface container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation seconds"; } container violation-action { description "Lease time validation violation action"; choice violation-action-choice { leaf strict { type empty; description "Reject discover and renew"; } leaf override-lease { type empty; description "Override assigned lease time with threshold"; } } // choice violation-action-choice } // container violation-action } // container lease-time-validation container remote-id-mismatch { junos:must "(!(".. reauthenticate"))"; junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'"; presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container reauthenticate { junos:must "(!(".. remote-id-mismatch"))"; junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'"; junos:must "((".. authentication" || ".. .. authentication"))"; junos:must-message "'authentication' statement must be included with 'reauthenticate'"; description "DHCP client reauthenticate processing"; leaf lease-renewal { type empty; description "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT"; } leaf remote-id-mismatch { type empty; description "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation"; } } // container reauthenticate } // grouping dhcp-local-server-group grouping dhcp-remote-id-mismatch-type { description "DHCP client remote-id-mismatch processing"; uses apply-advanced; leaf disconnect { type empty; description "Disconnect session on remote-id mismatch"; } } // grouping dhcp-remote-id-mismatch-type grouping dhcp-route-suppression-type { uses apply-advanced; choice dhcp-route-suppression-choice { leaf access-internal { type empty; description "Suppress access-internal and destination route addition"; } leaf destination { type empty; description "Suppress destination route addition"; } } // choice dhcp-route-suppression-choice } // grouping dhcp-route-suppression-type grouping dhcpv6-local-server-type { uses apply-advanced; container authentication { description "DHCPv6 authentication"; uses dhcpv6-authentication-type; } // container authentication container liveness-detection { description "DHCPv6 client liveness detection processing"; uses dhcpv6-liveness-detection-type; } // container liveness-detection container reconfigure { presence "enable reconfigure"; description "DHCPv6 reconfigure processing"; uses dhcpv6-reconfigure-type; } // container reconfigure container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile container forward-snooped-clients { junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))"; junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured"; description "Forward snooped (unicast) packets"; choice interface-type { leaf configured-interfaces { type empty; description "Forward snooped (unicast) packets on configured interfaces"; } leaf non-configured-interfaces { type empty; description "Forward snooped (unicast) packets on non-configured interfaces"; } leaf all-interfaces { type empty; description "Forward snooped (unicast) packets on configured and non-configured interfaces"; } } // choice interface-type } // container forward-snooped-clients leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container overrides { presence "enable overrides"; description "DHCPv6 override processing"; uses dhcpv6-override-local-server-type; } // container overrides container route-suppression { description "Suppress access-internal and/or access route addition"; uses dhcpv6-route-suppression-type; } // container route-suppression list group { key "name"; ordered-by user; description "Define a DHCPv6 local server group"; uses dhcpv6-local-server-group; } // list group container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation seconds"; } container violation-action { description "Lease time validation violation action"; choice violation-action-choice { leaf strict { type empty; description "Reject solicit and renew"; } leaf override-lease { type empty; description "Override assigned lease time with threshold"; } } // choice violation-action-choice } // container violation-action } // container lease-time-validation choice requested-ip-check { leaf requested-ip-network-match { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } default "16"; description "Subnet to match server's address for active and link-address for passive clients"; } leaf requested-ip-interface-match { type empty; description "Use incoming-interface's subnet to check"; } } // choice requested-ip-check leaf no-snoop { junos:must "(!("legacy-snooping"))"; junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement"; type empty; description "Do not snoop DHCPV6 packets"; } container persistent-storage { description "Trigger to enable flat file storage"; leaf automatic { type empty; description "Trigger automatically"; } } // container persistent-storage container server-duid-type { description "Define the DUID type to be used as the Server ID. Type supported is DUID-LL"; uses duid-type; } // container server-duid-type container remote-id-mismatch { junos:must "(!(".. reauthenticate"))"; junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'"; presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container reauthenticate { junos:must "(!(".. remote-id-mismatch"))"; junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'"; junos:must "((".. authentication" || ".. .. authentication"))"; junos:must-message "'authentication' statement must be included with 'reauthenticate'"; description "DHCP client reauthenticate processing"; leaf lease-renewal { type empty; description "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT"; } leaf remote-id-mismatch { type empty; description "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation"; } } // container reauthenticate container allow-leasequery { presence "enable allow-leasequery"; description "Allow DHCPv6 leasequery"; uses server-leasequery-type; } // container allow-leasequery container allow-bulk-leasequery { presence "enable allow-bulk-leasequery"; description "Allow DHCPv6 bulk leasequery"; uses server-bulk-leasequery-type; } // container allow-bulk-leasequery container allow-active-leasequery { presence "enable allow-active-leasequery"; description "Allow DHCPv6 active leasequery"; uses server-active-leasequery-type; } // container allow-active-leasequery container duplicate-clients { description "Allow duplicate clients"; uses dhcpv6-duplicate-clients-type; } // container duplicate-clients } // grouping dhcpv6-local-server-type grouping dhcpv6-authentication-type { description "DHCPv6 authentication"; uses apply-advanced; leaf password { type string { length "1 .. 64"; } description "Username password to use"; } container username-include { description "Add username options"; uses apply-advanced; leaf delimiter { type string { length "1"; } description "Change delimiter/separator character"; } leaf domain-name { type string { length "1 .. 64"; } description "Add domain name"; } leaf user-prefix { type string { length "1 .. 64"; } description "Add user defined prefix"; } leaf mac-address { type empty; description "Include MAC address"; } container client-id { presence "enable client-id"; description "Include client ID"; leaf exclude-headers { type empty; description "Exclude all the headers"; } leaf use-automatic-ascii-hex-encoding { type empty; description "Use automatic ascii hex username encoding"; } } // container client-id container relay-agent-remote-id { presence "enable relay-agent-remote-id"; description "Include the relay agent remote ID"; uses apply-advanced; choice relay-agent-remote-id-choice { leaf enterprise-id { type empty; status deprecated; description "Only use enterprise-id portion of option-37"; } leaf remote-id { type empty; status deprecated; description "Only use remote-id portion of option-37"; } } // choice relay-agent-remote-id-choice } // container relay-agent-remote-id leaf logical-system-name { type empty; description "Include logical system name"; } leaf routing-instance-name { type empty; description "Include routing instance name"; } leaf relay-agent-subscriber-id { type empty; description "Include the relay agent subscriber ID"; } leaf relay-agent-interface-id { type empty; description "Include the relay agent interface ID"; } leaf circuit-type { type empty; description "Include circuit type"; } leaf interface-name { type empty; description "Include interface name"; } leaf interface-description { type enumeration { enum "device" { value 0; description "Add the device interface description"; } enum "logical" { value 1; description "Add the logical interface description"; } } description "Include interface description"; } leaf vlan-tags { type empty; description "Include the vlan tag(s)"; } } // container username-include } // grouping dhcpv6-authentication-type grouping dhcpv6-duplicate-clients-type { description "Allow duplicate clients"; choice distinguish-with { leaf incoming-interface { type empty; description "Allow duplicate clients on different underlying interfaces"; } } // choice distinguish-with } // grouping dhcpv6-duplicate-clients-type grouping dhcpv6-liveness-detection-type { description "DHCPv6 client liveness detection processing"; uses apply-advanced; container failure-action { description "Liveness detection failure action options"; uses dhcp-liveness-detection-failure-action-type; } // container failure-action container method { description "Liveness detection method options"; uses apply-advanced; choice method-choice { container bfd { description "Bidirectional Forwarding Detection (BFD) options"; uses dhcp-bfd-liveness-detection-type; } // container bfd container layer2-liveness-detection { description "Neighbor discovery options"; uses dhcp-arp-nud-liveness-detection-type; } // container layer2-liveness-detection } // choice method-choice } // container method } // grouping dhcpv6-liveness-detection-type grouping dhcpv6-local-server-group { description "DHCP groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container authentication { description "DHCP authentication"; uses dhcpv6-authentication-type; } // container authentication container liveness-detection { description "DHCPv6 client liveness detection processing"; uses dhcpv6-liveness-detection-type; } // container liveness-detection container reconfigure { presence "enable reconfigure"; description "DHCPv6 reconfigure processing"; uses dhcpv6-reconfigure-type; } // container reconfigure container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container overrides { presence "enable overrides"; description "DHCP override processing"; uses dhcpv6-override-local-server-type; } // container overrides container route-suppression { description "Suppress access-internal and/or access route addition"; uses dhcpv6-route-suppression-type; } // container route-suppression list interface { key "name"; description "One or more interfaces"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf upto { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface up to"; } leaf exclude { type empty; description "Exclude this interface range"; } leaf trace { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify tracing with exclude"; type empty; description "Enable tracing for this interface"; } container overrides { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "DHCP override processing"; uses dhcpv6-override-local-server-type; } // container overrides container dynamic-profile { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // list interface container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation seconds"; } container violation-action { description "Lease time validation violation action"; choice violation-action-choice { leaf strict { type empty; description "Reject solicit and renew"; } leaf override-lease { type empty; description "Override assigned lease time with threshold"; } } // choice violation-action-choice } // container violation-action } // container lease-time-validation container remote-id-mismatch { junos:must "(!(".. reauthenticate"))"; junos:must-message "'remote-id-mismatch' statement cannot be included with 'reauthenticate'"; presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container reauthenticate { junos:must "(!(".. remote-id-mismatch"))"; junos:must-message "'reauthenticate' statement cannot be included with 'remote-id-mismatch'"; junos:must "((".. authentication" || ".. .. authentication"))"; junos:must-message "'authentication' statement must be included with 'reauthenticate'"; description "DHCP client reauthenticate processing"; leaf lease-renewal { type empty; description "Reauthenticate on each renew, rebind, DISCOVER or SOLICIT"; } leaf remote-id-mismatch { type empty; description "Reauthenticate on remote-id mismatch for renew, rebind and re-negotiation"; } } // container reauthenticate } // grouping dhcpv6-local-server-group grouping dhcpv6-override-local-server-type { description "DHCP override processing"; uses apply-advanced; leaf interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of clients allowed on an interface"; } leaf rapid-commit { type empty; description "Enable rapid commit processing"; } container client-negotiation-match { description "Use secondary match criteria for SOLICIT PDU"; choice match-with { leaf incoming-interface { type empty; description "Use incoming interface"; } } // choice match-with } // container client-negotiation-match container process-inform { presence "enable process-inform"; description "Process INFORMATION request PDUs"; uses apply-advanced; leaf pool { type string { length "1 .. 64"; } description "Pool name for family inet6"; } } // container process-inform container delay-advertise { presence "enable delay-advertise"; description "Filter options for dhcp-server"; uses dhcpv6-filter-option; } // container delay-advertise leaf delegated-pool { type string { length "1 .. 64"; } description "Delegated pool name for inet6"; } leaf multi-address-embedded-option-response { type empty; description "If the client requests multiple addresses place the options in each address"; } leaf always-process-option-request-option { type empty; description "Always process option even after address allocation failure"; } leaf delete-binding-on-renegotiation { type empty; description "Delete binding on renegotiation"; } leaf top-level-status-code { type empty; description "A top level status code option rather than encapsulated in IA for NoAddrsAvail in Advertise PDUs"; } leaf always-add-option-dns-server { type empty; description "Add option-23, DNS recursive name server in Advertise and Reply"; } leaf asymmetric-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced lease time for the client. In seconds"; } leaf asymmetric-prefix-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced prefix lease time for the client. In seconds"; } leaf protocol-attributes { type string { length "1 .. 64"; } description "DHCPv6 attributes to use as defined under access protocol-attributes"; } leaf dual-stack { type string { length "1 .. 64"; } description "Dual stack group to use"; } } // grouping dhcpv6-override-local-server-type grouping dhcpv6-filter-option { description "Generic DHCPv6 filter processing"; uses apply-advanced; leaf delay-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30"; } } units "seconds"; default "3"; description "Time delay between solicit and advertise"; } container based-on { description "Option number"; uses apply-advanced; container option-18 { presence "enable option-18"; description "Option 18"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-18 container option-37 { presence "enable option-37"; description "Option 37"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-37 container option-15 { presence "enable option-15"; description "Option 15"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-15 container option-16 { presence "enable option-16"; description "Option 16"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-16 } // container based-on } // grouping dhcpv6-filter-option grouping dhcpv6-reconfigure-type { description "DHCPv6 reconfigure processing"; uses apply-advanced; leaf strict { type empty; description "Only allow packets containing Reconfigure Accept Option"; } leaf clear-on-abort { type empty; description "Delete client on reconfiguration abort"; } leaf attempts { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of reconfigure attempts before aborting"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Initial timeout value for retry"; } leaf token { type string { length "1 .. 244"; } description "Reconfigure token"; } container trigger { description "DHCP reconfigure trigger"; uses reconfigure-trigger-type; } // container trigger leaf support-option-pd-exclude { type empty; description "Request prefix exclude option in reconfigure message"; } } // grouping dhcpv6-reconfigure-type grouping dhcpv6-route-suppression-type { description "Suppress access-internal and/or access route addition"; leaf access { type empty; description "Suppress access route addition"; } leaf access-internal { type empty; description "Suppress access-internal route addition"; } } // grouping dhcpv6-route-suppression-type grouping dual-stack-authentication-type { description "DHCP dual stack authentication"; uses apply-advanced; leaf password { type string { length "1 .. 64"; } description "Username password to use"; } container username-include { description "Add username options"; uses apply-advanced; leaf delimiter { type string { length "1"; } description "Change delimiter/separator character"; } leaf domain-name { type string { length "1 .. 64"; } description "Add domain name"; } leaf user-prefix { type string { length "1 .. 64"; } description "Add user defined prefix"; } leaf mac-address { type empty; description "Include MAC address"; } container client-id { presence "enable client-id"; description "Include client ID"; leaf exclude-headers { type empty; description "Exclude all the headers"; } leaf use-automatic-ascii-hex-encoding { type empty; description "Use automatic ascii hex username encoding"; } } // container client-id leaf relay-agent-remote-id { type empty; description "Include the relay agent remote ID"; } leaf logical-system-name { type empty; description "Include logical system name"; } leaf routing-instance-name { type empty; description "Include routing instance name"; } leaf relay-agent-interface-id { type empty; description "Include the relay agent interface ID"; } leaf interface-name { type empty; description "Include interface name"; } leaf interface-description { type enumeration { enum "device" { value 0; description "Add the device interface description"; } enum "logical" { value 1; description "Add the logical interface description"; } } description "Include interface description"; } leaf circuit-type { type empty; description "Include circuit type"; } leaf vlan-tags { type empty; description "Include the vlan tag(s)"; } } // container username-include } // grouping dual-stack-authentication-type grouping duid-type { uses apply-advanced; leaf duid_ll { type empty; description "Link Layer Address based DUID "; } } // grouping duid-type grouping dynamic-profile-type { description "Dynamic profile to use"; uses apply-advanced; leaf dynamic-profile { junos:must "("dynamic-profiles $$")"; junos:must-message "Dynamic profile must be defined"; type string { length "1 .. 80"; } description "Dynamic profile to use"; } choice dynamic-profile-type-choice { leaf use-primary { junos:must "("dynamic-profiles $$")"; junos:must-message "Dynamic profile must be defined"; type string { length "1 .. 80"; } description "Dynamic profile to use on the primary interface"; } container aggregate-clients { presence "enable aggregate-clients"; description "Aggregate client profiles"; uses apply-advanced; choice aggregate-type { leaf merge { type empty; description "Merge the client dynamic profiles"; } leaf replace { type empty; description "Replace client dynamic profiles"; } } // choice aggregate-type } // container aggregate-clients } // choice dynamic-profile-type-choice } // grouping dynamic-profile-type grouping jdhcp-dual-stack-protocol-mstr-type { description "Select family as protocol master"; choice addr-fam { leaf inet { type empty; description "INET family has protocol master behavior"; } leaf inet6 { type empty; description "INET6 family has protocol master behavior"; } } // choice addr-fam } // grouping jdhcp-dual-stack-protocol-mstr-type grouping jdhcp-duplicate-clients-in-subnet-type { description "Allow duplicate clients in a subnet"; choice distinguish-with { leaf incoming-interface { type empty; description "Allow duplicate clients on different interfaces in a subnet"; } leaf option-82 { type empty; description "Allow duplicate clients using different option-82 options in a subnet"; } } // choice distinguish-with } // grouping jdhcp-duplicate-clients-in-subnet-type grouping jdhcp-interface-traceoptions-type { description "Interface trace options for DHCP"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Interface trace categories"; leaf name { type enumeration { enum "state" { value 0; description "State-transition operations"; } enum "packet" { value 1; description "Packet-decoding operations"; } enum "flow" { value 2; description "Flow-decoding operations"; } enum "packet-option" { value 3; description "DHCP option-decoding operations"; } enum "dhcpv6-state" { value 4; description "State-transition operations for dhcpv6"; } enum "dhcpv6-packet" { value 5; description "Packet-decoding operations for dhcpv6"; } enum "dhcpv6-packet-option" { value 6; description "DHCP option-decoding operations for dhcpv6"; } enum "all" { value 7; description "All operations"; } } } } // list flag } // grouping jdhcp-interface-traceoptions-type grouping jdhcp-traceoptions-type { description "Trace options for DHCP"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "DHCP operations to include in debugging trace"; leaf name { type enumeration { enum "state" { value 0; description "State-transition operations"; } enum "packet" { value 1; description "Packet-decoding operations"; } enum "flow" { value 2; description "Flow-decoding operations"; } enum "packet-option" { value 3; description "DHCP option-decoding operations"; } enum "dhcpv6-state" { value 4; description "State-transition operations for dhcpv6"; } enum "dhcpv6-packet" { value 5; description "Packet-decoding operations for dhcpv6"; } enum "dhcpv6-packet-option" { value 6; description "DHCP option-decoding operations for dhcpv6"; } enum "all" { value 7; description "All operations"; } enum "database" { value 8; description "Database operations"; } enum "persistent" { value 9; description "Persitent file operations"; } enum "lockout-db" { value 10; description "Lockout database operations"; } enum "interface" { value 11; description "Interface operations"; } enum "rtsock" { value 12; description "Routing socket operations"; } enum "flow-notify" { value 13; description "Flow notification operations"; } enum "io" { value 14; description "I/O operations"; } enum "ha" { value 15; description "High Availability-related operations"; } enum "ui" { value 16; description "User Interface operations"; } enum "general" { value 17; description "Miscellaneous operations"; } enum "fwd" { value 18; description "Firewall process operations"; } enum "rpd" { value 19; description "Routing Protocol process operations"; } enum "auth" { value 20; description "Authentication operations"; } enum "profile" { value 21; description "Profile operations"; } enum "session-db" { value 22; description "Session database operations"; } enum "performance" { value 23; description "Performance measurement operations"; } enum "statistics" { value 24; description "Baseline statistics operations"; } enum "dhcpv6-io" { value 25; description "I/O operations for dhcpv6"; } enum "dhcpv6-rpd" { value 26; description "Routing Protocol process operations for dhcpv6"; } enum "dhcpv6-session-db" { value 27; description "Session database operations for dhcpv6"; } enum "dhcpv6-general" { value 28; description "Miscellaneous operations for dhcpv6"; } enum "liveness-detection" { value 29; description "Liveness detection operations"; } enum "security-persistence" { value 30; description "Liveness detection operations"; } enum "mclag" { value 31; description "Multichassis LAG"; } enum "ra-guard" { value 32; description "DHCP RA guard option for dhcpv6"; } } } } // list flag } // grouping jdhcp-traceoptions-type grouping jsscd-static-subscribers-type { uses apply-advanced; container access-profile { description "Access profile reference"; uses jsscd-access-profile-type; } // container access-profile container dynamic-profile { description "Dynamic profile reference"; uses jsscd-dynamic-profile-type; } // container dynamic-profile container service-profile { description "Dynamic profile to use for default service activation"; uses jsscd-service-profile-type; } // container service-profile container authentication { description "Static Subscriber Client authentication"; uses jsscd-authentication-type; } // container authentication list group { key "name"; ordered-by user; description "Static Subscriber Client group configuration"; uses jsscd-group-type; } // list group leaf auto-login { type empty; description "Auto login the operator logged-out static subscribers"; } leaf baseline-stats { type empty; description "Baseline the statistics for static subscribers"; } list interface { key "name"; description "One or more interfaces"; leaf name { junos:must "((".. subscriber-ip-address" || ".. subscriber-ipv6-address"))"; junos:must-message "subscriber ip or ipv6 address must be configured"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container subscriber-ip-address { description "Assigned IP address to report externally"; uses apply-advanced; leaf address { type jt:ipv4addr; description "IPv4 address"; } } // container subscriber-ip-address container subscriber-ipv6-address { description "Assigned IPv6 address to report externally"; uses apply-advanced; leaf address { type jt:ipv6prefix; description "IPv6 Address or Prefix"; } } // container subscriber-ipv6-address } // list interface } // grouping jsscd-static-subscribers-type grouping jsscd-access-profile-type { description "Access profile for static subscribers"; uses apply-advanced; leaf access-profile-name { junos:must "("access profile $$")"; junos:must-message "referenced access profile must be defined"; type string; description "Profile name"; } } // grouping jsscd-access-profile-type grouping jsscd-authentication-type { description "Static Subscriber Client authentication"; uses apply-advanced; leaf password { type jt:unreadable; description "Username password to use"; } container username-include { description "Add username options"; uses apply-advanced; leaf delimiter { type string { length "1"; } description "Change delimiter/separator character"; } leaf domain-name { type string { length "1 .. 64"; } description "Add domain name"; } leaf user-prefix { type string { length "1 .. 64"; } description "Add user defined prefix"; } leaf interface { type empty; description "Include interface name"; } leaf logical-system-name { type empty; description "Include logical system name"; } leaf routing-instance-name { type empty; description "Include routing instance name"; } leaf vlan-tags { type empty; description "Include vlan tag(s)"; } } // container username-include } // grouping jsscd-authentication-type grouping jsscd-dynamic-profile-type { description "Dynamic profile to use"; uses apply-advanced; leaf dynamic-profile-name { junos:must "("dynamic-profiles $$")"; junos:must-message "Dynamic profile must be defined"; type string { length "1 .. 80"; } description "Dynamic profile to use"; } container aggregate-clients { presence "enable aggregate-clients"; description "Aggregate client profiles"; uses apply-advanced; choice aggregate-type { leaf merge { type empty; description "Merge the client dynamic profiles"; } leaf replace { type empty; description "Replace client dynamic profiles"; } } // choice aggregate-type } // container aggregate-clients } // grouping jsscd-dynamic-profile-type grouping jsscd-group-type { leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container service-profile { description "Dynamic profile to use for default service activation"; uses jsscd-service-profile-type; } // container service-profile container access-profile { description "Access profile reference"; uses jsscd-access-profile-type; } // container access-profile container dynamic-profile { description "Dynamic profile reference"; uses jsscd-dynamic-profile-type; } // container dynamic-profile container authentication { description "Static Subscriber Client authentication"; uses jsscd-authentication-type; } // container authentication list interface { key "name"; description "One or more interfaces"; leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } leaf upto { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface up to"; } leaf exclude { type empty; description "Exclude this interface range"; } } // list interface leaf auto-login { type empty; description "Auto login the operator logged-out static subscribers"; } } // grouping jsscd-group-type grouping jsscd-service-profile-type { description "Service profile for static subscribers"; uses apply-advanced; leaf service-profile-name { junos:must "("dynamic-profiles $$")"; junos:must-message "referenced service profile must be defined"; type string { length "1 .. 80"; } description "Service profile name"; } } // grouping jsscd-service-profile-type grouping juniper-bridge-domains { description "Bridge domains"; leaf name { type string { junos:posix-pattern "!^((__.*__)|(.{129,})|(.*[+].*))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Bridge domain name"; } uses apply-advanced; leaf description { type string { junos:posix-pattern "^.{1,255}$"; junos:pattern-message "Must be a string of 255 characters or less"; } description "Text description of bridge domain"; } leaf domain-type { type enumeration { enum "bridge" { value 0; description "Forwarding instance"; } } description "Type of bridge domain"; } choice vlan_choice { leaf vlan-id { type string; description "IEEE 802.1q VLAN identifier for bridging domain"; } container vlan-tags { presence "enable vlan-tags"; description "IEEE 802.1q VLAN tags for bridging domain"; leaf outer { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } leaf inner { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } } // container vlan-tags leaf-list vlan-id-list { junos:must "(!(" .. .. .. pbb-options"))"; junos:must-message "vlan-id-list is not supported for i-comp routing-instance"; junos:must "((!(".. isolated-vlan") && !(".. community-vlans")))"; junos:must-message "PVLAN related configuration cannot be specified with vlan-id-list"; junos:must "(!(" .. vxlan"))"; junos:must-message "vxlan can not be specified under vlan-id-list"; junos:must "(!(" .. multicast-snooping-options"))"; junos:must-message "multicast-snooping-options can not be specified under vlan-id-list"; junos:must "(!(" .. protocols"))"; junos:must-message "protocols can not be specified under vlan-id-list"; junos:must "(!(" .. no-local-switching"))"; junos:must-message "no-local-switching can not be specified under vlan-id-list"; junos:must "(!(" .. domain-type"))"; junos:must-message "domain-type can not be specified under vlan-id-list"; junos:must "(!(".. interface"))"; junos:must-message "interface can not be specified under vlan-id-list"; junos:must "(!(any ".. bridge-options interface <*> static-mac"))"; junos:must-message "static mac can not be specified under vlan-id-list"; type jt:vlan-range; description "Create bridge-domain for each of the vlan-id specified in the vlan-id-list"; } } // choice vlan_choice leaf-list isid-list { junos:must "(".. vlan-id")"; junos:must-message "isid-list can be configured only under container with 'vlan-id'"; junos:must "(!(" .. .. .. pbb-options"))"; junos:must-message "isid-list and pbb-options can not co-exist for same routing-instance"; junos:must "(!(" .. vxlan"))"; junos:must-message "vxlan can not be specified under isid-list"; junos:must "(!(".. vlan-id inner-all"))"; junos:must-message "vlan-id inner-all can not be specified with isid-list"; junos:must "(!(" .. vlan-id none"))"; junos:must-message "vlan-id none can not be specified with isid-list"; junos:must "(!(" .. vlan-id all"))"; junos:must-message "vlan-id all can not be specified with isid-list"; type string; ordered-by user; description "Create bridge-domain for isid (Valid isid:256..16777214)"; } leaf vlan-id-scope-local { junos:must "(".. .. .. protocols evpn")"; junos:must-message "scope-local can be configured only when routing-instance protocol type is evpn"; junos:must "(".. isid-list")"; junos:must-message "scope-local can be configured only when bridge-domain has isid-list configured"; junos:must "(".. vlan-id")"; junos:must-message "scope-local can be configured only under container with 'vlan-id'"; type empty; description "Enable the scope of vlan-id local to avoid transmitting vlan tagged packets"; } list interface { junos:must "(!("interfaces $$-IFL output-vlan-map push"))"; junos:must-message "interface with output-vlan-map is not supported with push"; junos:must "((!("interfaces $$-IFL vlan-id-list") || !(("interfaces $$-IFL input-vlan-map swap" || "interfaces $$-IFL input-vlan-map pop"))))"; junos:must-message "interface with vlan-id-list and input-vlan-map swap/pop is not supported"; junos:must "((!("interfaces $$-IFL vlan-id-list") || "interfaces $$-IFL input-vlan-map"))"; junos:must-message "interface with vlan-id-list is supported only with input-vlan-map push"; junos:must "((!("interfaces $$-IFL vlan-id") || !((".. .. vlan-tags" || ".. .. vlan-id-list"))))"; junos:must-message "interface with vlan-id cannot be added to vlan with vlan-tags/vlan-id-list configured"; junos:must "((!("interfaces $$-IFL vlan-id-list") || !((".. .. vlan-id" || (".. .. vlan-tags" || ".. .. vlan-id-list")))))"; junos:must-message "interface with vlan-id-list cannot be added to a vlan with a vlan-id/vlan-tags/vlan-id-list configured"; junos:must "(!("interfaces $$-IFL family ethernet-switching interface-mode"))"; junos:must-message "Interface with 'interface-mode' config is not allowed under vlans"; junos:must "(!(".. .. .. interfaces $$"))"; junos:must-message "This interface is already defined at the routing-instance level"; junos:must "(!("interfaces $$-IFL family ethernet-switching"))"; junos:must-message "This inteface with family ethernet switching is not allowed under vlans"; key "name"; ordered-by user; description "Interface name for this bridge domain"; leaf name { junos:must "(!("interfaces $$-IFL encapsulation ethernet"))"; junos:must-message "encapsulation ethernet is not allowed on l2 interface"; junos:must "((!("interfaces $$-IFL etree-ac-role") || "routing-instances ${instance} protocols evpn evpn-etree"))"; junos:must-message "etree must be enabled under routing-instance"; junos:must "((!("interfaces $$-IFL family") || "interfaces $$-IFL family bridge"))"; junos:must-message "only family bridge can be configured on this interface"; junos:must "((!(("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-tags inner-list")) || !((".. .. vlan-id" || ".. .. vlan-tags"))))"; junos:must-message "interface with vlan-id-list/inner-list cannot be added to bridge-domain with a vlan-id/vlan-tags configured"; junos:must "(!("irb"))"; junos:must-message "IRB interface is not supported as interface in bridge-domain"; junos:must "(!("interfaces $$-IFL family bridge interface-mode"))"; junos:must-message "Interface with 'interface-mode' is not allowed in a bridge-domain"; junos:must "(!(".. .. .. interfaces $$"))"; junos:must-message "This interface is already defined at the routing-instance level"; junos:must "(((!("interfaces $$-IFL vlan-id-range") || ".. .. vlan-id all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization")))"; junos:must-message "vlan-id-range is specified for this logical interface; 'vlan-id all' should also be enabled"; junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || (".. .. vlan-id inner-all" || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))))"; junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured"; junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. bridge-options no-normalization"))))"; junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled"; type string; } uses apply-advanced; leaf protect-interface { junos:must "("interfaces $$")"; junos:must-message "Interface must be part of this routing instance"; junos:must "(!("interfaces ${inter_name} esi"))"; junos:must-message "ESI can not be configured for protect interface"; junos:must "("routing-instances ${instance} protocols evpn")"; junos:must-message "Protocol EVPN must be configured in the evpn instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } } // list interface leaf routing-interface { junos:must "(!((".. .. .. protocols evpn mclag" && !(".. no-arp-suppression"))))"; junos:must-message "no-arp-suppression needs to be configured, when evpn is configured with mclag."; junos:must "(!((".. mcae-mac-synchronize" && "interfaces $$-IFL mac")))"; junos:must-message "irb-ifl mac and bridge mcae-mac-synchronize cannot coexist"; junos:must "((!("interfaces $$-IFL virtual-gateway-esi") || "routing-instances ${instance} protocols evpn encapsulation vxlan"))"; junos:must-message "irb-ifl with virtual-gateway-esi only for instance with encapsulation type vxlan"; junos:must "(!(any ".. interface <ps*>"))"; junos:must-message "IRB cannot be added to bridge-domain with PS interface"; junos:must "((!("interfaces $$-IFL family mpls") || !(("routing-instances ${instance} instance-type virtual-switch" && ("routing-instances ${instance} protocols vpls" && "routing-instances ${instance} route-distinguisher")))))"; junos:must-message "routing-interface with family mpls cannot be added to virtual-switch with protocol VPLS"; junos:must "((!(".. vlan-tags") || !("interfaces $$-IFL family mpls")))"; junos:must-message "routing-interface with family mpls cannot be added to bridge-domain with 'vlan-tags'"; junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))"; junos:must-message "routing-interface not valid for vlan-bundle service type"; junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))"; junos:must-message "routing-interface cannot be configured under bridge-domain with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "((".. vlan-id" || ".. vlan-tags"))"; junos:must-message "routing-interface can be configured only under bridge-domain with 'vlan-id' or 'vlan-tags'"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Routing interface name for this bridge-domain"; } container forwarding-options { description "Forwarding options configuration"; uses juniper-bridge-forwarding-options; } // container forwarding-options container bridge-options { description "Bridge domain configuration"; uses juniper-protocols-bd; } // container bridge-options container protocols { presence "enable protocols"; uses apply-advanced; container igmp-snooping { presence "enable igmp-snooping"; description "IGMP snooping configuration"; uses juniper-bd-protocols-igmp-snooping; } // container igmp-snooping container mld-snooping { presence "enable mld-snooping"; description "MLD snooping configuration"; uses juniper-bd-protocols-mld-snooping; } // container mld-snooping } // container protocols container vxlan { junos:must "((". ovsdb-managed" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || (". ingress-node-replication" || ".. .. .. switch-options ovsdb-managed"))))))"; junos:must-message "multicast-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan should be enabled"; junos:must "((". ovsdb-managed" || (".. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || (". multicast-group" || (". multicast-v6-group" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || (".. .. .. switch-options remote-vtep-v6-list" || ".. .. .. switch-options remote-vtep-list")))))))))"; junos:must-message "One of multicast-group or ovsdb-managed or protocols evpn encapsulation vxlan or remote-vtep-list should be enabled. ingress-node-replication must be configured when remote-vtep-list is configured"; junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))"; junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "(("routing-instances ${instance} vtep-source-interface" || ".. .. .. switch-options vtep-source-interface"))"; junos:must-message "vtep-source-interface is required for VXLAN configuration"; description "VXLAN options"; uses apply-advanced; leaf ovsdb-managed { junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))"; junos:must-message "Not valid with protocols evpn encapsulation vxlan"; junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || ".. multicast-group"))))"; junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group"; type empty; description "Bridge-domain is managed remotely via VXLAN OVSDB Controller"; } leaf vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777214"; } } description "VXLAN identifier"; } leaf translation-vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777214"; } } description "Translated VXLAN identifier"; } leaf multicast-group { junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))"; junos:must-message "Not valid with protocols evpn encapsulation vxlan"; junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || (".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || ".. multicast-v6-group")))))))"; junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed"; type jt:ipv4addr; description "Multicast group registered for VXLAN segment"; } leaf encapsulate-inner-vlan { junos:must "(!(".. .. vlan-id none"))"; junos:must-message "encapsulate inner vlan not valid with vlan-id none"; type empty; description "Retain inner VLAN in the packet"; } leaf decapsulate-accept-inner-vlan { junos:must "(!(".. .. vlan-id none"))"; junos:must-message "accept inner vlan not valid with vlan-id none"; type empty; description "Accept VXLAN packets with inner VLAN"; } leaf unreachable-vtep-aging-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "300 .. 1800"; } } units "seconds"; description "Unreachable VXLAN tunnel endpoint removal timer"; } leaf ingress-node-replication { junos:must "(!(".. .. .. .. protocols evpn assisted-replication"))"; junos:must-message "ingress-node-replication cannot be configured with assisted-replication"; junos:must "((".. ovsdb-managed" || (".. .. .. .. switch-options ovsdb-managed" || ("routing-instances ${instance} protocols evpn encapsulation vxlan" || ("routing-instances ${instance} remote-vtep-list" || ("routing-instances ${instance} remote-vtep-v6-list" || (".. .. .. .. switch-options remote-vtep-v6-list" || ".. .. .. .. switch-options remote-vtep-list")))))))"; junos:must-message "Valid for ovsdb-managed instance or with remote-vtep-list or remote-vtep-v6-list or evpn vxlan"; type empty; description "Enable ingress node replication"; } leaf-list static-remote-vtep-list { type jt:ipaddr; max-elements 1024; description "Configure bridge domain specific static remote VXLAN tunnel endpoints"; } } // container vxlan leaf isolated-vlan { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Isolated VLAN ID for private vlan bridge domain"; } leaf-list community-vlans { type jt:vlan-range; description "List of Community VLANs for private vlan bridge domain"; } container multicast-snooping-options { description "Multicast snooping option configuration"; uses juniper-multicast-snooping-options; } // container multicast-snooping-options } // grouping juniper-bridge-domains grouping juniper-bd-protocols-igmp-snooping { description "IGMP snooping options"; uses apply-advanced; container traceoptions { description "Trace options for IGMP Snooping"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all IGMP packets"; } enum "query" { value 1; description "Trace IGMP membership query messages"; } enum "report" { value 2; description "Trace membership report messages"; } enum "leave" { value 3; description "Trace leave group messages (IGMPv2 only)"; } enum "group" { value 4; description "Trace group operations"; } enum "client-notification" { value 5; description "Trace notifications"; } enum "host-notification" { value 6; description "Trace host notifications"; } enum "route" { value 7; description "Trace routing information"; } enum "normal" { value 8; description "Trace normal events"; } enum "general" { value 9; description "Trace general events"; } enum "state" { value 10; description "Trace state transitions"; } enum "policy" { value 11; description "Trace policy processing"; } enum "task" { value 12; description "Trace routing protocol task processing"; } enum "timer" { value 13; description "Trace routing protocol timer processing"; } enum "all" { value 14; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; default "125"; description "When to send host query messages"; } container l2-querier { description "Enable L2 querier mode"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Source IP address to use for L2 querier"; } } // container l2-querier leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "10"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "1"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } default "2"; description "Expected packet loss on a subnet"; } leaf learn-pim-router { type empty; description "Learn PIM router interfaces from PIM hellos"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv4addr; description "Source IP address to use for proxy"; } leaf irb { type empty; description "Proxy IGMP reports to IRB"; } } // container proxy list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(((".. .. .. .. interface $$" || ".. .. .. .. .. .. interface $$") || (!(".. .. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan"; type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list vlan { key "name"; ordered-by user; description "Vlan options"; leaf name { type string { length "1 .. 64"; } description "VLAN name"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "((!(".. .. .. .. .. vlans ${vlan} vlan-id all") && !(".. .. .. .. .. vlans ${vlan} vlan-id inner-all")))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv4addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan } // list vlan } // grouping juniper-bd-protocols-igmp-snooping grouping juniper-bd-protocols-mld-snooping { description "MLD snooping options"; uses apply-advanced; container traceoptions { description "Trace options for MLD Snooping"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MLD packets"; } enum "query" { value 1; description "Trace MLD membership query messages"; } enum "report" { value 2; description "Trace membership report messages"; } enum "leave" { value 3; description "Trace leave group messages (MLDv2 only)"; } enum "group" { value 4; description "Trace group operations"; } enum "client-notification" { value 5; description "Trace notifications"; } enum "host-notification" { value 6; description "Trace host notifications"; } enum "route" { value 7; description "Trace routing information"; } enum "normal" { value 8; description "Trace normal events"; } enum "general" { value 9; description "Trace general events"; } enum "state" { value 10; description "Trace state transitions"; } enum "policy" { value 11; description "Trace policy processing"; } enum "task" { value 12; description "Trace routing protocol task processing"; } enum "timer" { value 13; description "Trace routing protocol timer processing"; } enum "all" { value 14; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; default "125"; description "When to send host query messages"; } container l2-querier { description "Enable L2 querier mode"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Source IP address to use for L2 querier"; } } // container l2-querier leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "10"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "1"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } default "2"; description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv6addr; description "Source IP address to use for proxy"; } leaf irb { type empty; description "Proxy IGMP reports to IRB"; } } // container proxy list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(((".. .. .. .. interface $$" || ".. .. .. .. .. .. interface $$") || (!(".. .. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan"; type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list vlan { key "name"; ordered-by user; description "Vlan options"; leaf name { type string { length "1 .. 64"; } description "Vlan of the bridge-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "((!(".. .. .. .. .. vlans ${vlan} vlan-id all") && !(".. .. .. .. .. vlans ${vlan} vlan-id inner-all")))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv6addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan } // list vlan } // grouping juniper-bd-protocols-mld-snooping grouping juniper-bridge-forwarding-options { uses apply-advanced; container filter { description "Filtering for bridge forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } leaf output { type string; description "Name of output filter to apply for forwarded packets"; } } // container filter container flood { description "Filtering for bridge flood table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for bridge flood packets"; } } // container flood container dhcp-relay { status deprecated; description "Dynamic Host Configuration Protocol relay configuration"; uses jdhcp-relay-type; } // container dhcp-relay container dhcp-security { presence "enable dhcp-security"; description "Dynamic ARP Inspection configuration"; uses jdhcp-security-type; } // container dhcp-security } // grouping juniper-bridge-forwarding-options grouping jdhcp-relay-type { description "Dynamic Host Configuration Protocol relay configuration"; uses apply-advanced; container traceoptions { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "Incompatible with 'forwarding-options helpers bootp'"; junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with 'set system services dhcp'"; status deprecated; description "DHCP relay trace options"; uses jdhcp-traceoptions-type; } // container traceoptions container persistent-storage { description "Trigger to enable flat file storage"; leaf automatic { type empty; description "Trigger automatically"; } } // container persistent-storage leaf duplicate-clients-on-interface { type empty; status deprecated; description "Allow duplicate clients on different interfaces in a subnet"; } container duplicate-clients-in-subnet { junos:must "(!(".. duplicate-clients-on-interface"))"; junos:must-message "Cannot specify duplicate-clients-in-subnet with duplicate-clients-on-interface"; description "Allow duplicate clients in a subnet"; uses jdhcp-duplicate-clients-in-subnet-type; } // container duplicate-clients-in-subnet container interface-traceoptions { status deprecated; description "DHCP relay interface trace options"; uses jdhcp-interface-traceoptions-type; } // container interface-traceoptions container dhcpv6 { description "DHCPv6 configuration"; uses dhcpv6-relay-type; } // container dhcpv6 leaf arp-inspection { type empty; description "Enable Dynamic ARP Inspection"; } container forward-snooped-clients { junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))"; junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured"; description "Forward snooped (unicast) packets"; choice interface-type { leaf configured-interfaces { type empty; description "Forward snooped (unicast) packets on configured interfaces"; } leaf non-configured-interfaces { type empty; description "Forward snooped (unicast) packets on non-configured interfaces"; } leaf all-interfaces { type empty; description "Forward snooped (unicast) packets on configured and non-configured interfaces"; } } // choice interface-type } // container forward-snooped-clients container authentication { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'authentication' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "DHCP authentication"; uses authentication-type; } // container authentication container liveness-detection { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'liveness-detection' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-type; } // container liveness-detection container dynamic-profile { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'dynamic-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'access-profile' statement cannot be included along with 'forwarding-options helpers bootp' statement"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container overrides { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'overrides' statement cannot be included along with 'forwarding-options helpers bootp' statement"; presence "enable overrides"; description "DHCP override processing"; uses override-type; } // container overrides container relay-option { junos:must "((!(".. relay-option-60") && !(any ".. group <*> relay-option-60")))"; junos:must-message "Cannot specify relay-option-60 with relay-option"; presence "enable relay-option"; description "DHCP option processing"; uses dhcp-generic-v4-option; } // container relay-option container server-match { description "Server match processing"; uses apply-advanced; container default-action { presence "enable default-action"; description "Server match default action"; uses server-match-action-choice; } // container default-action list address { key "name"; ordered-by user; description "Server address"; leaf name { type jt:ipv4prefix; description "Server address for matching"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list address } // container server-match container relay-option-60 { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'relay-option-60' statement cannot be included along with 'forwarding-options helpers bootp' statement"; junos:must "((!(".. relay-option") && !(any ".. group <*> relay-option")))"; junos:must-message "Cannot specify relay-option with relay-option-60 "; presence "enable relay-option-60"; status deprecated; description "DHCP option-60 processing"; uses relay-option-60-type-top; } // container relay-option-60 container relay-option-82 { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'relay-option-82' statement cannot be included along with 'forwarding-options helpers bootp' statement"; presence "enable relay-option-82"; description "DHCP option-82 processing"; uses relay-option-82-type; } // container relay-option-82 container forward-only { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'forward-only' statement cannot be included along with 'forwarding-options helpers bootp' statement"; presence "enable forward-only"; description "Forward DHCP packets without creating binding"; uses forward-only-to-rc-type; } // container forward-only leaf description { type string; description "Text description of servers"; } leaf maximum-hop-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Maximum number of hops per packet"; } leaf minimum-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30000"; } } description "Minimum number of seconds before requests are forwarded"; } leaf client-response-ttl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "IP time-to-live value to set in responses to client"; } leaf source-ip-change { type empty; description "Use address of egress interface as source ip"; } leaf forward-only-replies { type empty; description "Forward-only replies from server to appropriate logical-system:routing-instance based on options"; } container server-group { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'server-group' statement cannot be included along with 'forwarding-options helpers bootp' statement"; description "Define a DHCP server group"; uses server-group-type; } // container server-group container active-server-group { description "Name of DHCP server group"; uses dhcpv4-gbl-active-sg-type; } // container active-server-group container route-suppression { junos:must "(!(".. liveness-detection method layer2-liveness-detection"))"; junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection"; junos:must "(!(".. overrides no-arp"))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; description "Suppress access-internal and/or destination route addition"; uses dhcp-route-suppression-type; } // container route-suppression list group { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'group' statement cannot be included along with 'forwarding-options helpers bootp' statement"; key "name"; ordered-by user; description "Define a DHCP group"; uses dhcp-group; } // list group list dual-stack-group { key "name"; description "Define a DHCP dual stack group"; uses dhcp-dual-stack-group; } // list dual-stack-group leaf no-snoop { junos:must "(!("legacy-snooping"))"; junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement"; type empty; description "Do not snoop DHCP packets"; } leaf server-response-time { type union { type uint32; type string { pattern "<.*>|$.*"; } } default "0"; description "Number of seconds in a period of activity between the last server response and an unaswered request"; } container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation in seconds"; } container violation-action { description "Lease time validation violation action"; leaf drop { type empty; description "Drop dhcpv4 offer and ack packets"; } } // container violation-action } // container lease-time-validation container leasequery { junos:must "(".. overrides always-write-option-82")"; junos:must-message "Must configure [overrides always-write-option-82] to overwrite circuit-id"; junos:must "((".. relay-option-82 circuit-id" && (!(".. relay-option-82 circuit-id use-interface-description") && !(".. relay-option-82 circuit-id require-interface-description"))))"; junos:must-message "Must configure [relay-option-82 circuit-id] without description to insert circuit-id"; presence "enable leasequery"; description "DHCP leasequery configuration"; uses relay-leasequery-type; } // container leasequery container bulk-leasequery { presence "enable bulk-leasequery"; description "DHCP bulk leasequery configuration"; uses relay-bulk-leasequery-v4-type; } // container bulk-leasequery container active-leasequery { junos:must "(".. bulk-leasequery")"; junos:must-message "Must configure bulk-leasequery"; presence "enable active-leasequery"; description "DHCPv4 active leasequery configuration"; uses relay-active-leasequery-v4-type; } // container active-leasequery container remote-id-mismatch { presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch } // grouping jdhcp-relay-type grouping dhcp-dual-stack-group { description "DHCP dual stack groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Dual stack group name"; } uses apply-advanced; container authentication { description "DHCP authentication"; uses dual-stack-authentication-type; } // container authentication leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { type string { length "1 .. 128"; } description "Access profile to be used for jdhcpd"; } container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile container liveness-detection { description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-dualstack-type; } // container liveness-detection container relay-agent-interface-id { presence "enable relay-agent-interface-id"; description "Interface-id option processing"; uses v6-relay-option-interface-id-type; } // container relay-agent-interface-id container relay-agent-remote-id { presence "enable relay-agent-remote-id"; description "Remote-id option processing"; uses v6-relay-option-remote-id-type; } // container relay-agent-remote-id container classification-key { junos:must "(".. dynamic-profile")"; junos:must-message "dynamic profile configuration in dual-stack-group is must for configuring classification-type"; description "Classification key for identifying dual stack household"; uses classification-types; } // container classification-key leaf dual-stack-interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of client allowed on an interface"; } container protocol-master { description "Select family as protocol master"; uses jdhcp-dual-stack-protocol-mstr-type; } // container protocol-master container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // grouping dhcp-dual-stack-group grouping dhcp-generic-v4-option { description "Generic DHCP options processing"; uses apply-advanced; leaf option-number { type enumeration { enum "60" { value 0; status deprecated; description "Option 60"; } enum "77" { value 1; status deprecated; description "Option 77"; } } status deprecated; description "Option number"; } container equals { status deprecated; description "Generic option equals"; uses relay-v4-option-ascii-hex; } // container equals container default-action { status deprecated; description "Generic option default action"; uses dhcp-v4-option-default-action; } // container default-action container starts-with { status deprecated; description "Generic option starts with"; uses relay-v4-option-ascii-hex; } // container starts-with container option-60 { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-60 with option-number"; presence "enable option-60"; description "Add option 60 processing"; uses dhcp-generic-v4-option-type; } // container option-60 container option-77 { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-77 with option-number"; presence "enable option-77"; description "Add option 77 processing"; uses dhcp-generic-v4-option-type; } // container option-77 list option-order { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-order with option-number"; key "name"; ordered-by user; description "Options precedence order"; leaf name { type enumeration { enum "60" { value 0; description "Option 60"; } enum "77" { value 1; description "Option 77"; } } description "Option number"; } uses apply-advanced; } // list option-order } // grouping dhcp-generic-v4-option grouping dhcp-generic-v4-option-type { uses apply-advanced; container equals { description "Generic option equals"; uses relay-v4-option-ascii-hex; } // container equals container default-action { description "Generic option default action"; uses dhcp-v4-option-default-action; } // container default-action container starts-with { description "Generic option starts with"; uses relay-v4-option-ascii-hex; } // container starts-with } // grouping dhcp-generic-v4-option-type grouping dhcp-group { description "DHCP groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container active-server-group { description "Name of DHCP server group"; uses dhcpv4-gp-active-sg-type; } // container active-server-group container authentication { description "DHCP authentication"; uses authentication-type; } // container authentication container liveness-detection { description "DHCP client liveness detection processing"; uses dhcp-liveness-detection-type; } // container liveness-detection container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container overrides { presence "enable overrides"; description "DHCP override processing"; uses override-type; } // container overrides container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container server-match { description "Server match processing"; uses apply-advanced; container default-action { presence "enable default-action"; description "Server match default action"; uses server-match-action-choice; } // container default-action list address { key "name"; ordered-by user; description "Server address"; leaf name { type jt:ipv4prefix; description "Server address for matching"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list address } // container server-match container relay-option { junos:must "((!(".. relay-option-60") && !(".. .. relay-option-60")))"; junos:must-message "Cannot specify relay-option-60 with relay-option"; presence "enable relay-option"; description "DHCP option processing"; uses dhcp-generic-v4-option; } // container relay-option container relay-option-60 { junos:must "((!(".. relay-option") && !(".. .. relay-option")))"; junos:must-message "Cannot specify relay-option with relay-option-60"; presence "enable relay-option-60"; status deprecated; description "DHCP option-60 processing"; uses relay-option-60-type-group; } // container relay-option-60 container relay-option-82 { presence "enable relay-option-82"; description "DHCP option-82 processing"; uses relay-option-82-type; } // container relay-option-82 container forward-only { presence "enable forward-only"; description "Forward DHCP packets without creating binding"; uses forward-only-to-rc-type; } // container forward-only container route-suppression { junos:must "(!(".. liveness-detection method layer2-liveness-detection"))"; junos:must-message "Cannot specify route-suppression with liveness-detection method layer2-liveness-detection"; junos:must "((!(".. overrides no-arp") && !(".. .. overrides no-arp")))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; description "Suppress access-internal and/or destination route addition"; uses dhcp-route-suppression-type; } // container route-suppression leaf description { type string; description "Text description of servers"; } leaf maximum-hop-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Maximum number of hops per packet"; } leaf minimum-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30000"; } } description "Minimum number of seconds before requests are forwarded"; } leaf client-response-ttl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "IP time-to-live value to set in responses to client"; } leaf source-ip-change { type empty; description "Use address of egress interface as source ip"; } list interface { key "name"; description "One or more interfaces"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf upto { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface up to"; } leaf exclude { type empty; description "Exclude this interface range"; } leaf trace { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify tracing with exclude"; type empty; description "Enable tracing for this interface"; } container overrides { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "DHCP override processing"; uses override-type; } // container overrides container dynamic-profile { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // list interface container remote-id-mismatch { presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation in seconds"; } container violation-action { description "Lease time validation violation action"; leaf drop { type empty; description "Drop dhcpv4 offer and ack packets"; } } // container violation-action } // container lease-time-validation } // grouping dhcp-group grouping dhcp-v4-option-default-action { description "Default action"; uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // grouping dhcp-v4-option-default-action grouping dhcpv4-gbl-active-sg-type { leaf active-server-group { junos:must "(".. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP server group"; } leaf allow-server-change { type empty; description "Accept DHCP-ACK from any server in this group"; } } // grouping dhcpv4-gbl-active-sg-type grouping dhcpv4-gp-active-sg-type { leaf active-server-group { junos:must "(".. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP server group"; } leaf allow-server-change { type empty; description "Accept DHCP-ACK from any server in this group"; } } // grouping dhcpv4-gp-active-sg-type grouping dhcpv6-relay-type { description "DHCPv6 relay configuration"; uses apply-advanced; container authentication { description "DHCPv6 authentication"; uses dhcpv6-authentication-type; } // container authentication container persistent-storage { description "Trigger to enable flat file storage"; leaf automatic { type empty; description "Trigger automatically"; } } // container persistent-storage container liveness-detection { description "DHCPv6 client liveness detection processing"; uses dhcpv6-liveness-detection-type; } // container liveness-detection container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container overrides { presence "enable overrides"; description "DHCPv6 override processing"; uses dhcpv6-override-relay-type; } // container overrides container relay-option { presence "enable relay-option"; description "DHCPv6 option processing"; uses dhcp-generic-v6-option; } // container relay-option leaf exclude-relay-agent-identifier { type empty; description "Exclude relay agent identifier from packets to server"; } container server-match { description "Server match processing"; uses apply-advanced; container default-action { description "Server match default action"; uses server-match-action-choice; } // container default-action container duid { description "Match duid processing"; uses apply-advanced; container equals { description "Duid equals"; uses server-match-v6-ascii-hex; } // container equals container starts-with { description "Duid starts with"; uses server-match-v6-ascii-hex; } // container starts-with } // container duid list address { key "name"; ordered-by user; description "Server ipv6 address"; leaf name { type jt:ipv6prefix; description "Server ipv6 address for matching"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list address } // container server-match leaf relay-agent-option-79 { type empty; description "Add the client MAC address to the Relay Forward header."; } container vendor-specific-information { description "DHCPv6 option 17 vendor-specific processing"; uses jdhcp-vendor-specific-type; } // container vendor-specific-information container forward-only { presence "enable forward-only"; description "Forward DHCPv6 packets without creating binding"; uses forward-only-to-rc-type; } // container forward-only leaf forward-only-replies { type empty; description "Forward-only replies from server to appropriate logical-system:routing-instance based on options"; } container forward-snooped-clients { junos:must "((!(".. forward-only") && (!(".. forward-only-replies") && !(any ".. group <*> forward-only"))))"; junos:must-message "forward-only and forward-only-replies cannot be configured when forward-snooped-clients is configured"; description "Forward snooped (unicast) packets"; choice interface-type { leaf configured-interfaces { type empty; description "Forward snooped (unicast) packets on configured interfaces"; } leaf non-configured-interfaces { type empty; description "Forward snooped (unicast) packets on non-configured interfaces"; } leaf all-interfaces { type empty; description "Forward snooped (unicast) packets on configured and non-configured interfaces"; } } // choice interface-type } // container forward-snooped-clients container route-suppression { description "Suppress access-internal and/or access route addition"; uses dhcpv6-route-suppression-type; } // container route-suppression list group { key "name"; ordered-by user; description "Define a DHCPv6 relay group"; uses dhcpv6-relay-group; } // list group container relay-agent-interface-id { presence "enable relay-agent-interface-id"; description "DHCPv6 interface-id option processing"; uses v6-relay-option-interface-id-type; } // container relay-agent-interface-id container relay-agent-remote-id { presence "enable relay-agent-remote-id"; description "DHCPv6 remote-id option processing"; uses v6-relay-option-remote-id-type; } // container relay-agent-remote-id container server-group { description "Define a DHCPv6 server group"; uses v6-server-group-type; } // container server-group container active-server-group { description "Name of DHCPv6 server group"; uses dhcpv6-gbl-active-sg-type; } // container active-server-group leaf server-response-time { type union { type uint32; type string { pattern "<.*>|$.*"; } } default "0"; description "Number of seconds in a period of activity between the last server response and an unaswered request"; } container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation in seconds"; } container violation-action { description "Lease time validation violation action"; leaf drop { type empty; description "Drop dhcpv6 advertise and reply packets"; } } // container violation-action } // container lease-time-validation leaf no-snoop { junos:must "(!("legacy-snooping"))"; junos:must-message "'no-snoop' statement cannot be included along with 'legacy-snooping' statement"; type empty; description "Do not snoop DHCPV6 packets"; } container leasequery { junos:must "(".. relay-agent-interface-id")"; junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id"; presence "enable leasequery"; description "DHCPv6 leasequery configuration"; uses relay-leasequery-type; } // container leasequery container bulk-leasequery { junos:must "(".. relay-agent-interface-id")"; junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id"; presence "enable bulk-leasequery"; description "DHCPv6 bulk leasequery configuration"; uses relay-bulk-leasequery-v6-type; } // container bulk-leasequery container active-leasequery { junos:must "(".. bulk-leasequery")"; junos:must-message "Must configure bulk-leasequery"; presence "enable active-leasequery"; description "DHCPv6 active leasequery configuration"; uses relay-active-leasequery-v6-type; } // container active-leasequery container remote-id-mismatch { presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container duplicate-clients { description "Allow duplicate clients"; uses dhcpv6-duplicate-clients-type; } // container duplicate-clients } // grouping dhcpv6-relay-type grouping dhcp-generic-v6-option { description "Generic DHCPv6 options processing"; uses apply-advanced; leaf option-number { type enumeration { enum "15" { value 0; status deprecated; description "Option 15"; } enum "16" { value 1; status deprecated; description "Option 16"; } } status deprecated; description "Option number"; } container equals { status deprecated; description "Generic option equals"; uses relay-v6-option-ascii-hex; } // container equals container default-action { status deprecated; description "Generic option default action"; uses dhcp-v6-option-default-action; } // container default-action container starts-with { status deprecated; description "Generic option starts with"; uses relay-v6-option-ascii-hex; } // container starts-with container option-15 { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-15 with option-number"; presence "enable option-15"; description "Add option 15 processing"; uses dhcp-generic-v6-option-type; } // container option-15 container option-16 { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-16 with option-number"; presence "enable option-16"; description "Add option 16 processing"; uses dhcp-generic-v6-option-type; } // container option-16 list option-order { junos:must "(!("option-number"))"; junos:must-message "Cannot specify option-order with option-number"; key "name"; ordered-by user; description "Options precedence order"; leaf name { type enumeration { enum "15" { value 0; description "Option 15"; } enum "16" { value 1; description "Option 16"; } } description "Option number"; } uses apply-advanced; } // list option-order } // grouping dhcp-generic-v6-option grouping dhcp-generic-v6-option-type { uses apply-advanced; container equals { description "Generic option equals"; uses relay-v6-option-ascii-hex; } // container equals container default-action { description "Generic option default action"; uses dhcp-v6-option-default-action; } // container default-action container starts-with { description "Generic option starts with"; uses relay-v6-option-ascii-hex; } // container starts-with } // grouping dhcp-generic-v6-option-type grouping dhcp-v6-option-default-action { description "Default action"; uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // grouping dhcp-v6-option-default-action grouping dhcpv6-gbl-active-sg-type { uses apply-advanced; leaf active-server-group { junos:must "(".. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay dhcpv6 server-group]"; type string { length "1 .. 64"; } description "Name of DHCPv6 server group"; } } // grouping dhcpv6-gbl-active-sg-type grouping dhcpv6-override-relay-type { description "DHCPv6 relay override processing"; uses apply-advanced; choice allow-snooped-clients-choice { leaf allow-snooped-clients { type empty; description "Allow client creation from snooped PDUs"; } leaf no-allow-snooped-clients { type empty; description "Don't allow client creation from snooped PDUs"; } } // choice allow-snooped-clients-choice leaf delay-authentication { type empty; description "Delay subscriber authentication in DHCP protocol processing until request packet"; } leaf interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of clients allowed on an interface"; } leaf dual-stack { type string { length "1 .. 64"; } description "Dual stack group to use."; } leaf no-bind-on-request { type empty; description "Do not bind if stray DHCPv6 RENEW, REBIND is received"; } container client-negotiation-match { description "Use secondary match criteria for SOLICIT PDU"; choice match-with { leaf incoming-interface { type empty; description "Use incoming interface"; } } // choice match-with } // container client-negotiation-match leaf send-release-on-delete { type empty; description "Always send RELEASE to the server when a binding is deleted"; } leaf always-process-option-request-option { type empty; description "Always process option even after address allocation failure"; } leaf relay-source { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface for relay source"; } leaf delete-binding-on-renegotiation { type empty; description "Delete binding on renegotiation"; } leaf asymmetric-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced lease time for the client. In seconds"; } leaf asymmetric-prefix-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced prefix lease time for the client. In seconds"; } } // grouping dhcpv6-override-relay-type grouping dhcpv6-relay-group { description "DHCPv6 groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container active-server-group { description "Name of DHCPv6 server group"; uses dhcpv6-gp-active-sg-type; } // container active-server-group list dual-stack-group { key "name"; description "Define a DHCP dual stack group"; uses dhcp-dual-stack-group; } // list dual-stack-group container authentication { description "DHCPv6 authentication"; uses dhcpv6-authentication-type; } // container authentication container liveness-detection { description "DHCPv6 client liveness detection processing"; uses dhcpv6-liveness-detection-type; } // container liveness-detection container dynamic-profile { description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection container overrides { presence "enable overrides"; description "DHCPv6 override processing"; uses dhcpv6-override-relay-type; } // container overrides container relay-option { presence "enable relay-option"; description "DHCPv6 option processing"; uses dhcp-generic-v6-option; } // container relay-option container vendor-specific-information { description "DHCPv6 option 17 vendor-specific processing"; uses jdhcp-vendor-specific-type; } // container vendor-specific-information container forward-only { presence "enable forward-only"; description "Forward DHCPv6 packets without creating binding"; uses forward-only-to-rc-type; } // container forward-only container relay-agent-interface-id { presence "enable relay-agent-interface-id"; description "DHCPv6 interface-id option processing"; uses v6-relay-option-interface-id-type; } // container relay-agent-interface-id container relay-agent-remote-id { presence "enable relay-agent-remote-id"; description "DHCPv6 remote-id option processing"; uses v6-relay-option-remote-id-type; } // container relay-agent-remote-id container route-suppression { description "Suppress access-internal and/or access route addition"; uses dhcpv6-route-suppression-type; } // container route-suppression leaf relay-agent-option-79 { type empty; description "Add the client MAC address to the Relay Forward header."; } list interface { key "name"; description "One or more interfaces"; leaf name { junos:must "((unique "forwarding-options dhcp-relay dhcpv6 group <*> interface $$" && !(any "system services dhcp-local-server dhcpv6 group <*> interface $$")))"; junos:must-message "Interface used in other relay or server group"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf upto { junos:must "(!(".. .. interface $$"))"; junos:must-message "Range end point must not equal start"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface up to"; } leaf exclude { type empty; description "Exclude this interface range"; } leaf trace { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify tracing with exclude"; type empty; description "Enable tracing for this interface"; } container overrides { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; description "DHCPv6 override processing"; uses dhcpv6-override-relay-type; } // container overrides container dynamic-profile { junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify dynamic-profile with exclude"; description "Dynamic profile to use"; uses dynamic-profile-type; } // container dynamic-profile leaf service-profile { type string { length "1 .. 128"; } description "Dynamic profile to use for default service activation"; } leaf access-profile { junos:must "("access profile $$")"; junos:must-message "Matching access profile must be defined"; junos:must "(!(".. exclude"))"; junos:must-message "Cannot specify overrides with exclude"; type string { length "1 .. 128"; } description "Access profile to use for AAA services"; } container short-cycle-protection { description "Short cycle lockout configuration"; leaf lockout-min-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } leaf lockout-max-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } description "Short cycle lockout time in seconds"; } } // container short-cycle-protection } // list interface container lease-time-validation { presence "enable lease-time-validation"; description "Configure lease time violation validation"; uses apply-advanced; leaf lease-time-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 2147483647"; } } units "seconds"; description "Threshold for lease time violation in seconds"; } container violation-action { description "Lease time validation violation action"; leaf drop { type empty; description "Drop dhcpv6 advertise and reply packets"; } } // container violation-action } // container lease-time-validation container remote-id-mismatch { presence "enable remote-id-mismatch"; description "DHCP client remote-id mismatch"; uses dhcp-remote-id-mismatch-type; } // container remote-id-mismatch container server-match { description "Server match processing"; uses apply-advanced; container default-action { description "Server match default action"; uses server-match-action-choice; } // container default-action container duid { description "Match duid processing"; uses apply-advanced; container equals { description "Duid equals"; uses server-match-v6-ascii-hex; } // container equals container starts-with { description "Duid starts with"; uses server-match-v6-ascii-hex; } // container starts-with } // container duid list address { key "name"; ordered-by user; description "Server ipv6 address"; leaf name { type jt:ipv6prefix; description "Server ipv6 address for matching"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list address } // container server-match } // grouping dhcpv6-relay-group grouping dhcpv6-gp-active-sg-type { uses apply-advanced; leaf active-server-group { junos:must "(".. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay dhcpv6 server-group]"; type string { length "1 .. 64"; } description "Name of DHCPv6 server group"; } } // grouping dhcpv6-gp-active-sg-type grouping forward-only-to-rc-type { description "Forward DHCP packets without creating binding"; uses apply-advanced; leaf logical-system { type string; default "current"; } leaf routing-instance { type string; default "current"; } } // grouping forward-only-to-rc-type grouping jdhcp-security-type { description "DHCP access security configuration"; uses apply-advanced; leaf no-dhcp-snooping { junos:must "(!("switch-options no-arp-trap "))"; junos:must-message "Cannot enable ARP inspection with no-arp-trap"; type empty; description "Disable dhcp snooping"; } leaf arp-inspection { type empty; description "Enable dynamic ARP inspection"; } leaf ip-source-guard { junos:must "(!(any ".. group <*> overrides untrusted"))"; junos:must-message "Ip-source-guard and dhcp-security overrides untrusted cannot be configured together"; type empty; description "Enable IP source guard"; } leaf no-dhcpv6-snooping { type empty; description "Disable DHCPv6 snooping"; } leaf neighbor-discovery-inspection { type empty; description "Enable neighbor discovery inspection"; } leaf ipv6-source-guard { junos:must "(!(any ".. group <*> overrides untrusted"))"; junos:must-message "Ipv6-source-guard and dhcp-security overrides untrusted cannot be configured together"; type empty; description "Enable IPv6 source guard"; } leaf light-weight-dhcpv6-relay { type empty; description "Enable light weight dhcpv6 relay"; } list group { key "name"; ordered-by user; description "Define a DHCP security group for overriding defaults"; uses ds-group; } // list group container option-82 { presence "enable option-82"; description "DHCP option-82 processing for snooped packets"; uses security-option-82-type; } // container option-82 container dhcpv6-options { presence "enable dhcpv6-options"; description "DHCPv6 option processing for snooped packets"; uses security-dhcpv6-options-type; } // container dhcpv6-options } // grouping jdhcp-security-type grouping ds-group { description "DHCP security groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Group name"; } uses apply-advanced; container overrides { presence "enable overrides"; description "DHCP override processing"; uses ds-override-type; } // container overrides list interface { key "name"; description "One or more interfaces"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; list static-ip { key "name"; ordered-by user; description "Static IP address configuration"; uses ip-mac-static; } // list static-ip list static-ipv6 { key "name"; ordered-by user; description "Static IPv6 address configuration"; uses ipv6-mac-static; } // list static-ipv6 } // list interface } // grouping ds-group grouping ds-override-type { description "Dynamic ARP Inspection override processing"; uses apply-advanced; leaf trusted { junos:must "(!(".. untrusted"))"; junos:must-message "Trusted and untrusted cannot be configured together"; type empty; description "Make this trusted group of interfaces"; } leaf untrusted { junos:must "(!(".. trusted"))"; junos:must-message "Trusted and untrusted cannot be configured together"; type empty; description "Make this untrusted group of interfaces"; } leaf no-option82 { type empty; description "Make this group of interfaces not to add option82"; } leaf no-option37 { type empty; description "Make this group of interfaces not to add option37"; } leaf no-option18 { type empty; description "Make this group of interfaces not to add option18"; } leaf no-option16 { type empty; description "Make this group of interfaces not to add option16"; } leaf no-option79 { type empty; description "Make this group of interfaces not to add option79"; } leaf no-dhcpv6-options { type empty; description "Make this group of interfaces not to add any DHCPv6 options"; } } // grouping ds-override-type grouping ip-mac-static { leaf name { type jt:ipaddr; description "IP address"; } leaf mac { type jt:mac-addr; description "MAC address"; } } // grouping ip-mac-static grouping ipv6-mac-static { leaf name { type jt:ipv6addr; description "IP address"; } leaf mac { type jt:mac-addr; description "MAC address"; } } // grouping ipv6-mac-static grouping jdhcp-vendor-specific-type { description "Add vendor-specific option processing"; uses apply-advanced; leaf host-name { type empty; description "Add router host name"; } leaf location { type empty; description "Add location information expressed as interface name format"; } } // grouping jdhcp-vendor-specific-type grouping juniper-forwarding-options { uses apply-advanced; list storm-control-profiles { key "name"; description "Storm control profile for this instance"; leaf name { junos:must "("forwarding-options storm-control-profiles $$ all")"; junos:must-message "Only aggregate profiles supported"; type string { length "1 .. 127"; } description "Storm control profile name"; } uses apply-advanced; container all { presence "enable all"; description "For all BUM traffic"; uses apply-advanced; choice bandwidth { leaf bandwidth-percentage { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of link bandwidth"; } leaf bandwidth-level { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "kbps"; description "Link bandwidth"; } } // choice bandwidth leaf burst-size { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "bytes"; description "Burst size"; } leaf no-broadcast { type empty; description "Disable broadcast storm control"; } leaf no-unknown-unicast { type empty; description "Disable unknown unicast storm control"; } choice no-multicast-choices { leaf no-multicast { type empty; description "Disable multicast storm control"; } leaf no-registered-multicast { type empty; description "Disable registered multicast storm control"; } leaf no-unregistered-multicast { type empty; description "Disable unregistered multicast storm control"; } } // choice no-multicast-choices } // container all leaf action-shutdown { type empty; description "Disable port for excessive storm control errors"; } } // list storm-control-profiles choice sampling-or-packet-capture { container sampling { description "Statistical traffic sampling options"; uses juniper-sampling-options; } // container sampling case case_2 { } // case case_2 } // choice sampling-or-packet-capture list accounting { key "name"; description "Configure accounting of traffic"; uses juniper-packet-accounting-options; } // list accounting list analyzer { key "name"; description "Analyzer options"; uses smpl-analyzer-type; } // list analyzer container port-mirroring { description "Configure port mirroring of traffic"; uses juniper-port-mirror-options; } // container port-mirroring container evpn-vxlan { description "EVPN VXLAN configurations"; uses apply-advanced; leaf shared-tunnels { type empty; description "Create VTEP tunnels to EVPN PE"; } container reroute-address { description "Reroute IP address for vxlan encapsulation"; choice family { container inet { presence "enable inet"; description "IPv4 address family"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Reroute address for IPV4 FRR"; } } // container inet container inet6 { presence "enable inet6"; description "IPv6 address family"; uses apply-advanced; leaf address { type jt:ipv6addr; description "Reroute address for IPV6 FRR"; } } // container inet6 } // choice family } // container reroute-address } // container evpn-vxlan container multicast-replication { description "Set mode of multicast replication"; uses apply-advanced; container evpn { description "EVPN IRB multicast related options"; uses apply-advanced; leaf irb { type enumeration { enum "local-only" { value 0; description "Multicast forward in local-only mode"; } enum "local-remote" { value 1; description "Multicast forward in local-remote mode"; } enum "oism" { value 2; description "Optimized inter subnet multicast mode"; } } } leaf smet-nexthop-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10000 .. 40000"; } } description "Flood traffic to all egress when count goes above limit"; } } // container evpn } // container multicast-replication container load-balance { description "Configure load-balancing attributes on the forwarding path"; uses apply-advanced; container indexed-load-balance { presence "enable indexed-load-balance"; description "Use indexed permuted next hop lists for unilist and aggregate next hops"; uses apply-advanced; } // container indexed-load-balance container per-flow { uses apply-advanced; } // container per-flow container per-prefix { presence "enable per-prefix"; uses apply-advanced; leaf hash-seed { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 65534"; } } default "0"; description "Specifies per-router input value for per-prefix load-balancing hash function"; } } // container per-prefix } // container load-balance container hash-key { description "Select data used in the hash key"; uses junos_hash_key; } // container hash-key container local-bias { presence "enable local-bias"; description "Turn on local bias functionality"; uses apply-advanced; leaf disable { type empty; description "Disable local-bias"; } } // container local-bias container enhanced-hash-key { description "Select data used in the hash key for Enhanced IP Forwarding Engines"; uses apply-advanced; leaf use-trunk-max-links { type empty; description "Use 8 links in trunk programming instead of actual links"; } container lag-dlb { presence "enable lag-dlb"; description "Setting dynamic load balancing options for LAG"; uses apply-advanced; container ether-type { presence "enable ether-type"; description "Setting ether type for LAG DLB"; uses apply-advanced; leaf ipv4 { type empty; description "Ether type is ipv4"; } leaf ipv6 { type empty; description "Ether type is ipv6"; } leaf mpls { type empty; description "Ether type is mpls"; } } // container ether-type } // container lag-dlb container ecmp-dlb { junos:must "(!(".. ecmp-resilient-hash"))"; junos:must-message "RH and DLB cannot be configured together"; description "Set load balancing options for VC-Fabric forwarding"; uses apply-advanced; choice mode { leaf assigned-flow { type empty; description "Flow-based fixed link assignment"; } container flowlet { presence "enable flowlet"; description "Inactivity-based flowlet link assignment (default)"; uses apply-advanced; leaf inactivity-interval { type union { type string { pattern "<.*>|$.*"; } type uint32; } default "256"; description "Minimum inactivity interval in micro-seconds for flowlet detection"; } } // container flowlet leaf per-packet { type empty; description "Per-packet optimal spraying"; } } // choice mode container ether-type { presence "enable ether-type"; description "Ether type"; uses apply-advanced; leaf ipv4 { type empty; description "Set DLB for ipv4"; } leaf ipv6 { type empty; description "Set DLB for ipv6"; } leaf mpls { type empty; description "Set DLB for mpls"; } } // container ether-type } // container ecmp-dlb container hash-seed { presence "enable hash-seed"; description "Hash seed"; uses apply-advanced; } // container hash-seed container mpls { description "Configure mpls fields"; uses apply-advanced; leaf no-incoming-port { type empty; description "Exclude incoming port from the hash key"; } leaf no-incoming-device { type empty; description "Exclude incoming device from the hash key"; } } // container mpls container layer2 { description "Configure layer2 fields"; uses apply-advanced; leaf no-incoming-port { type empty; description "Exclude incoming port from the hash key"; } leaf no-incoming-device { type empty; description "Exclude incoming device from the hash key"; } leaf no-source-mac-address { type empty; description "Exclude source MAC address from the hash key"; } leaf no-destination-mac-address { type empty; description "Exclude destination MAC address from the hash key"; } leaf no-ether-type { type empty; description "Exclude ether type from the hash key"; } leaf vlan-id { type empty; description "Include incoming vlan-id in hash key"; } } // container layer2 container inet { description "Configure inet4 fields"; uses apply-advanced; leaf no-incoming-port { type empty; description "Exclude incoming port from the hash key"; } leaf no-incoming-device { type empty; description "Exclude incoming device from the hash key"; } leaf no-l4-source-port { type empty; description "Exclude l4 source port from the hash key"; } leaf no-l4-destination-port { type empty; description "Exclude l4 dest port from the hash key"; } leaf no-protocol { type empty; description "Exclude protocol from the hash key"; } leaf no-ipv4-source-address { type empty; description "Exclude IPv4 source address"; } leaf no-ipv4-destination-address { type empty; description "Exclude IPv4 destination address"; } leaf vlan-id { type empty; description "Include incoming vlan-id in hash key"; } } // container inet container inet6 { description "Configure inet6 fields"; uses apply-advanced; leaf no-incoming-port { type empty; description "Exclude incoming port from the hash key"; } leaf no-incoming-device { type empty; description "Exclude incoming device from the hash key"; } leaf no-l4-source-port { type empty; description "Exclude l4 source port from the hash key"; } leaf no-l4-destination-port { type empty; description "Exclude l4 dest port from the hash key"; } leaf no-next-header { type empty; description "Exclude next header from the hash key"; } leaf no-ipv6-source-address { type empty; description "Exclude IPv6 source address"; } leaf no-ipv6-destination-address { type empty; description "Exclude IPv6 destination address"; } leaf vlan-id { type empty; description "Include vlan-id in hash key"; } } // container inet6 leaf no-mpls { type empty; description "Disable mpls in hash key"; } container gre { description "Configure for GRE "; uses apply-advanced; leaf key { type empty; description "Include key in hash key"; } leaf protocol { type empty; description "Include protocol in hash key"; } } // container gre container services-loadbalancing { description "Select key to load balance across service PICs"; uses apply-advanced; container family { description "Protocol family"; container inet { description "IPv4 protocol family"; uses apply-advanced; container layer-3-services { description "Include Layer 3 (IP) data in the hash key"; uses apply-advanced; leaf source-address { type empty; description "Include IP source address in the hash key"; } leaf destination-address { type empty; description "Include IP destination address in the hash key"; } leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } } // container layer-3-services } // container inet container inet6 { description "IPv6 protocol family"; uses apply-advanced; container layer-3-services { description "Include Layer 3 (IP) data in the hash key"; uses apply-advanced; leaf source-address { type empty; description "Include IP source address in the hash key"; } leaf destination-address { type empty; description "Include IP destination address in the hash key"; } leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } leaf src-prefix-len { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "56 .. 127"; } } units "bits"; default "127"; description "Enhanced hash key inet6 source prefix length"; } } // container layer-3-services } // container inet6 } // container family } // container services-loadbalancing container family { description "Protocol family"; container inet { description "IPv4 protocol family"; uses apply-advanced; leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } leaf no-destination-port { type empty; description "Omit IP destination port in the hash key"; } leaf no-source-port { type empty; description "Omit IP source port in the hash key"; } leaf type-of-service { type empty; description "Include TOS byte in the hash key"; } leaf gtp-tunnel-endpoint-identifier { type empty; description "Include TEID in the hash key for GTP-U packets"; } leaf l2tp-tunnel-session-identifier { type empty; description "Include TID SID in the hash key for L2TP packets"; } leaf session-id { type empty; description "Include session ID in the enhanced hash key"; } } // container inet container inet6 { description "IPv6 protocol family"; uses apply-advanced; leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } leaf traffic-class { type empty; description "Include Traffic Class byte in the hash key"; } leaf no-destination-port { type empty; description "Omit IP destination port in the hash key"; } leaf no-source-port { type empty; description "Omit IP source port in the hash key"; } leaf gtp-tunnel-endpoint-identifier { type empty; description "Include TEID in the hash key for GTP-U packets"; } leaf session-id { type empty; description "Include session ID in the enhanced hash key"; } leaf no-flow-label { type empty; description "Omit Flow label in the hash key"; } leaf type-of-service { type empty; description "Include TOS byte in the hash key"; } } // container inet6 container mpls { description "MPLS protocol family"; uses apply-advanced; leaf label-1-exp { type empty; description "Include EXP of first MPLS label from the hash key"; } leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } choice pseudowire_option { leaf no-ether-pseudowire { type empty; description "Omit IP payload over ethernet PW from the hash-key"; } container ether-pseudowire { description "Load-balance IP over ethernet PW"; leaf zero-control-word { type empty; description "Parse zero control word in packet header"; } } // container ether-pseudowire } // choice pseudowire_option leaf no-payload { type empty; description "Omit MPLS payload data from the hash key"; } } // container mpls container multiservice { description "Multiservice protocol (bridged/CCC/VPLS) family"; uses apply-advanced; leaf incoming-interface-index { type empty; description "Include incoming interface index in hash key"; } leaf outer-priority { type empty; description "Include Outer 802.1 Priority bits in the hash key"; } leaf no-payload { type empty; description "Omit payload data from the hash key"; } leaf no-mac-addresses { type empty; description "Omit source and destination MAC addresses from the hash key"; } } // container multiservice } // container family container hash-function { description "Configure hash functions"; uses apply-advanced; choice instance { case case_1 { } // case case_1 case case_2 { } // case case_2 case case_3 { } // case case_3 case case_4 { } // case case_4 case case_5 { } // case case_5 case case_6 { } // case case_6 case case_7 { } // case case_7 case case_8 { } // case case_8 container xor { presence "enable xor"; description "XOR based hashing"; uses apply-advanced; leaf no-L3-L4-headers { type empty; description "Exclude source IP, dest IP, source L4 port, dest L4 port addresses from hashing"; } leaf no-L4-ports { type empty; description "Exclude source L4 port and dest L4 port addresses from hashing"; } leaf mac-addresses { type empty; description "Include source and destination MAC addresses in IPv4/IPv6 packet hashing"; } leaf no-mpls-hash { type empty; description "Exclude MPLS information from hashing"; } leaf no-ipv4-source-address { type empty; description "Exclude source IPv4 address from hashing"; } leaf no-ipv4-destination-address { type empty; description "Exclude dest IPv4 address from hashing"; } leaf no-ipv6-source-address { type empty; description "Exclude source IPv6 address from hashing"; } leaf no-ipv6-destination-address { type empty; description "Exclude dest IPv6 address from hashing"; } leaf no-ip6-flow-label { type empty; description "Exclude IPv6 flow label from hashing"; } leaf en-ip-over-mpls { type empty; description "Enable parsing of IP in MPLS packets"; } leaf no-mpls-label0 { type empty; description "Exclude MPLS Label 0 from hashing"; } leaf no-mpls-label1 { type empty; description "Exclude MPLS Label 1 from hashing"; } leaf no-source-mac-address { type empty; description "Exclude source MAC address from hashing"; } leaf no-destination-mac-address { type empty; description "Exclude dest MAC address from hashing"; } leaf no-l4-source-port { type empty; description "Exclude l4 source port from the hash key"; } leaf no-l4-destination-port { type empty; description "Exclude l4 dest port from the hash key"; } } // container xor leaf ingress-port { type empty; description "Ingress port based hashing"; } container crc6 { presence "enable crc6"; description "CRC6 based hashing"; uses apply-advanced; leaf crc6-seed { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 63"; } } description "CRC6 seed value"; } leaf en-ip-over-mpls { type empty; description "Enable parsing of IP in MPLS packets"; } leaf no-source-mac-address { type empty; description "Exclude source MAC address from hashing"; } leaf no-destination-mac-address { type empty; description "Exclude dest MAC address from hashing"; } leaf no-mpls-label0 { type empty; description "Exclude MPLS Label 0 from hashing"; } leaf no-mpls-label1 { type empty; description "Exclude MPLS Label 1 from hashing"; } leaf no-l4-source-port { type empty; description "Exclude l4 source port from the hash key"; } leaf no-l4-destination-port { type empty; description "Exclude l4 dest port from the hash key"; } leaf no-ip-source-address { type empty; description "Exclude source IPv4/IPv6 address from hashing"; } leaf no-ip-destination-address { type empty; description "Exclude dest IPv4/IPv6 address from hashing"; } leaf no-ip6-flow-label { type empty; description "Exclude IPv6 flow label from hashing"; } } // container crc6 container crc16 { presence "enable crc16"; description "CRC16 based hashing"; uses apply-advanced; leaf crc16-seed { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "CRC16 seed value"; } leaf en-ip-over-mpls { type empty; description "Enable parsing of IP in MPLS packets"; } leaf no-source-mac-address { type empty; description "Exclude source MAC address from hashing"; } leaf no-destination-mac-address { type empty; description "Exclude dest MAC address from hashing"; } leaf no-mpls-label0 { type empty; description "Exclude MPLS Label 0 from hashing"; } leaf no-mpls-label1 { type empty; description "Exclude MPLS Label 1 from hashing"; } leaf no-l4-source-port { type empty; description "Exclude l4 source port from the hash key"; } leaf no-l4-destination-port { type empty; description "Exclude l4 dest port from the hash key"; } leaf no-ip-source-address { type empty; description "Exclude source IPv4/IPv6 address from hashing"; } leaf no-ip-destination-address { type empty; description "Exclude dest IPv4/IPv6 address from hashing"; } leaf no-ip6-flow-label { type empty; description "Exclude IPv6 flow label from hashing"; } } // container crc16 } // choice instance } // container hash-function container vxlan { description "Vxlan traffic"; uses apply-advanced; leaf no-inner-payload { type empty; description "To enable load-balancing on Vxlan traffic based on outer IP/UDP header"; } } // container vxlan list conditional-match { key "name"; ordered-by user; description "Configures a conditional match"; leaf name { type string; description "Name identifier"; } uses apply-advanced; container offset1 { presence "enable offset1"; description "Configure offset 1"; uses apply-advanced; leaf base-offset1 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset1-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf matchdata1 { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Data to be matched"; } leaf matchdata1-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Matchdata mask"; } } // container offset1 container offset2 { presence "enable offset2"; description "Configure offset 2"; uses apply-advanced; leaf base-offset2 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset2-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf matchdata2 { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Data to be matched"; } leaf matchdata2-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Matchdata mask"; } } // container offset2 container offset3 { presence "enable offset3"; description "Configure offset 3"; uses apply-advanced; leaf base-offset3 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset3-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf matchdata3 { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Data to be matched"; } leaf matchdata3-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Matchdata mask"; } } // container offset3 container offset4 { presence "enable offset4"; description "Configure offset 4"; uses apply-advanced; leaf base-offset4 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset4-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf matchdata4 { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Data to be matched"; } leaf matchdata4-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Matchdata mask"; } } // container offset4 } // list conditional-match list flex-hashing { key "name"; ordered-by user; description "Set flex hashing"; leaf name { type string; description "Name identifier"; } uses apply-advanced; container ethtype { presence "enable ethtype"; description "Configure ether-type of packet"; uses apply-advanced; container inet { description "Enable flex-hashing on ipv4"; uses apply-advanced; leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Incoming interface name. This is optional parameter"; } leaf conditional-match { type string; description "Conditional match to be matched in the packet"; } container hash-offset { description "Configure the offsets for hashing"; uses apply-advanced; container offset1 { presence "enable offset1"; description "Configure offset 1 value"; uses apply-advanced; leaf base-offset1 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset1-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset1-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } container offset2 { presence "enable offset2"; description "Configure offset 2 value"; uses apply-advanced; leaf base-offset2 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset2-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset2-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } } // container offset2 } // container offset1 } // container hash-offset } // container inet container inet6 { description "Enable flex-hashing on ipv6"; uses apply-advanced; leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Incoming interface name. This is optional parameter"; } leaf conditional-match { type string; description "Conditional match to be matched in the packet"; } container hash-offset { description "Configure the offsets for hashing"; uses apply-advanced; container offset1 { presence "enable offset1"; description "Configure offset 1 value"; uses apply-advanced; leaf base-offset1 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset1-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset1-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } container offset2 { presence "enable offset2"; description "Configure offset 2 value"; uses apply-advanced; leaf base-offset2 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset2-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset2-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } } // container offset2 } // container offset1 } // container hash-offset } // container inet6 container mpls { description "Configure number of MPLS labels"; uses apply-advanced; leaf num-labels { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Configure number of MPLS labels"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Incoming interface name. This is optional parameter"; } leaf conditional-match { type string; description "Conditional match to be matched in the packet"; } container hash-offset { description "Configure the offsets for hashing"; uses apply-advanced; container offset1 { presence "enable offset1"; description "Configure offset 1 value"; uses apply-advanced; leaf base-offset1 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset1-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset1-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } container offset2 { presence "enable offset2"; description "Configure offset 2 value"; uses apply-advanced; leaf base-offset2 { type enumeration { enum "start-of-L2Header" { value 0; description "Offset will be extracted from start of L2 header"; } enum "start-of-L3-OuterHeader" { value 1; description "Offset will be extracted from start of outer L3 header"; } enum "start-of-L3-InnerHeader" { value 2; description "Offset will be extracted from start of inner L3 header"; } enum "start-of-L4-Header" { value 3; description "Offset will be extracted from start of L4 header"; } } description "Configure base-offset"; } leaf offset2-value { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 126"; } } description "Offset of the data to be extracted from the base offset. Only even number"; } leaf offset2-mask { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "4"; } description "Mask for the hash data extracted. 2 byte mask"; } } // container offset2 } // container offset1 } // container hash-offset } // container mpls } // container ethtype } // list flex-hashing } // container enhanced-hash-key container next-hop { description "Next hop throttle"; uses apply-advanced; } // container next-hop container sflow { description "Sflow related"; uses apply-advanced; container egress-multicast { description "Sflow for egress multicast"; uses apply-advanced; leaf max-replication-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 2000"; } } description "To configure max replication rate (0 to 2K pps)"; } } // container egress-multicast } // container sflow container multicast { description "Multicast resolve and mismatch rate"; uses apply-advanced; leaf resolve-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "100 .. 1000"; } } units "per second"; description "Multicast resolve rate"; } leaf mismatch-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 1000"; } } units "per second"; description "Multicast interface mismatch rate"; } } // container multicast container packet-capture-telemetry { description "Packet capture telemetry options"; uses apply-advanced; container egress { description "Egress options"; uses packet-capture-egress-intf-type; } // container egress } // container packet-capture-telemetry container explicit-null-cos { presence "enable explicit-null-cos"; description "Configure to use MPLS explicit null exp for COS classification"; uses apply-advanced; leaf inet { type empty; description "Include family inet"; } leaf inet6 { type empty; description "Include family inet6"; } } // container explicit-null-cos container helpers { description "Port forwarding configuration"; uses apply-advanced; container traceoptions { description "Trace options for helper"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Area of UDP forwarding helper process on which to enable debugging output"; leaf name { type enumeration { enum "trace" { value 0; description "Trace tracing code"; } enum "address" { value 1; description "Trace address management code"; } enum "main" { value 2; description "Trace main loop code"; } enum "config" { value 3; description "Trace configuration code"; } enum "ifdb" { value 4; description "Trace interface database code"; } enum "io" { value 5; description "Trace I/O code"; } enum "rtsock" { value 6; description "Trace routing socket code"; } enum "ui" { value 7; description "Trace user interface code"; } enum "util" { value 8; description "Trace miscellaneous utility code"; } enum "gencfg" { value 9; description "Trace fud gencfg message"; } enum "domain" { value 10; description "Trace DNS service-specific code"; } enum "tftp" { value 11; description "Trace TFTP service-specific code"; } enum "bootp" { value 12; description "Trace BOOTP/DHCP service-specific code"; } enum "port" { value 13; description "Trace arbitrary protocol code"; } enum "if-rtsdb" { value 14; description "Trace interface hierarchy rtsdb"; } enum "all" { value 15; description "Trace all areas of code"; } } } } // list flag } // container traceoptions container rtsdb-client-traceoptions { presence "enable rtsdb-client-traceoptions"; status deprecated; description "SHM rtsock database client library trace options"; uses apply-advanced; container if-rtsdb { presence "enable if-rtsdb"; description "Trace interface hierarchy rtsdb"; uses apply-advanced; list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "init" { value 0; description "Trace initialization"; } enum "routing-socket" { value 1; description "Trace routing socket messages"; } enum "map" { value 2; description "Trace shared memory mapping"; } enum "all" { value 3; description "Trace all"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container if-rtsdb } // container rtsdb-client-traceoptions container domain { description "Incoming DNS request forwarding configuration"; uses apply-advanced; leaf description { type string; description "Text description of server"; } container server { description "Server information"; leaf address { type jt:ipv4addr; description "Name or address of server to which to forward"; } choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // container server list interface { key "name"; ordered-by user; description "Incoming DNS request forwarding interface configuration"; leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Name of interface or group of interfaces"; } uses apply-advanced; leaf no-listen { type empty; description "Do not listen on this interface"; } leaf broadcast { type empty; description "If the layer 2 interface is unknown then broadcast"; } leaf description { type string; description "Text description of server"; } container server { description "Server information"; leaf address { type jt:ipv4addr; description "Name or address of server to which to forward"; } choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // container server } // list interface } // container domain container tftp { description "Incoming TFTP request forwarding configuration"; uses apply-advanced; leaf description { type string; description "Text description of server"; } container server { description "Server information"; leaf address { type jt:ipv4addr; description "Name or address of server to which to forward"; } choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // container server list interface { key "name"; ordered-by user; description "Incoming TFTP request forwarding interface configuration"; leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Name of interface or group of interfaces"; } uses apply-advanced; leaf no-listen { type empty; description "Do not listen on this interface"; } leaf broadcast { type empty; description "If the layer 2 interface is unknown then broadcast"; } leaf description { type string; description "Text description of server"; } container server { description "Server information"; leaf address { type jt:ipv4addr; description "Name or address of server to which to forward"; } choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // container server } // list interface } // container tftp container bootp { junos:must "(!("system autoinstallation"))"; junos:must-message "incompatible with 'system autoinstallation'"; description "Incoming BOOTP/DHCP request forwarding configuration"; uses apply-advanced; leaf relay-agent-option { type empty; description "Use DHCP Relay Agent option in relayed BOOTP/DHCP messages"; } container dhcp-option82 { junos:must "(!("forwarding-options helpers bootp relay-agent-option"))"; junos:must-message "incompatible with relay-agent-option"; presence "enable dhcp-option82"; description "Configure DHCP option 82"; uses dhcp-option82-type; } // container dhcp-option82 leaf description { type string; description "Text description of servers"; } list server { key "name"; ordered-by user; description "Server information"; leaf name { type jt:ipv4addr; description "Name or address of servers to which to forward"; } uses apply-advanced; list logical-system { key "name"; ordered-by user; description "Logical system of server to which to forward"; leaf name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf-list routing-instance { type string; ordered-by user; description "Routing instance of server to which to forward"; } } // list logical-system leaf-list routing-instance { type string; ordered-by user; description "Routing instance of server to which to forward"; } } // list server leaf maximum-hop-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } default "4"; description "Maximum number of hops per packet"; } leaf minimum-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30000"; } } default "0"; description "Minimum number of seconds before requests are forwarded"; } leaf client-response-ttl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "IP time-to-live value to set in responses to client"; } leaf source-address-giaddr { type empty; description "Use GIADDR as the source IP address for relayed packets"; } leaf apply-secondary-as-giaddr { type empty; description "Enable DHCP relay to use secondary gateway ip on all interfaces"; } list interface { key "name"; ordered-by user; description "Incoming BOOTP/DHCP request forwarding interface configuration"; leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Name of interface or group of interfaces"; } uses apply-advanced; leaf no-listen { type empty; description "Do not listen on this interface"; } leaf broadcast { type empty; description "If the layer 2 interface is unknown then broadcast"; } leaf description { type string; description "Text description of servers"; } list server { key "name"; ordered-by user; description "Server information"; leaf name { type jt:ipv4addr; description "Name or address of servers to which to forward"; } uses apply-advanced; list logical-system { key "name"; ordered-by user; description "Logical system of server to which to forward"; leaf name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf-list routing-instance { type string; ordered-by user; description "Routing instance of server to which to forward"; } } // list logical-system leaf-list routing-instance { type string; ordered-by user; description "Routing instance of server to which to forward"; } } // list server leaf maximum-hop-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } default "4"; description "Maximum number of hops per packet"; } leaf minimum-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30000"; } } default "0"; description "Minimum number of seconds before requests are forwarded"; } leaf client-response-ttl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "IP time-to-live value to set in responses to client"; } leaf source-address-giaddr { type empty; description "Use GIADDR as the source IP address for relayed packets"; } container dhcp-option82 { presence "enable dhcp-option82"; description "Configure DHCP option 82"; uses dhcp-option82-type; } // container dhcp-option82 leaf apply-secondary-as-giaddr { type empty; description "Enable DHCP relay to use secondary gateway ip on this interface"; } } // list interface } // container bootp list port { key "name"; ordered-by user; description "Incoming arbitrary protocol request forwarding configuration"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Port number of the protocol to listen"; } uses apply-advanced; leaf description { type string; description "Text description of server"; } list server { key "name"; ordered-by user; description "Server information"; leaf name { type jt:ipv4addr; description "Name or address of server to which to forward"; } uses apply-advanced; choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // list server list interface { key "name"; ordered-by user; description "Incoming request forwarding interface configuration"; leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Name of interface or group of interfaces"; } uses apply-advanced; leaf no-listen { type empty; description "Do not listen on this interface"; } leaf broadcast { type empty; description "If the layer 2 interface is unknown then broadcast"; } leaf description { type string; description "Text description of server"; } list server { key "name"; ordered-by user; description "Server information"; leaf name { type jt:ipv4addr; description "Name or address of server to which to forward"; } uses apply-advanced; choice instance { container logical-system { description "Logical system of server to which to forward"; leaf logical-system-name { junos:must "("logical-systems $$")"; junos:must-message "referenced logical system must be defined"; type string { junos:posix-pattern "^[a-zA-Z0-9_-]{1,63}$"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Name of logical system"; } leaf routing-instance { type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // container logical-system leaf routing-instance { junos:must "("routing-instances $$")"; junos:must-message "referenced routing instance must be defined"; type union { type string { pattern "default"; } type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } } description "Routing instance of server to which to forward"; } } // choice instance } // list server } // list interface } // list port } // container helpers container family { description "Protocol family"; container inet { description "IPv4 parameters"; uses apply-advanced; container filter { description "Filtering for forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } leaf output { type string; description "Name of output filter to apply for forwarded packets"; } } // container filter } // container inet container inet6 { description "IPv6 parameters"; uses apply-advanced; container filter { description "Filtering for forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } leaf output { type string; description "Name of output filter to apply for forwarded packets"; } } // container filter leaf route-accounting { type empty; description "Enable IPv6 route accounting"; } leaf source-checking { type empty; description "Discard IPv6 packet when source address type is unspecified, loopback, multicast or link-local "; } } // container inet6 container mpls { description "MPLS parameters"; uses apply-advanced; container filter { description "Filtering for forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } leaf output { type string; description "Name of output filter to apply for forwarded packets"; } } // container filter } // container mpls container vpls { description "VPLS parameters"; uses apply-advanced; container filter { description "Filtering for VPLS DMAC forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } } // container filter container flood { description "Filtering for VPLS flood table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for VPLS flood packets"; } } // container flood } // container vpls container evpn { description "EVPN parameters"; uses apply-advanced; container filter { description "Filtering for EVPN DMAC forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } } // container filter container flood { description "Filtering for EVPN flood table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for EVPN flood packets"; } } // container flood } // container evpn } // container family list next-hop-group { key "name"; description "Next hop group forwarding option"; uses juniper-next-hop-group-options; } // list next-hop-group container dhcp-relay { junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with 'set system services dhcp'"; junos:must "(!(".. .. instance-type virtual-switch"))"; junos:must-message "forwarding-options dhcp-relay incompatible with routing-instances instance-type virtual-switch'"; description "Dynamic Host Configuration Protocol relay configuration"; uses jdhcp-relay-type; } // container dhcp-relay choice load-balance-label-capability-choice { leaf load-balance-label-capability { type empty; description "Load balance label capability"; } leaf no-load-balance-label-capability { type empty; description "Don't load balance label capability"; } } // choice load-balance-label-capability-choice list ip-options-protocol-queue { key "name"; ordered-by user; description "IP Options protocol logical queue parameters"; leaf name { type string; description "Protocol name"; } uses apply-advanced; leaf protocol-id { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 254"; } } description "Protocol Identifier"; } leaf queue-depth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 807"; } } description "Size of the protocol logical options queue"; } } // list ip-options-protocol-queue container access-security { description "Access security configuration"; uses jdhcp-access-security-type; } // container access-security container vxlan-routing { description "VXLAN Routing forwarding options"; uses apply-advanced; leaf next-hop { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Next-hop. Must be multiple of 4096. This will restart PFE"; } leaf interface-num { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Interface. Must be multiple of 2048. This will restart PFE"; } leaf overlay-ecmp { type empty; description "Enable overlay ecmp for vxlan L3. This will restart PFE"; } leaf loopback-port { junos:must "(all "interfaces $$ unit <*> family ethernet-switching interface-mode trunk")"; junos:must-message "Interface-mode trunk needs to be enabled for loopback AE"; junos:must "("chassis aggregated-devices ethernet device-count")"; junos:must-message "Ethernet device-count needs to be configured for loopback AE"; junos:must "("interfaces $$ aggregated-ether-options loopback")"; junos:must-message "Loopback needs to be enabled on the AE interface"; type string; description "AE loopback interface used for VXLAN routing. This will restart PFE"; } } // container vxlan-routing } // grouping juniper-forwarding-options grouping dhcp-option82-type { uses apply-advanced; leaf disable { type empty; description "Disable DHCP option 82 on this VLAN"; } container circuit-id { presence "enable circuit-id"; description "Configure DHCP option 82 circuit id"; uses apply-advanced; leaf prefix { type enumeration { enum "hostname" { value 0; description "Set hostname as the prefix"; } } description "Configure DHCP option 82 circuit id prefix"; } leaf use-interface-description { type empty; description "Use interface description instead of name"; } leaf use-vlan-id { type empty; description "Use VLAN id instead of name"; } } // container circuit-id container remote-id { presence "enable remote-id"; description "Configure DHCP option 82 remote id"; uses apply-advanced; leaf prefix { type enumeration { enum "none" { value 0; description "Set no prefix"; } enum "hostname" { value 1; description "Set hostname as the prefix"; } enum "mac" { value 2; description "Set chassis MAC as the prefix"; } } description "Configure DHCP option 82 remote id prefix"; } leaf use-interface-description { type empty; description "Use interface description instead of name"; } leaf use-string { junos:must "(!(".. use-interface-description"))"; junos:must-message "use-string and use-interface-description cannot be configured together"; type string; description "Use raw string instead of the default remote id"; } } // container remote-id container vendor-id { presence "enable vendor-id"; description "Configure DHCP option 82 vendor id"; uses apply-advanced; leaf use-string { type string; description "Use raw string instead of the default vendor id"; } } // container vendor-id } // grouping dhcp-option82-type grouping jdhcp-access-security-type { description "Access security configuration"; uses apply-advanced; container router-advertisement-guard { presence "enable router-advertisement-guard"; description "Router Advertisement Guard Configuration"; uses apply-advanced; list policy { key "name"; ordered-by user; description "Router Advertisement Guard policy"; leaf name { type string { length "1 .. 64"; } description "Router Advertisement Guard policy name"; } uses apply-advanced; container discard { description "Discard parameters"; uses apply-advanced; leaf source-ip-address-list { type string; description "IPv6 Source address list name"; } leaf source-mac-address-list { type string; description "Source mac address list name"; } leaf prefix-list-name { type string; description "Prefix-list Name"; } } // container discard container accept { description "Accept parameters"; uses apply-advanced; container match-list { description "List of parameters to check"; uses apply-advanced; leaf source-ip-address-list { type string; description "IPv6 Source address list name"; } leaf source-mac-address-list { type string; description "Source mac address list name"; } leaf prefix-list-name { type string; description "Prefix-list Name"; } leaf match-criteria { type enumeration { enum "match-all" { value 0; description "A match from every list"; } enum "match-any" { value 1; description "A match from any list"; } } description "Match Criteria"; } } // container match-list container match-options { presence "enable match-options"; description "List of Options to check"; uses apply-advanced; container hop-limit { description "Hop limit"; uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Maximum hop limit"; } leaf minimum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Minimum hop limit"; } } // container hop-limit container route-preference { description "Accept route preference"; uses apply-advanced; leaf maximum { type enumeration { enum "low" { value 0; description "Route preference low"; } enum "medium" { value 1; description "Route preference medium"; } enum "high" { value 2; description "Route preference high"; } } description "Maximum route preference"; } } // container route-preference leaf managed-config-flag { type empty; description "Check Managed config flag"; } leaf other-config-flag { type empty; description "Check Other config flag"; } } // container match-options } // container accept } // list policy container interface { description "RA Guard config on Interface"; uses apply-advanced; list intf-config { key "name"; description "Interface Configuration"; uses interface-policy; } // list intf-config } // container interface container vlans { description "RA Guard config on Vlan"; uses apply-advanced; list vlan-config { key "name"; description "Virtual LAN Configuration"; uses vlan-policy; } // list vlan-config } // container vlans } // container router-advertisement-guard } // grouping jdhcp-access-security-type grouping interface-policy { description "Interface Name"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface Name"; } uses apply-advanced; container policy { description "Attach policy"; uses apply-advanced; leaf policy-name { type string; description "Router Advertisement Guard policy name"; } choice policy-type { leaf stateful { type empty; description "Stateful router advertisement guard"; } leaf stateless { type empty; description "Stateless router advertisement guard"; } } // choice policy-type } // container policy container mark-interface { description "Mark interface"; uses apply-advanced; choice mark-intf-type { leaf trusted { junos:must "(!(".. .. policy"))"; junos:must-message "Trusted interfaces cannot have policy attached"; type empty; description "Mark interface trusted"; } leaf block { junos:must "(!(".. .. policy"))"; junos:must-message "Blocked interfaces cannot have policy attached"; type empty; description "Block router-advertisement"; } } // choice mark-intf-type } // container mark-interface } // grouping interface-policy grouping juniper-mld-snooping-options { uses apply-advanced; leaf use-p2mp-lsp { junos:must "(".. .. instance-type vpls")"; junos:must-message "use-p2mp-lsp supported only on instance type vpls"; type empty; description "P2MP will be used to forward traffic instead of PW"; } container snoop-pseudowires { junos:must "(".. .. instance-type vpls")"; junos:must-message "snoop-pseudowires supported only on instance type vpls"; junos:must "(!(" .. use-p2mp-lsp"))"; junos:must-message "snoop-pseudowires and use-p2mp-lsp cannot be configured together"; presence "enable snoop-pseudowires"; description "VPLS PE would send traffic selectively to PE's having interest"; uses apply-advanced; } // container snoop-pseudowires } // grouping juniper-mld-snooping-options grouping juniper-multicast-snooping-options { uses apply-advanced; container options { description "Miscellaneous options"; uses apply-advanced; container syslog { description "Set system logging level"; uses apply-advanced; container level { description "Logging level"; leaf emergency { type empty; description "Emergency level"; } leaf alert { type empty; description "Alert level"; } leaf critical { type empty; description "Critical level"; } leaf error { type empty; description "Error level"; } leaf warning { type empty; description "Warning level"; } leaf notice { type empty; description "Notice level"; } leaf info { type empty; description "Informational level"; } leaf debug { type empty; description "Debugging level"; } } // container level leaf upto { type enumeration { enum "emergency" { value 0; description "Emergency level"; } enum "alert" { value 1; description "Alert level"; } enum "critical" { value 2; description "Critical level"; } enum "error" { value 3; description "Error level"; } enum "warning" { value 4; description "Warning level"; } enum "notice" { value 5; description "Notice level"; } enum "info" { value 6; description "Informational level"; } enum "debug" { value 7; description "Debugging level"; } } description "Log up to a particular logging level"; } leaf mark { type union { type int32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Periodically mark the trace file"; } } // container syslog } // container options container traceoptions { description "Multicast snooping trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "parse" { value 0; description "Trace configuration parsing"; } enum "config-internal" { value 1; description "Trace configuration internals"; } enum "route" { value 2; description "Trace routing information"; } enum "normal" { value 3; description "Trace normal events"; } enum "general" { value 4; description "Trace general events"; } enum "state" { value 5; description "Trace state transitions"; } enum "policy" { value 6; description "Trace policy processing"; } enum "task" { value 7; description "Trace routing protocol task processing"; } enum "timer" { value 8; description "Trace routing protocol timer processing"; } enum "all" { value 9; description "Trace everything"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container forwarding-cache { description "Multicast forwarding cache"; uses apply-advanced; container threshold { description "Threshold"; uses apply-advanced; leaf suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Suppress threshold"; } leaf reuse { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Reuse threshold"; } } // container threshold } // container forwarding-cache leaf-list flood-groups { type jt:ipaddr; ordered-by user; description "Groups for which the traffic will be flooded"; } container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 300"; } } units "seconds"; default "180"; description "Maximum time for graceful restart to finish"; } } // container graceful-restart container multichassis-lag-replicate-state { presence "enable multichassis-lag-replicate-state"; description "Enable multichassis lag replication"; uses apply-advanced; leaf suppress-report { type empty; description "Enable mclag report suppression"; } } // container multichassis-lag-replicate-state container oism { description "Optimized inter subnet multicast options"; uses apply-advanced; leaf install-star-g-routes { type empty; description "Install (*,G) multicast routes in data plane"; } } // container oism leaf nexthop-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } units "milliseconds"; description "Nexthop hold time in milliseconds"; } } // grouping juniper-multicast-snooping-options grouping juniper-next-hop-group-options { leaf name { type string; description "Next hop group name"; } uses apply-advanced; leaf group-type { type enumeration { enum "inet" { value 0; description "Group of family inet next-hops"; } enum "layer-2" { value 1; description "Layer-2 next-hop group"; } enum "inet6" { value 2; description "Group of family inet6 next-hops"; } } default "inet"; description "Next hop group type"; } list interface { key "name"; description "Interfaces through which to send sampled traffic"; uses next_hop_group_intf_type; } // list interface list next-hop-subgroup { key "name"; description "Group of interfaces through which to send sampled traffic"; uses juniper-next-hop-subgroup-options; } // list next-hop-subgroup } // grouping juniper-next-hop-group-options grouping juniper-next-hop-subgroup-options { leaf name { junos:must "(".. interface")"; junos:must-message "At least two interfaces are required for next-hop-subgroup configuration"; type string; description "Next-hop sub-group name"; } uses apply-advanced; list interface { key "name"; max-elements 16; description "Interface through which to send the sampled traffic"; uses next_hop_subgroup_intf_type; } // list interface } // grouping juniper-next-hop-subgroup-options grouping juniper-packet-accounting-options { leaf name { type string; description "Name for accounting group"; } uses apply-advanced; container output { description "Accounting data disposition"; uses packet_accounting_output_type; } // container output } // grouping juniper-packet-accounting-options grouping juniper-port-mirror-options { uses apply-advanced; container traceoptions { description "Port-mirroring trace options"; uses sampling_traceoptions_type; } // container traceoptions leaf disable { type empty; description "Disable the global port-mirroring instance"; } leaf disable-all-instances { type empty; description "Disable the all port-mirroring instances"; } container input { description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container family { description "Address family of packets to mirror"; container inet { description "Mirror IPv4 packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses inet_pm_family_output_type; } // container output } // container inet container inet6 { description "Mirror IPv6 packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses inet6_pm_family_output_type; } // container output } // container inet6 container mpls { description "Mirror MPLS packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses mpls_pm_family_output_type; } // container output } // container mpls container vpls { description "Mirror Layer-2 bridged/vpls packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container vpls container ethernet-switching { description "Mirror Layer-2 ethernet-switched packets"; uses apply-advanced; container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container ethernet-switching container ccc { description "Mirror layer-2 ccc packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container ccc } // container family list instance { key "name"; ordered-by user; description "Instance of port-mirroring parameters"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 63"; } description "Name for port-mirroring instance"; } uses apply-advanced; leaf disable { type empty; description "Disable the this port-mirroring instance"; } choice input_params_or_instance { container input { description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input leaf input-parameters-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string; description "Name of port-mirroring instance to use for input parameters"; } } // choice input_params_or_instance container output { description "One or more next hops for port-mirrored packets"; uses inet_pm_output_type; } // container output container family { description "Address family of packets to mirror"; container inet { description "Mirror IPv4 packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses inet_pm_family_output_type; } // container output } // container inet container inet6 { description "Mirror IPv6 packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses inet6_pm_family_output_type; } // container output } // container inet6 container mpls { description "Mirror MPLS packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "One or more next hops for port-mirrored packets"; uses mpls_pm_family_output_type; } // container output } // container mpls container vpls { description "Mirror Layer-2 bridged/vpls packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container vpls container ethernet-switching { description "Mirror Layer-2 ethernet-switched packets"; uses apply-advanced; container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container ethernet-switching container ccc { description "Mirror layer-2 ccc packets"; uses apply-advanced; container input { junos:must "(!(".. .. .. input"))"; junos:must-message "input parameters under family and outside family are mutually exclusive"; status deprecated; description "Settings for sampling of input packets"; uses pm_family_input_type; } // container input container output { description "Destination for port-mirrored packets"; uses layer2_pm_family_output_type; } // container output } // container ccc } // container family } // list instance } // grouping juniper-port-mirror-options grouping inet6_pm_family_output_type { uses apply-advanced; choice interface-or-next-hop-index { list interface { key "name"; description "Interfaces through which to send sampled traffic"; uses inet6_pm_intf_type; } // list interface case case_2 { } // case case_2 } // choice interface-or-next-hop-index leaf no-filter-check { type empty; description "Do not check for filters on port-mirroring interface"; } leaf ipv6-address { type jt:ipv6addr; description "ERSPAN Destination IPv6 Address"; } } // grouping inet6_pm_family_output_type grouping inet6_pm_intf_type { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface through which to send sampled traffic"; } uses apply-advanced; list next-hop { key "name"; ordered-by user; description "Address of next hop through which to send sampled traffic"; uses inet6_next_hop_type; } // list next-hop } // grouping inet6_pm_intf_type grouping inet6_next_hop_type { description "Address of next hop through which to send sampled traffic"; leaf name { type jt:ipv6addr; } uses apply-advanced; } // grouping inet6_next_hop_type grouping inet_pm_family_output_type { uses apply-advanced; choice interface-or-next-hop-index { list interface { key "name"; description "Interfaces through which to send sampled traffic"; uses inet_pm_intf_type; } // list interface case case_2 { } // case case_2 } // choice interface-or-next-hop-index leaf no-filter-check { type empty; description "Do not check for filters on port-mirroring interface"; } leaf ip-address { type jt:ipv4addr; description "ERSPAN Destination IP Address"; } list routing-instance { key "name"; max-elements 1; description "Routing instances"; uses inet_pm_output-routing-instance-type; } // list routing-instance } // grouping inet_pm_family_output_type grouping inet_pm_intf_type { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface through which to send sampled traffic"; } uses apply-advanced; list next-hop { key "name"; ordered-by user; description "Address of next hop through which to send sampled traffic"; uses inet_next_hop_type; } // list next-hop } // grouping inet_pm_intf_type grouping inet_next_hop_type { description "Address of next hop through which to send sampled traffic"; leaf name { type jt:ipv4addr; } uses apply-advanced; } // grouping inet_next_hop_type grouping inet_pm_output-routing-instance-type { leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; leaf ip-address { type jt:ipv4addr; description "ERSPAN Destination IP Address"; } } // grouping inet_pm_output-routing-instance-type grouping inet_pm_output_type { uses apply-advanced; } // grouping inet_pm_output_type grouping juniper-protocols-amt { uses apply-advanced; container traceoptions { description "Trace options for AMT"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all AMT packets"; } enum "errors" { value 1; description "Trace all error messages"; } enum "tunnels" { value 2; description "Trace all AMT tunnel messages"; } enum "route" { value 3; description "Trace routing information"; } enum "normal" { value 4; description "Trace normal events"; } enum "general" { value 5; description "Trace general events"; } enum "state" { value 6; description "Trace state transitions"; } enum "policy" { value 7; description "Trace policy processing"; } enum "task" { value 8; description "Trace routing protocol task processing"; } enum "timer" { value 9; description "Trace routing protocol timer processing"; } enum "all" { value 10; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container relay { presence "enable relay"; description "AMT relay"; uses juniper-protocols-amt-relay; } // container relay } // grouping juniper-protocols-amt grouping juniper-protocols-amt-relay { uses apply-advanced; container family { presence "enable family"; description "Protocol family"; uses apply-advanced; container inet { presence "enable inet"; uses apply-advanced; leaf anycast-prefix { type jt:ipv4prefix; description "IPv4 anycast prefix"; } leaf local-address { type jt:ipv4addr; description "IPv4 local address"; } } // container inet } // container family leaf secret-key-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 1440"; } } units "minutes"; description "Time interval for the secret key to expire"; } leaf tunnel-limit { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Number of AMT tunnels"; } leaf unicast-stream-limit { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Maximum number of AMT unicast streams(s,g,intf)"; } leaf accounting { type empty; description "Enable AMT accounting"; } leaf-list tunnel-devices { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tunnel devices to be used for creating ud interfaces"; } } // grouping juniper-protocols-amt-relay grouping juniper-protocols-bd { description "Bridging configuration"; uses apply-advanced; container mac-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC address forwarding table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } } description "Action when MAC limit is reached"; } } // container mac-table-size container mac-ip-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC+IP bindings table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings"; } } // container mac-ip-table-size container interface-mac-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC address learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit container interface-mac-ip-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC+IP bindings learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit container mac-notification { presence "enable mac-notification"; description "MAC notification options"; uses apply-advanced; leaf notification-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; default "30"; description "Interval for sending MAC notifications"; } } // container mac-notification leaf mac-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "seconds"; description "Delay for discarding MAC address if no updates are received"; } leaf no-mac-learning { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Disable dynamic MAC address learning"; } leaf no-normalization { type empty; description "Disable vlan id normalization for interfaces"; } leaf mac-statistics { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Enable MAC address statistics"; } container mib { presence "enable mib"; description "Snmp mib options"; uses apply-advanced; container dot1q-mib { presence "enable dot1q-mib"; description "Dot1q MIB configuration options"; uses apply-advanced; leaf port-list { type enumeration { enum "bit-map" { value 0; description "Port list is represented in bit-map format"; } enum "string" { value 1; description "Port list is represented in string format"; } } description "Port list for staticegressports and staticuntaggedports MIB"; } } // container dot1q-mib } // container mib container static-rvtep-mac { description "Configure Static MAC and remote VxLAN tunnel endpoint entries"; uses apply-advanced; list mac { key "mac_addr remote-vtep"; description "Unicast MAC address"; leaf mac_addr { type jt:mac-unicast; } leaf remote-vtep { type jt:ipaddr; description "Configure static remote VXLAN tunnel endpoints"; } } // list mac } // container static-rvtep-mac list interface { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance"; key "name"; ordered-by user; description "Interface that connect this site to the VPN"; leaf name { junos:must "(((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching vlan")) || (!(".. .. .. .. .. .. .. routing-instances") && ("interfaces $$-IFL family bridge interface-mode" && !(any "routing-instances <*> interface $$")))))"; junos:must-message "Interface must be part of this routing instance"; junos:must "((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Interface must be part of this routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container interface-mac-limit { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; description "Maximum number of MAC addresses learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf disable { type empty; description "Disable interface for interface-mac-limit"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit leaf action-priority { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8"; } } description "Blocking priority of this interface on mac move detection"; } list static-mac { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; key "name"; ordered-by user; description "Static MAC addresses assigned to this interface"; leaf name { junos:must "((!(".. .. .. .. vlan-id all") || all ".. vlan-id <*>"))"; junos:must-message " Specify vlan-id for qualified learning "; type jt:mac-addr; description "MAC address"; } uses apply-advanced; list vlan-id { junos:must "(".. .. .. .. vlan-id all")"; junos:must-message "'vlan-id all' has to be configured for the bridging domain"; key "name"; ordered-by user; description "VLAN ID of learning VLAN"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Learning VLAN"; } uses apply-advanced; } // list vlan-id } // list static-mac container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf no-mac-learning { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf mac-pinning { type empty; description "Enable MAC pinning"; } leaf persistent-learning { junos:must "(!("switch-options mac-table-aging-time "))"; junos:must-message "Persistent learning can not co-exist with mac-table-aging-time"; type empty; description "Enable persistent MAC learning on this interface"; } } // list interface } // grouping juniper-protocols-bd grouping juniper-protocols-bgp { uses apply-advanced; container path-selection { description "Configure path selection strategy"; uses apply-advanced; leaf l2vpn-use-bgp-rules { type empty; description "Use standard BGP rules during L2VPN path selection"; } leaf cisco-non-deterministic { type empty; description "Use Cisco IOS nondeterministic path selection algorithm"; } leaf always-compare-med { type empty; description "Always compare MED values, regardless of neighbor AS"; } container med-plus-igp { presence "enable med-plus-igp"; description "Add IGP cost to next-hop to MED before comparing MED values"; uses apply-advanced; leaf med-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 1000"; } } default "1"; description "Multiplier for MED"; } leaf igp-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 1000"; } } default "1"; description "Multiplier for IGP cost to next-hop"; } } // container med-plus-igp leaf external-router-id { type empty; description "Compare router ID on BGP externals"; } leaf as-path-ignore { junos:must "(!(".. .. .. .. routing-options multipath as-path-compare"))"; junos:must-message "Configuring 'as-path-ignore' is not allowed when 'as-path-compare' is enabled for this routing instance"; type empty; description "Ignore AS path comparison during path selection"; } } // container path-selection container accept-prpd-connection { presence "enable accept-prpd-connection"; description "Enable BGP to accept PRPD connections"; } // container accept-prpd-connection leaf advertise-from-main-vpn-tables { type empty; description "Advertise VPN routes from bgp.Xvpn.0 tables in master instance"; } leaf stale-labels-holddown-period { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 600"; } } description "Duration (sec) MPLS labels allocated by BGP are kept after they go stale"; } leaf holddown-all-stale-labels { type empty; description "Hold all BGP stale-labels, facilating make-before-break for new label advertisements"; } container egress-te-backup-paths { description "Backup-path for Egress-TE peer interface failure"; uses apply-advanced; list template { key "name"; description "Backup-path template"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of Egress-TE backup path"; } uses apply-advanced; list peer { key "name"; ordered-by user; description "Egress peer TE backup exit path"; leaf name { type jt:ipaddr; description "Address of BGP peer to use as backup next-hop"; } uses apply-advanced; } // list peer container remote-nexthop { description "Resolve and use tunnel to this next-hop as backup path"; uses apply-advanced; leaf remote-nh-addr { type jt:ipaddr; description "Address of remote-nexthop to use as backup path"; } } // container remote-nexthop container ip-forward { junos:must "(!(".. remote-nexthop"))"; junos:must-message "'ip-forward' will not take effect as backup when 'remote-nexthop' is in use"; presence "enable ip-forward"; description "Use IP-forward backup path for Egress TE"; uses apply-advanced; leaf rti-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance to use as IP forward backup-path"; } } // container ip-forward } // list template } // container egress-te-backup-paths leaf sr-preference-override { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Replace received segment routing traffic engineering preference value with override value"; } leaf vpn-apply-export { type empty; description "Apply BGP export policy when exporting VPN routes"; } container family { description "Protocol family for NLRIs in updates"; uses apply-advanced; container inet { description "IPv4 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet container inet-vpn { description "IPv4 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet-vpn container inet6 { description "IPv6 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-inet6-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet6-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet6 container inet6-vpn { description "IPv6 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet6-vpn container iso-vpn { description "ISO Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-vpn-protection; } // container unicast } // container iso-vpn container l2vpn { description "MPLS-based Layer 2 VPN and VPLS NLRI parameters"; uses apply-advanced; container auto-discovery-only { presence "enable auto-discovery-only"; description "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS"; uses bgp-afi-default; } // container auto-discovery-only container auto-discovery-mspw { presence "enable auto-discovery-mspw"; description "Include auto-discovery NLRI for LDP Signalled MultiSegment PW"; uses bgp-afi-default; } // container auto-discovery-mspw container signaling { presence "enable signaling"; description "Include Layer 2 VPN and VPLS signaling NLRI"; uses bgp-afi-l2vpn; } // container signaling } // container l2vpn container evpn { description "EVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include EVPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container evpn container inet-mvpn { description "IPv4 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mvpn container inet6-mvpn { description "IPv6 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-mvpn container inet-mdt { description "IPv4 Multicast Distribution Tree (MDT) NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN auto-discovery NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mdt container traffic-engineering { description "Traffic Engineering (BGP-TE) NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include BGP-TE NLRI"; uses bgp-afi-default; } // container unicast } // container traffic-engineering container route-target { presence "enable route-target"; description "Route target NLRI used for VPN route filtering"; uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container proxy-generate { presence "enable proxy-generate"; description "Generate route target NLRI for peers that don't support it"; uses apply-advanced; leaf-list route-target-policy { type jt:policy-algebra; ordered-by user; description "Limit VPN routes that are used to generate proxy route-target filters"; } } // container proxy-generate leaf external-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 256"; } } description "Number of external paths accepted for route filtering"; } leaf advertise-default { type empty; description "Advertise default and suppress more specific routes"; } leaf damping { type empty; description "Enable route flap damping"; } container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority } // container route-target container inet-bgpmcast { description "IPv4 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-bgpmcast container inet6-bgpmcast { description "IPv6 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-bgpmcast } // container family container egress-te { presence "enable egress-te"; description "Use Egress Peering traffic engineering"; uses apply-advanced; leaf install-address { type jt:ipaddr; description "Address to use in egress-te created inet route"; } container rib { description "Select primary table for Egress-TE routes"; uses apply-advanced; leaf inet.0 { type empty; description "Install Egress-TE routes in inet.0"; } leaf inet6.0 { type empty; description "Install Egress-TE routes in inet6.0"; } } // container rib leaf no-install { type empty; description "Avoid installation to FIB or resolving over"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy to set attributes"; } leaf backup-path { junos:must "("protocols bgp egress-te-backup-paths template $$")"; junos:must-message "bgp egress-te-backup-paths template not configured"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "The 'egress-te-backup-paths template' to use for this peer"; } } // container egress-te leaf advertise-prefix-sid { type empty; description "Advertise prefix sid to E-BGP peers"; } leaf accept-prefix-sid { type empty; description "Accept prefix sid from E-BGP peers"; } leaf advertise-srgb { type empty; description "Advertise SRGB TLV"; } leaf egress-te-sid-stats { type empty; description "Create BGP-Peer-SID sensor"; } list egress-te-set-segment { key "name"; ordered-by user; description "Configure BGP-Peer-Set segment"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "The BGP-Peer-Set segment name"; } uses apply-advanced; container label { description "BGP-Peer-Set SID label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "BGP-Peer-Set SID label value from static label pool"; } } // container label container egress-te-backup-segment { description "Backup segment for FRR"; uses apply-advanced; container label { description "Backup segment label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Backup segment label value from static label pool"; } } // container label } // container egress-te-backup-segment container egress-te-backup-ip-forward { presence "enable egress-te-backup-ip-forward"; description "Use IP-forward backup path for Egress TE"; uses apply-advanced; leaf instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance to use as IP forward backup-path"; } } // container egress-te-backup-ip-forward } // list egress-te-set-segment list group { key "name"; ordered-by user; description "Define a peer group"; leaf name { type string; description "Group name"; } uses apply-advanced; leaf type { type enumeration { enum "internal" { value 0; description "IBGP group"; } enum "external" { value 1; description "EBGP group"; } } description "Type of peer group"; } leaf protocol { type enumeration { enum "rip" { value 0; status deprecated; description "Use RIP to resolve the BGP next hop"; } enum "ospf" { value 1; status deprecated; description "Use OSPF to resolve the BGP next hop"; } enum "isis" { value 2; status deprecated; description "Use IS-IS to resolve the BGP next hop"; } } status deprecated; description "IGP to use to resolve the next hop"; } container traceoptions { description "Trace options for BGP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "damping" { value 0; description "Trace BGP damping information"; } enum "packets" { value 1; description "Trace all BGP protocol packets"; } enum "open" { value 2; description "Trace BGP open packets"; } enum "update" { value 3; description "Trace BGP update packets"; } enum "keepalive" { value 4; description "Trace BGP keepalive packets"; } enum "refresh" { value 5; description "Trace BGP refresh packets"; } enum "nsr-synchronization" { value 6; description "Trace NSR synchronization events"; } enum "bfd" { value 7; description "Trace BFD events"; } enum "4byte-as" { value 8; description "Trace 4 byte AS events"; } enum "add-path" { value 9; description "Trace add-path events"; } enum "graceful-restart" { value 10; description "Trace Graceful Restart events"; } enum "egress-te" { value 11; description "Egress Peering Traffic-Engineering events"; } enum "thread-io" { value 12; description "Trace threaded I/O processing"; } enum "sharding" { value 13; description "Trace BGP rib sharding"; } enum "thread-update-io" { value 14; description "Trace threaded update I/O processing"; } enum "route-validation" { value 15; description "Trace route validation"; } enum "ipsec" { value 16; description "Trace ipsec"; } enum "route" { value 17; description "Trace routing information"; } enum "normal" { value 18; description "Trace normal events"; } enum "general" { value 19; description "Trace general events"; } enum "state" { value 20; description "Trace state transitions"; } enum "policy" { value 21; description "Trace policy processing"; } enum "task" { value 22; description "Trace routing protocol task processing"; } enum "timer" { value 23; description "Trace routing protocol timer processing"; } enum "all" { value 24; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses bgp_filter_obj; } // container filter } // list flag } // container traceoptions leaf description { type string { length "1 .. 255"; } description "Text description"; } container metric-out { description "Route metric sent in MED"; choice metric_param { leaf metric-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Metric value"; } container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container igp { presence "enable igp"; description "Track the IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } leaf delay-med-update { type empty; description "Delay updating MED when IGP metric increases"; } } // container igp container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_param } // container metric-out container multihop { presence "enable multihop"; description "Configure an EBGP multihop session"; uses apply-advanced; leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "TTL value for the session"; } leaf no-nexthop-change { type empty; description "Do not change next hop to self in advertisements"; } } // container multihop leaf route-server-client { type empty; description "Enable route server client behavior"; } leaf accept-remote-nexthop { type empty; description "Allow import policy to specify a non-directly connected next-hop"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of LOCAL_PREF path attribute"; } leaf local-address { type jt:ipaddr; description "Address of local end of BGP session"; } leaf local-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Local interface for IPv6 link local EBGP peering"; } leaf forwarding-context { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance used for data-forwarding and transport-session"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Hold time used when negotiating with a peer"; } leaf minimum-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 65535"; } } description "Minimum hold time accepted from the peer"; } leaf passive { type empty; description "Do not send open messages to a peer"; } leaf advertise-inactive { type empty; description "Advertise inactive routes"; } choice advertise-peer-as-choice { leaf advertise-peer-as { type empty; description "Advertise routes received from the same autonomous system"; } leaf no-advertise-peer-as { type empty; description "Don't advertise routes received from the same autonomous system"; } } // choice advertise-peer-as-choice container advertise-external { presence "enable advertise-external"; description "Advertise best external routes"; leaf conditional { type empty; description "Route matches active route upto med-comparison rule"; } } // container advertise-external leaf keep { type enumeration { enum "all" { value 0; description "Retain all routes"; } enum "none" { value 1; description "Retain no routes"; } } description "How to retain routes in the routing table"; } leaf rfc6514-compliant-safi129 { type empty; description "Compliant with RFC6514 SAFI129 format"; } leaf no-aggregator-id { type empty; description "Set router ID in aggregator path attribute to 0"; } leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf enforce-first-as { type empty; description "Enforce first AS in AS-path is the neighbor's AS"; } leaf out-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "How long before exporting routes from routing table"; } leaf ttl { junos:must "((!(".. .. type internal") && !(".. multihop")))"; junos:must-message "This option is valid only for single-hop EBGP neighbor"; type enumeration { enum "1" { value 0; } enum "255" { value 1; } } description "TTL value for the single-hop peer"; } leaf log-updown { type empty; description "Log a message for peer state transitions"; } leaf damping { type empty; description "Enable route flap damping"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf-list nlri { type enumeration { enum "unicast" { value 0; status deprecated; description "Include unicast NLRI"; } enum "multicast" { value 1; status deprecated; description "Include multicast NLRI"; } enum "any" { value 2; status deprecated; description "Include any kind of NLRI"; } } ordered-by user; status deprecated; description "NLRI type to include in updates"; } container bgp-error-tolerance { presence "enable bgp-error-tolerance"; description "Handle BGP malformed updates softly"; uses apply-advanced; leaf malformed-update-log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 65535"; } } units "seconds"; default "300"; description "Time used when logging malformed update"; } choice malformed-routes-limit-choice { leaf malformed-route-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } default "1000"; description "Maximum number of malformed routes from a peer"; } leaf no-malformed-route-limit { type empty; description "No malformed route limit"; } } // choice malformed-routes-limit-choice } // container bgp-error-tolerance container family { description "Protocol family for NLRIs in updates"; uses apply-advanced; container inet { description "IPv4 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet container inet-vpn { description "IPv4 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet-vpn container inet6 { description "IPv6 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-inet6-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet6-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet6 container inet6-vpn { description "IPv6 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet6-vpn container iso-vpn { description "ISO Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-vpn-protection; } // container unicast } // container iso-vpn container l2vpn { description "MPLS-based Layer 2 VPN and VPLS NLRI parameters"; uses apply-advanced; container auto-discovery-only { presence "enable auto-discovery-only"; description "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS"; uses bgp-afi-default; } // container auto-discovery-only container auto-discovery-mspw { presence "enable auto-discovery-mspw"; description "Include auto-discovery NLRI for LDP Signalled MultiSegment PW"; uses bgp-afi-default; } // container auto-discovery-mspw container signaling { presence "enable signaling"; description "Include Layer 2 VPN and VPLS signaling NLRI"; uses bgp-afi-l2vpn; } // container signaling } // container l2vpn container evpn { description "EVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include EVPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container evpn container inet-mvpn { description "IPv4 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mvpn container inet6-mvpn { description "IPv6 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-mvpn container inet-mdt { description "IPv4 Multicast Distribution Tree (MDT) NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN auto-discovery NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mdt container traffic-engineering { description "Traffic Engineering (BGP-TE) NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include BGP-TE NLRI"; uses bgp-afi-default; } // container unicast } // container traffic-engineering container route-target { presence "enable route-target"; description "Route target NLRI used for VPN route filtering"; uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container proxy-generate { presence "enable proxy-generate"; description "Generate route target NLRI for peers that don't support it"; uses apply-advanced; leaf-list route-target-policy { type jt:policy-algebra; ordered-by user; description "Limit VPN routes that are used to generate proxy route-target filters"; } } // container proxy-generate leaf external-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 256"; } } description "Number of external paths accepted for route filtering"; } leaf advertise-default { type empty; description "Advertise default and suppress more specific routes"; } leaf damping { type empty; description "Enable route flap damping"; } container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority } // container route-target container inet-bgpmcast { description "IPv4 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-bgpmcast container inet6-bgpmcast { description "IPv6 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-bgpmcast } // container family leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } container remove-private { presence "enable remove-private"; description "Remove well-known private AS numbers"; uses apply-advanced; container all { presence "enable all"; description "Remove all private AS numbers and do not stop at the first public AS number"; container replace { presence "enable replace"; description "Replace private AS numbers with the BGP Group's local AS number"; leaf nearest { type empty; description "Use closest public AS number to replace a private AS number"; } } // container replace } // container all leaf no-peer-loop-check { type empty; description "Remove peer loop-check"; } } // container remove-private leaf cluster { type jt:areaid; description "Cluster identifier"; } leaf no-client-reflect { type empty; description "Disable intracluster route redistribution"; } leaf peer-as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } container local-as { description "Local autonomous system number"; leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf loops { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 10"; } } description "Maximum number of times this AS can be in an AS path"; } leaf private { type empty; description "Hide this local AS in paths learned from this peering"; } leaf alias { type empty; description "Treat this AS as an alias to the system AS"; } leaf no-prepend-global-as { type empty; description "Do not prepend global autonomous-system number in advertised paths"; } } // container local-as leaf ipsec-sa { junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec Security Association must be defined"; type string { length "1 .. 32"; } description "IPSec SA name"; } container graceful-shutdown { description "BGP peer graceful shutdown option"; uses apply-advanced; container receiver { presence "enable receiver"; description "BGP peer graceful-shutdown receiver"; uses apply-advanced; leaf disable { junos:must "(!(".. .. sender"))"; junos:must-message "Receiver cannot be disabled on Sender"; type empty; description "Disable graceful-shutdown receiver"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of receiver LOCAL_PREF path attribute"; } } // container receiver container sender { presence "enable sender"; description "BGP peer graceful-shutdown sender"; uses apply-advanced; leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of sender LOCAL_PREF path attribute"; } } // container sender } // container graceful-shutdown container shutdown { presence "enable shutdown"; description "Shutdown"; uses apply-advanced; leaf notify-message { type string; description "Notification message"; } } // container shutdown leaf unconfigured-peer-graceful-restart { junos:must "(".. graceful-restart")"; junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'"; type empty; description "BGP unconfigured peer graceful restart options"; } container graceful-restart { presence "enable graceful-restart"; description "BGP graceful restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-time { junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))"; junos:must-message "restart-time is only valid with 'routing-options graceful-restart'"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Restart time used when negotiating with a peer"; } leaf stale-routes-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Maximum time for which stale routes are kept"; } container long-lived { description "Long-lived graceful restart options"; uses apply-advanced; container receiver { description "Long-lived graceful restart receiver (helper) options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable receiver (helper) functionality"; } } // choice enable-disable } // container receiver container advertise-to-non-llgr-neighbor { presence "enable advertise-to-non-llgr-neighbor"; description "Advertise stale routes to non-LLGR neighbors"; uses apply-advanced; leaf omit-no-export { type empty; description "Do not attach no-export community to stale routes"; } } // container advertise-to-non-llgr-neighbor } // container long-lived leaf disable-notification-extensions { type empty; description "Disable notification extensions"; } leaf forwarding-state-bit { type enumeration { enum "as-rr-client" { value 0; description "As for a route reflector client"; } enum "from-fib" { value 1; description "Always use state of associated FIB(s)"; } } description "Control forwarding-state flag negotiation"; } leaf dont-help-shared-fate-bfd-down { type empty; description "Honor BFD-Down(C=0) if GR-restart not in progress"; } } // container graceful-restart leaf include-mp-next-hop { type empty; description "Include NEXT-HOP attribute in multiprotocol updates"; } leaf disable-4byte-as { type empty; description "Disable 4 byte AS capability advertisement"; } container idle-after-switch-over { description "Stop peer session from coming up after nonstop-routing switch-over"; choice idle-interval { leaf forever { type empty; description "Idle the peer until the user intervenes"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Timeout value, in seconds, for starting peer after switch over"; } } // choice idle-interval } // container idle-after-switch-over container outbound-route-filter { junos:must "(!("system processes routing bgp update-threading"))"; junos:must-message "Can't be configured together with update-threading"; description "Dynamically negotiated cooperative route filtering"; uses apply-advanced; leaf bgp-orf-cisco-mode { type empty; description "Using BGP ORF capability code 130 and Prefix ORF type 128"; } container extended-community { status deprecated; description "Extended community filtering"; uses apply-advanced; choice accept-choice { leaf accept { type empty; description "Honor remote requests for extended community ORF"; } leaf no-accept { type empty; description "Don't honor remote requests for extended community ORF"; } } // choice accept-choice leaf vrf-filter { type empty; description "Request remote filtering using locally configured VRF import targets"; } } // container extended-community container prefix-based { presence "enable prefix-based"; description "Prefix-based outbound route filtering"; uses apply-advanced; container accept { presence "enable accept"; description "Honor Prefix-based ORFs from remote peers"; uses apply-advanced; leaf inet { type empty; description "Honor IPv4 prefix filters"; } leaf inet6 { type empty; description "Honor IPv6 prefix filters"; } } // container accept } // container prefix-based } // container outbound-route-filter container message-batching { status deprecated; description "DEPRECATED - Batching of outgoing messages"; uses apply-advanced; choice enable-disable { leaf enable { type empty; description "Enable parameter"; } leaf disable { type empty; description "Disable parameter"; } } // choice enable-disable leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "100 .. 1000"; } } units "milliseconds"; default "250"; description "DEPRECATED - Interval over which to batch messages"; } } // container message-batching container multipath { presence "enable multipath"; description "Allow load sharing among multiple BGP paths"; uses apply-advanced; leaf disable { type empty; description "Disable Multipath"; } leaf multiple-as { type empty; description "Use paths received from different ASs"; } leaf allow-protection { type empty; description "Allow protection for multipath legs"; } leaf pause-computation-during-churn { type empty; description "Pause multipath job to absorb churn"; } leaf list-nexthop { type empty; description "Use List-NH for homogenous nexthop-set also"; } } // container multipath leaf tcp-mss { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4096"; } } description "Maximum TCP segment size"; } leaf bgp-identifier { type jt:ipv4addr; description "BGP Identifier"; } leaf tcp-aggressive-transmission { type empty; description "Enable aggressive transmission of pure TCP ACKs and retransmissions"; } container bmp { description "Specific settings to override the routing-options settings"; uses apply-advanced; leaf monitor { type enumeration { enum "enable" { value 0; description "Enable monitoring of BGP peer(s)"; } enum "disable" { value 1; description "Disable monitoring of BGP peer(s)"; } } description "Enable/Disable monitoring"; } container route-monitoring { description "Control route monitoring settings"; uses apply-advanced; leaf none { junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))"; junos:must-message "May not be configured with pre-policy or post-policy or rib-out"; type empty; description "Do not send route monitoring messages"; } container pre-policy { presence "enable pre-policy"; description "Send pre-policy route monitoring messages"; leaf exclude-non-feasible { type empty; description "Exclude looped routes, etc"; } } // container pre-policy container post-policy { presence "enable post-policy"; description "Send post-policy route monitoring messages"; leaf exclude-non-eligible { type empty; description "Exclude unresolved routes, etc."; } } // container post-policy container rib-out { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured together with bmp rib-out monitoring"; presence "enable rib-out"; description "Send adj-ribs-out route monitoring messages"; leaf pre-policy { type empty; description "Send pre-policy adj-ribs-out route monitoring messages"; } leaf post-policy { type empty; description "Send post-policy adj-ribs-out route monitoring messages"; } } // container rib-out } // container route-monitoring } // container bmp container advertise-bgp-static { presence "enable advertise-bgp-static"; description "Advertise bgp-static routes"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Static route advertisement policy"; } } // container advertise-bgp-static leaf add-path-display-ipv4-address { type empty; description "Display add-path path-id in IPv4 address format"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf session-mode { type enumeration { enum "automatic" { value 0; description "Choose session-mode automatically"; } enum "single-hop" { value 1; description "Use single-hop"; } enum "multihop" { value 2; description "Use multihop"; } } default "automatic"; description "BFD single-hop or multihop session-mode"; } leaf holddown-interval { junos:must "(!(".. .. type internal"))"; junos:must-message "bfd holddown-interval is only valid for EBGP."; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection leaf as-override { type empty; description "Replace neighbor AS number with our AS number"; } leaf-list allow { type jt:ipprefix; ordered-by user; description "Configure peer connections for specific networks"; } list dynamic-neighbor { key "name"; ordered-by user; description "Configure peer options for specific networks"; leaf name { junos:must "((".. allow" || ".. peer-auto-discovery"))"; junos:must-message "dynamic-neighbor must enable allow or peer-auto-discovery"; type string; description "Template name"; } uses apply-advanced; leaf-list allow { type jt:ipprefix; ordered-by user; description "Configure peer connections for specific networks"; } leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } container peer-auto-discovery { junos:must "((!(".. authentication-algorithm") && (!(".. .. authentication-algorithm") && !(".. .. .. authentication-algorithm"))))"; junos:must-message "Can't be configured along with authentication-algorithm"; junos:must "((!(".. authentication-key") && (!(".. .. authentication-key") && !(".. .. .. authentication-key"))))"; junos:must-message "Can't be configured along with authentication-key"; junos:must "(!(".. allow"))"; junos:must-message "peer-auto-discovery and allow cannot be configured in the same dynamic-neighbor"; junos:must "((!(".. .. type internal") && !(".. .. multihop")))"; junos:must-message "peer-auto-discovery is valid only for single-hop EBGP neighbor"; description "Configure auto-discovery options for BGP neighbors"; uses apply-advanced; container family { description "Address family based neighbor auto-discovery parameters"; container inet6 { uses apply-advanced; choice auto-discovery-type { container ipv6-nd { presence "enable ipv6-nd"; description "Use ipv6 neighbor discovery to learn neighbor address"; } // container ipv6-nd } // choice auto-discovery-type } // container inet6 } // container family list interface { key "name"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Configure interfaces over which to discover bgp neighbors"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable peer discovery on interface"; } } // choice enable-disable } // list interface } // container peer-auto-discovery } // list dynamic-neighbor container optimal-route-reflection { junos:must "(".. type internal")"; junos:must-message "Must be configured with type internal"; description "Enable optimal route reflection for this client group"; uses apply-advanced; leaf igp-primary { type jt:ipv4addr; description "Primary node identifier for this client group"; } leaf igp-backup { type jt:ipv4addr; description "Backup node identifier for this client group"; } } // container optimal-route-reflection leaf peer-as-list { junos:must "((".. allow" || ".. dynamic-neighbor"))"; junos:must-message "May be configured only with allow or dynamic-neighbor"; type string; description "Configure list of peer autonomous systems for unconfigured neighbors"; } leaf mvpn-iana-rt-import { type empty; status deprecated; description "Use IANA assigned rt-import type value for MVPN"; } list neighbor { key "name"; ordered-by user; description "Configure a neighbor"; leaf name { type jt:ipaddr-scoped; } uses apply-advanced; container traceoptions { description "Trace options for BGP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "damping" { value 0; description "Trace BGP damping information"; } enum "packets" { value 1; description "Trace all BGP protocol packets"; } enum "open" { value 2; description "Trace BGP open packets"; } enum "update" { value 3; description "Trace BGP update packets"; } enum "keepalive" { value 4; description "Trace BGP keepalive packets"; } enum "refresh" { value 5; description "Trace BGP refresh packets"; } enum "nsr-synchronization" { value 6; description "Trace NSR synchronization events"; } enum "bfd" { value 7; description "Trace BFD events"; } enum "4byte-as" { value 8; description "Trace 4 byte AS events"; } enum "add-path" { value 9; description "Trace add-path events"; } enum "graceful-restart" { value 10; description "Trace Graceful Restart events"; } enum "egress-te" { value 11; description "Egress Peering Traffic-Engineering events"; } enum "thread-io" { value 12; description "Trace threaded I/O processing"; } enum "sharding" { value 13; description "Trace BGP rib sharding"; } enum "thread-update-io" { value 14; description "Trace threaded update I/O processing"; } enum "route-validation" { value 15; description "Trace route validation"; } enum "ipsec" { value 16; description "Trace ipsec"; } enum "route" { value 17; description "Trace routing information"; } enum "normal" { value 18; description "Trace normal events"; } enum "general" { value 19; description "Trace general events"; } enum "state" { value 20; description "Trace state transitions"; } enum "policy" { value 21; description "Trace policy processing"; } enum "task" { value 22; description "Trace routing protocol task processing"; } enum "timer" { value 23; description "Trace routing protocol timer processing"; } enum "all" { value 24; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses bgp_filter_obj; } // container filter } // list flag } // container traceoptions leaf description { type string { length "1 .. 255"; } description "Text description"; } container metric-out { description "Route metric sent in MED"; choice metric_param { leaf metric-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Metric value"; } container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container igp { presence "enable igp"; description "Track the IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } leaf delay-med-update { type empty; description "Delay updating MED when IGP metric increases"; } } // container igp container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_param } // container metric-out container multihop { presence "enable multihop"; description "Configure an EBGP multihop session"; uses apply-advanced; leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "TTL value for the session"; } leaf no-nexthop-change { type empty; description "Do not change next hop to self in advertisements"; } } // container multihop leaf route-server-client { type empty; description "Enable route server client behavior"; } leaf accept-remote-nexthop { type empty; description "Allow import policy to specify a non-directly connected next-hop"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of LOCAL_PREF path attribute"; } leaf local-address { type jt:ipaddr; description "Address of local end of BGP session"; } leaf local-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Local interface for IPv6 link local EBGP peering"; } leaf forwarding-context { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance used for data-forwarding and transport-session"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Hold time used when negotiating with a peer"; } leaf minimum-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 65535"; } } description "Minimum hold time accepted from the peer"; } leaf passive { type empty; description "Do not send open messages to a peer"; } leaf advertise-inactive { type empty; description "Advertise inactive routes"; } choice advertise-peer-as-choice { leaf advertise-peer-as { type empty; description "Advertise routes received from the same autonomous system"; } leaf no-advertise-peer-as { type empty; description "Don't advertise routes received from the same autonomous system"; } } // choice advertise-peer-as-choice container advertise-external { presence "enable advertise-external"; description "Advertise best external routes"; leaf conditional { type empty; description "Route matches active route upto med-comparison rule"; } } // container advertise-external leaf keep { type enumeration { enum "all" { value 0; description "Retain all routes"; } enum "none" { value 1; description "Retain no routes"; } } description "How to retain routes in the routing table"; } leaf rfc6514-compliant-safi129 { type empty; description "Compliant with RFC6514 SAFI129 format"; } leaf no-aggregator-id { type empty; description "Set router ID in aggregator path attribute to 0"; } leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf enforce-first-as { type empty; description "Enforce first AS in AS-path is the neighbor's AS"; } leaf out-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "How long before exporting routes from routing table"; } leaf ttl { junos:must "((!(".. .. type internal") && !(".. multihop")))"; junos:must-message "This option is valid only for single-hop EBGP neighbor"; type enumeration { enum "1" { value 0; } enum "255" { value 1; } } description "TTL value for the single-hop peer"; } leaf log-updown { type empty; description "Log a message for peer state transitions"; } leaf damping { type empty; description "Enable route flap damping"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf-list nlri { type enumeration { enum "unicast" { value 0; status deprecated; description "Include unicast NLRI"; } enum "multicast" { value 1; status deprecated; description "Include multicast NLRI"; } enum "any" { value 2; status deprecated; description "Include any kind of NLRI"; } } ordered-by user; status deprecated; description "NLRI type to include in updates"; } container bgp-error-tolerance { presence "enable bgp-error-tolerance"; description "Handle BGP malformed updates softly"; uses apply-advanced; leaf malformed-update-log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 65535"; } } units "seconds"; default "300"; description "Time used when logging malformed update"; } choice malformed-routes-limit-choice { leaf malformed-route-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } default "1000"; description "Maximum number of malformed routes from a peer"; } leaf no-malformed-route-limit { type empty; description "No malformed route limit"; } } // choice malformed-routes-limit-choice } // container bgp-error-tolerance container family { description "Protocol family for NLRIs in updates"; uses apply-advanced; container inet { description "IPv4 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet container inet-vpn { description "IPv4 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow-with-redirect-ip-action; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet-vpn container inet6 { description "IPv6 NLRI parameters"; uses apply-advanced; container labeled-unicast { presence "enable labeled-unicast"; description "Include labeled unicast NLRI"; uses bgp-afi-inet6-labeled; } // container labeled-unicast container segment-routing-te { presence "enable segment-routing-te"; description "Include segment-routing TE policy"; uses bgp-afi-srte; } // container segment-routing-te container transport { presence "enable transport"; description "Include Classful Transport NLRI"; uses bgp-afi-inet6-transport; } // container transport container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-topo; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-default; } // container multicast container flow { presence "enable flow"; description "Include flow NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-default; } // container any } // container inet6 container inet6-vpn { description "IPv6 Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-l3vpn; } // container unicast container multicast { presence "enable multicast"; description "Include multicast NLRI"; uses bgp-afi-vpn; } // container multicast container flow { presence "enable flow"; description "Include flow VPN NLRI"; uses bgp-afi-flow; } // container flow container any { presence "enable any"; description "Include unicast or multicast NLRI"; uses bgp-afi-vpn; } // container any } // container inet6-vpn container iso-vpn { description "ISO Layer 3 VPN NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include unicast NLRI"; uses bgp-afi-vpn-protection; } // container unicast } // container iso-vpn container l2vpn { description "MPLS-based Layer 2 VPN and VPLS NLRI parameters"; uses apply-advanced; container auto-discovery-only { presence "enable auto-discovery-only"; description "Include auto-discovery NLRI for LDP Layer 2 VPN and VPLS"; uses bgp-afi-default; } // container auto-discovery-only container auto-discovery-mspw { presence "enable auto-discovery-mspw"; description "Include auto-discovery NLRI for LDP Signalled MultiSegment PW"; uses bgp-afi-default; } // container auto-discovery-mspw container signaling { presence "enable signaling"; description "Include Layer 2 VPN and VPLS signaling NLRI"; uses bgp-afi-l2vpn; } // container signaling } // container l2vpn container evpn { description "EVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include EVPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container evpn container inet-mvpn { description "IPv4 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mvpn container inet6-mvpn { description "IPv6 MVPN NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 multicast VPN signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-mvpn container inet-mdt { description "IPv4 Multicast Distribution Tree (MDT) NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 multicast VPN auto-discovery NLRI"; uses bgp-afi-default; } // container signaling } // container inet-mdt container traffic-engineering { description "Traffic Engineering (BGP-TE) NLRI parameters"; uses apply-advanced; container unicast { presence "enable unicast"; description "Include BGP-TE NLRI"; uses bgp-afi-default; } // container unicast } // container traffic-engineering container route-target { presence "enable route-target"; description "Route target NLRI used for VPN route filtering"; uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container proxy-generate { presence "enable proxy-generate"; description "Generate route target NLRI for peers that don't support it"; uses apply-advanced; leaf-list route-target-policy { type jt:policy-algebra; ordered-by user; description "Limit VPN routes that are used to generate proxy route-target filters"; } } // container proxy-generate leaf external-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 256"; } } description "Number of external paths accepted for route filtering"; } leaf advertise-default { type empty; description "Advertise default and suppress more specific routes"; } leaf damping { type empty; description "Enable route flap damping"; } container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority } // container route-target container inet-bgpmcast { description "IPv4 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv4 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet-bgpmcast container inet6-bgpmcast { description "IPv6 BGPMCAST NLRI parameters"; uses apply-advanced; container signaling { presence "enable signaling"; description "Include IPv6 BGP multicast signaling NLRI"; uses bgp-afi-default; } // container signaling } // container inet6-bgpmcast } // container family leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } container remove-private { presence "enable remove-private"; description "Remove well-known private AS numbers"; uses apply-advanced; container all { presence "enable all"; description "Remove all private AS numbers and do not stop at the first public AS number"; container replace { presence "enable replace"; description "Replace private AS numbers with the BGP Group's local AS number"; leaf nearest { type empty; description "Use closest public AS number to replace a private AS number"; } } // container replace } // container all leaf no-peer-loop-check { type empty; description "Remove peer loop-check"; } } // container remove-private leaf cluster { type jt:areaid; description "Cluster identifier"; } leaf no-client-reflect { type empty; description "Disable intracluster route redistribution"; } leaf peer-as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } container local-as { description "Local autonomous system number"; leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf loops { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 10"; } } description "Maximum number of times this AS can be in an AS path"; } leaf private { type empty; description "Hide this local AS in paths learned from this peering"; } leaf alias { type empty; description "Treat this AS as an alias to the system AS"; } leaf no-prepend-global-as { type empty; description "Do not prepend global autonomous-system number in advertised paths"; } } // container local-as leaf ipsec-sa { junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec Security Association must be defined"; type string { length "1 .. 32"; } description "IPSec SA name"; } container graceful-shutdown { description "BGP peer graceful shutdown option"; uses apply-advanced; container receiver { presence "enable receiver"; description "BGP peer graceful-shutdown receiver"; uses apply-advanced; leaf disable { junos:must "(!(".. .. sender"))"; junos:must-message "Receiver cannot be disabled on Sender"; type empty; description "Disable graceful-shutdown receiver"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of receiver LOCAL_PREF path attribute"; } } // container receiver container sender { presence "enable sender"; description "BGP peer graceful-shutdown sender"; uses apply-advanced; leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of sender LOCAL_PREF path attribute"; } } // container sender } // container graceful-shutdown container shutdown { presence "enable shutdown"; description "Shutdown"; uses apply-advanced; leaf notify-message { type string; description "Notification message"; } } // container shutdown leaf unconfigured-peer-graceful-restart { junos:must "(".. graceful-restart")"; junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'"; type empty; description "BGP unconfigured peer graceful restart options"; } container graceful-restart { presence "enable graceful-restart"; description "BGP graceful restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-time { junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))"; junos:must-message "restart-time is only valid with 'routing-options graceful-restart'"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Restart time used when negotiating with a peer"; } leaf stale-routes-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Maximum time for which stale routes are kept"; } container long-lived { description "Long-lived graceful restart options"; uses apply-advanced; container receiver { description "Long-lived graceful restart receiver (helper) options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable receiver (helper) functionality"; } } // choice enable-disable } // container receiver container advertise-to-non-llgr-neighbor { presence "enable advertise-to-non-llgr-neighbor"; description "Advertise stale routes to non-LLGR neighbors"; uses apply-advanced; leaf omit-no-export { type empty; description "Do not attach no-export community to stale routes"; } } // container advertise-to-non-llgr-neighbor } // container long-lived leaf disable-notification-extensions { type empty; description "Disable notification extensions"; } leaf forwarding-state-bit { type enumeration { enum "as-rr-client" { value 0; description "As for a route reflector client"; } enum "from-fib" { value 1; description "Always use state of associated FIB(s)"; } } description "Control forwarding-state flag negotiation"; } leaf dont-help-shared-fate-bfd-down { type empty; description "Honor BFD-Down(C=0) if GR-restart not in progress"; } } // container graceful-restart leaf include-mp-next-hop { type empty; description "Include NEXT-HOP attribute in multiprotocol updates"; } leaf disable-4byte-as { type empty; description "Disable 4 byte AS capability advertisement"; } container idle-after-switch-over { description "Stop peer session from coming up after nonstop-routing switch-over"; choice idle-interval { leaf forever { type empty; description "Idle the peer until the user intervenes"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Timeout value, in seconds, for starting peer after switch over"; } } // choice idle-interval } // container idle-after-switch-over container outbound-route-filter { junos:must "(!("system processes routing bgp update-threading"))"; junos:must-message "Can't be configured together with update-threading"; description "Dynamically negotiated cooperative route filtering"; uses apply-advanced; leaf bgp-orf-cisco-mode { type empty; description "Using BGP ORF capability code 130 and Prefix ORF type 128"; } container extended-community { status deprecated; description "Extended community filtering"; uses apply-advanced; choice accept-choice { leaf accept { type empty; description "Honor remote requests for extended community ORF"; } leaf no-accept { type empty; description "Don't honor remote requests for extended community ORF"; } } // choice accept-choice leaf vrf-filter { type empty; description "Request remote filtering using locally configured VRF import targets"; } } // container extended-community container prefix-based { presence "enable prefix-based"; description "Prefix-based outbound route filtering"; uses apply-advanced; container accept { presence "enable accept"; description "Honor Prefix-based ORFs from remote peers"; uses apply-advanced; leaf inet { type empty; description "Honor IPv4 prefix filters"; } leaf inet6 { type empty; description "Honor IPv6 prefix filters"; } } // container accept } // container prefix-based } // container outbound-route-filter container message-batching { status deprecated; description "DEPRECATED - Batching of outgoing messages"; uses apply-advanced; choice enable-disable { leaf enable { type empty; description "Enable parameter"; } leaf disable { type empty; description "Disable parameter"; } } // choice enable-disable leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "100 .. 1000"; } } units "milliseconds"; default "250"; description "DEPRECATED - Interval over which to batch messages"; } } // container message-batching container multipath { presence "enable multipath"; description "Allow load sharing among multiple BGP paths"; uses apply-advanced; leaf disable { type empty; description "Disable Multipath"; } leaf multiple-as { type empty; description "Use paths received from different ASs"; } leaf allow-protection { type empty; description "Allow protection for multipath legs"; } leaf pause-computation-during-churn { type empty; description "Pause multipath job to absorb churn"; } leaf list-nexthop { type empty; description "Use List-NH for homogenous nexthop-set also"; } } // container multipath leaf tcp-mss { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4096"; } } description "Maximum TCP segment size"; } leaf bgp-identifier { type jt:ipv4addr; description "BGP Identifier"; } leaf tcp-aggressive-transmission { type empty; description "Enable aggressive transmission of pure TCP ACKs and retransmissions"; } container bmp { description "Specific settings to override the routing-options settings"; uses apply-advanced; leaf monitor { type enumeration { enum "enable" { value 0; description "Enable monitoring of BGP peer(s)"; } enum "disable" { value 1; description "Disable monitoring of BGP peer(s)"; } } description "Enable/Disable monitoring"; } container route-monitoring { description "Control route monitoring settings"; uses apply-advanced; leaf none { junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))"; junos:must-message "May not be configured with pre-policy or post-policy or rib-out"; type empty; description "Do not send route monitoring messages"; } container pre-policy { presence "enable pre-policy"; description "Send pre-policy route monitoring messages"; leaf exclude-non-feasible { type empty; description "Exclude looped routes, etc"; } } // container pre-policy container post-policy { presence "enable post-policy"; description "Send post-policy route monitoring messages"; leaf exclude-non-eligible { type empty; description "Exclude unresolved routes, etc."; } } // container post-policy container rib-out { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured together with bmp rib-out monitoring"; presence "enable rib-out"; description "Send adj-ribs-out route monitoring messages"; leaf pre-policy { type empty; description "Send pre-policy adj-ribs-out route monitoring messages"; } leaf post-policy { type empty; description "Send post-policy adj-ribs-out route monitoring messages"; } } // container rib-out } // container route-monitoring } // container bmp container advertise-bgp-static { presence "enable advertise-bgp-static"; description "Advertise bgp-static routes"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Static route advertisement policy"; } } // container advertise-bgp-static leaf add-path-display-ipv4-address { type empty; description "Display add-path path-id in IPv4 address format"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf session-mode { type enumeration { enum "automatic" { value 0; description "Choose session-mode automatically"; } enum "single-hop" { value 1; description "Use single-hop"; } enum "multihop" { value 2; description "Use multihop"; } } default "automatic"; description "BFD single-hop or multihop session-mode"; } leaf holddown-interval { junos:must "(!(".. .. .. type internal"))"; junos:must-message "bfd holddown-interval is only valid for EBGP."; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection leaf as-override { type empty; description "Replace neighbor AS number with our AS number"; } container egress-te-node-segment { description "Configure BGP-Peer-Node segment"; uses apply-advanced; container label { description "BGP-Peer-Node SID label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "BGP-Peer-Node SID label value from static label pool"; } } // container label container egress-te-set { description "Configure as a member of a SET segment"; uses apply-advanced; leaf set-name { junos:must "("protocols bgp egress-te-set-segment $$")"; junos:must-message "protocols bgp egress-te-set-segment not configured"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Set name"; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Weight for set segment"; } } // container egress-te-set container egress-te-backup-segment { description "Backup segment for FRR"; uses apply-advanced; container label { description "Backup segment label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Backup segment label value from static label pool"; } } // container label } // container egress-te-backup-segment container egress-te-backup-ip-forward { presence "enable egress-te-backup-ip-forward"; description "Use IP-forward backup path for Egress TE"; uses apply-advanced; leaf instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance to use as IP forward backup-path"; } } // container egress-te-backup-ip-forward } // container egress-te-node-segment list egress-te-adj-segment { key "name"; description "Configure BGP-Peer-Adj segment"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "The BGP-Adj-Set segment name"; } uses apply-advanced; container label { junos:must "(".. next-hop")"; junos:must-message "The 'egress-te-adj-segment next-hop' must be configured"; description "BGP-Peer-Adj SID label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "BGP-Peer-Adj SID label value from static label pool"; } } // container label container next-hop { junos:must "(".. label")"; junos:must-message "The 'egress-te-adj-segment label' must be configured"; description "Address of directly connected next-hop to use"; uses apply-advanced; leaf next-hop-addr { type jt:ipaddr; description "Address of directly connected next-hop"; } } // container next-hop container egress-te-set { description "Configure as a member of a SET segment"; uses apply-advanced; leaf set-name { junos:must "("protocols bgp egress-te-set-segment $$")"; junos:must-message "protocols bgp egress-te-set-segment not configured"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Set name"; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Weight for set segment"; } } // container egress-te-set container egress-te-backup-segment { description "Backup segment for FRR"; uses apply-advanced; container label { description "Backup segment label from static label pool"; uses apply-advanced; leaf label-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Backup segment label value from static label pool"; } } // container label } // container egress-te-backup-segment container egress-te-backup-ip-forward { presence "enable egress-te-backup-ip-forward"; description "Use IP-forward backup path for Egress TE"; uses apply-advanced; leaf instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance to use as IP forward backup-path"; } } // container egress-te-backup-ip-forward container te-link-attribute { presence "enable te-link-attribute"; description "Link attribute"; uses apply-advanced; leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } default "1"; description "TE Metric value"; } leaf igp-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } default "1"; description "IGP Metric value"; } leaf-list admin-group { type string; max-elements 16; ordered-by user; description "Administrative groups"; } } // container te-link-attribute } // list egress-te-adj-segment leaf vpn-apply-export { type empty; description "Apply BGP export policy when exporting VPN routes"; } container egress-te { presence "enable egress-te"; description "Use Egress Peering traffic engineering"; uses apply-advanced; leaf install-address { type jt:ipaddr; description "Address to use in egress-te created inet route"; } container rib { description "Select primary table for Egress-TE routes"; uses apply-advanced; leaf inet.0 { type empty; description "Install Egress-TE routes in inet.0"; } leaf inet6.0 { type empty; description "Install Egress-TE routes in inet6.0"; } } // container rib leaf no-install { type empty; description "Avoid installation to FIB or resolving over"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy to set attributes"; } leaf backup-path { junos:must "("protocols bgp egress-te-backup-paths template $$")"; junos:must-message "bgp egress-te-backup-paths template not configured"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "The 'egress-te-backup-paths template' to use for this peer"; } } // container egress-te leaf advertise-prefix-sid { type empty; description "Advertise prefix sid to E-BGP peers"; } leaf accept-prefix-sid { type empty; description "Accept prefix sid from E-BGP peers"; } leaf advertise-srgb { type empty; description "Advertise SRGB TLV"; } } // list neighbor leaf vpn-apply-export { type empty; description "Apply BGP export policy when exporting VPN routes"; } container egress-te { presence "enable egress-te"; description "Use Egress Peering traffic engineering"; uses apply-advanced; leaf install-address { type jt:ipaddr; description "Address to use in egress-te created inet route"; } container rib { description "Select primary table for Egress-TE routes"; uses apply-advanced; leaf inet.0 { type empty; description "Install Egress-TE routes in inet.0"; } leaf inet6.0 { type empty; description "Install Egress-TE routes in inet6.0"; } } // container rib leaf no-install { type empty; description "Avoid installation to FIB or resolving over"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy to set attributes"; } leaf backup-path { junos:must "("protocols bgp egress-te-backup-paths template $$")"; junos:must-message "bgp egress-te-backup-paths template not configured"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "The 'egress-te-backup-paths template' to use for this peer"; } } // container egress-te leaf advertise-prefix-sid { type empty; description "Advertise prefix sid to E-BGP peers"; } leaf accept-prefix-sid { type empty; description "Accept prefix sid from E-BGP peers"; } leaf advertise-srgb { type empty; description "Advertise SRGB TLV"; } } // list group container traffic-statistics-labeled-path { presence "enable traffic-statistics-labeled-path"; description "Collect periodic ingress labeled statistics for BGP label-switched paths "; uses apply-advanced; container file { description "Statistics file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file leaf interval { type union { type string { pattern "<.*>|$.*"; } type int32 { range "60 .. 65535"; } } units "seconds"; description "Time interval to collect statistics"; } } // container traffic-statistics-labeled-path container source-packet-routing { description "Enable Source Packet Routing (SPRING)"; uses apply-advanced; container srgb { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; junos:must "(".. .. .. .. protocols mpls ")"; junos:must-message "SPRING configuration is not allowed without 'protocols mpls'"; description "Set the SRGB global block in SPRING"; leaf start-label { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Start range for SRGB label block"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Index to the SRGB start label block"; } } // container srgb container srv6 { description "Enable IPv6 Segment Routing (SRv6)"; uses apply-advanced; list locator { key "name"; ordered-by user; description "SRv6 Locator"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced srv6 locator must be defined"; type string; description "Locator name"; } uses apply-advanced; leaf end-dt4-sid { type jt:ipv6addr; description "End dt4 sid with 128 bit address"; } leaf end-dt6-sid { type jt:ipv6addr; description "End dt6 sid with 128 bit address"; } } // list locator } // container srv6 } // container source-packet-routing choice enable-disable { leaf disable { type empty; description "Disable BGP"; } } // choice enable-disable choice precision-timers-choice { leaf precision-timers { type empty; description "Use precision timers for scheduling keepalives"; } leaf no-precision-timers { type empty; description "Don't use precision timers for scheduling keepalives"; } } // choice precision-timers-choice container snmp-options { description "Customize SNMP behaviors specifically for BGP MIBs"; uses apply-advanced; leaf backward-traps-only-from-established { type empty; description "Limit traps for backward transitions to only those moving from Established state."; } leaf emit-inet-address-length-in-oid { type empty; description "Emit Length in OID for InetAddress MIB type."; } } // container snmp-options leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } leaf prioritize-route-queueing { type empty; description "Let route-queue building happen without getting throttled"; } container traceoptions { description "Trace options for BGP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "damping" { value 0; description "Trace BGP damping information"; } enum "packets" { value 1; description "Trace all BGP protocol packets"; } enum "open" { value 2; description "Trace BGP open packets"; } enum "update" { value 3; description "Trace BGP update packets"; } enum "keepalive" { value 4; description "Trace BGP keepalive packets"; } enum "refresh" { value 5; description "Trace BGP refresh packets"; } enum "nsr-synchronization" { value 6; description "Trace NSR synchronization events"; } enum "bfd" { value 7; description "Trace BFD events"; } enum "4byte-as" { value 8; description "Trace 4 byte AS events"; } enum "add-path" { value 9; description "Trace add-path events"; } enum "graceful-restart" { value 10; description "Trace Graceful Restart events"; } enum "egress-te" { value 11; description "Egress Peering Traffic-Engineering events"; } enum "thread-io" { value 12; description "Trace threaded I/O processing"; } enum "sharding" { value 13; description "Trace BGP rib sharding"; } enum "thread-update-io" { value 14; description "Trace threaded update I/O processing"; } enum "route-validation" { value 15; description "Trace route validation"; } enum "ipsec" { value 16; description "Trace ipsec"; } enum "route" { value 17; description "Trace routing information"; } enum "normal" { value 18; description "Trace normal events"; } enum "general" { value 19; description "Trace general events"; } enum "state" { value 20; description "Trace state transitions"; } enum "policy" { value 21; description "Trace policy processing"; } enum "task" { value 22; description "Trace routing protocol task processing"; } enum "timer" { value 23; description "Trace routing protocol timer processing"; } enum "all" { value 24; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses bgp_filter_obj; } // container filter } // list flag } // container traceoptions leaf description { type string { length "1 .. 255"; } description "Text description"; } container metric-out { description "Route metric sent in MED"; choice metric_param { leaf metric-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Metric value"; } container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container igp { presence "enable igp"; description "Track the IGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } leaf delay-med-update { type empty; description "Delay updating MED when IGP metric increases"; } } // container igp container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric"; leaf metric-offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_param } // container metric-out container multihop { presence "enable multihop"; description "Configure an EBGP multihop session"; uses apply-advanced; leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "TTL value for the session"; } leaf no-nexthop-change { type empty; description "Do not change next hop to self in advertisements"; } } // container multihop leaf route-server-client { type empty; description "Enable route server client behavior"; } leaf accept-remote-nexthop { type empty; description "Allow import policy to specify a non-directly connected next-hop"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of LOCAL_PREF path attribute"; } leaf local-address { type jt:ipaddr; description "Address of local end of BGP session"; } leaf local-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Local interface for IPv6 link local EBGP peering"; } leaf forwarding-context { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing-instance used for data-forwarding and transport-session"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Hold time used when negotiating with a peer"; } leaf minimum-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 65535"; } } description "Minimum hold time accepted from the peer"; } leaf passive { type empty; description "Do not send open messages to a peer"; } leaf advertise-inactive { type empty; description "Advertise inactive routes"; } choice advertise-peer-as-choice { leaf advertise-peer-as { type empty; description "Advertise routes received from the same autonomous system"; } leaf no-advertise-peer-as { type empty; description "Don't advertise routes received from the same autonomous system"; } } // choice advertise-peer-as-choice container advertise-external { presence "enable advertise-external"; description "Advertise best external routes"; leaf conditional { type empty; description "Route matches active route upto med-comparison rule"; } } // container advertise-external leaf keep { type enumeration { enum "all" { value 0; description "Retain all routes"; } enum "none" { value 1; description "Retain no routes"; } } description "How to retain routes in the routing table"; } leaf rfc6514-compliant-safi129 { type empty; description "Compliant with RFC6514 SAFI129 format"; } leaf no-aggregator-id { type empty; description "Set router ID in aggregator path attribute to 0"; } leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf enforce-first-as { type empty; description "Enforce first AS in AS-path is the neighbor's AS"; } leaf out-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "How long before exporting routes from routing table"; } leaf ttl { junos:must "((!(".. .. type internal") && !(".. multihop")))"; junos:must-message "This option is valid only for single-hop EBGP neighbor"; type enumeration { enum "1" { value 0; } enum "255" { value 1; } } description "TTL value for the single-hop peer"; } leaf log-updown { type empty; description "Log a message for peer state transitions"; } leaf damping { type empty; description "Enable route flap damping"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf-list nlri { type enumeration { enum "unicast" { value 0; status deprecated; description "Include unicast NLRI"; } enum "multicast" { value 1; status deprecated; description "Include multicast NLRI"; } enum "any" { value 2; status deprecated; description "Include any kind of NLRI"; } } ordered-by user; status deprecated; description "NLRI type to include in updates"; } container bgp-error-tolerance { presence "enable bgp-error-tolerance"; description "Handle BGP malformed updates softly"; uses apply-advanced; leaf malformed-update-log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 65535"; } } units "seconds"; default "300"; description "Time used when logging malformed update"; } choice malformed-routes-limit-choice { leaf malformed-route-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } default "1000"; description "Maximum number of malformed routes from a peer"; } leaf no-malformed-route-limit { type empty; description "No malformed route limit"; } } // choice malformed-routes-limit-choice } // container bgp-error-tolerance leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } container remove-private { presence "enable remove-private"; description "Remove well-known private AS numbers"; uses apply-advanced; container all { presence "enable all"; description "Remove all private AS numbers and do not stop at the first public AS number"; container replace { presence "enable replace"; description "Replace private AS numbers with the BGP Group's local AS number"; leaf nearest { type empty; description "Use closest public AS number to replace a private AS number"; } } // container replace } // container all leaf no-peer-loop-check { type empty; description "Remove peer loop-check"; } } // container remove-private leaf cluster { type jt:areaid; description "Cluster identifier"; } leaf no-client-reflect { type empty; description "Disable intracluster route redistribution"; } leaf peer-as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } container local-as { description "Local autonomous system number"; leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf loops { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 10"; } } description "Maximum number of times this AS can be in an AS path"; } leaf private { type empty; description "Hide this local AS in paths learned from this peering"; } leaf alias { type empty; description "Treat this AS as an alias to the system AS"; } leaf no-prepend-global-as { type empty; description "Do not prepend global autonomous-system number in advertised paths"; } } // container local-as leaf ipsec-sa { junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec Security Association must be defined"; type string { length "1 .. 32"; } description "IPSec SA name"; } container graceful-shutdown { description "BGP peer graceful shutdown option"; uses apply-advanced; container receiver { presence "enable receiver"; description "BGP peer graceful-shutdown receiver"; uses apply-advanced; leaf disable { junos:must "(!(".. .. sender"))"; junos:must-message "Receiver cannot be disabled on Sender"; type empty; description "Disable graceful-shutdown receiver"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of receiver LOCAL_PREF path attribute"; } } // container receiver container sender { presence "enable sender"; description "BGP peer graceful-shutdown sender"; uses apply-advanced; leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Value of sender LOCAL_PREF path attribute"; } } // container sender } // container graceful-shutdown container shutdown { presence "enable shutdown"; description "Shutdown"; uses apply-advanced; leaf notify-message { type string; description "Notification message"; } } // container shutdown leaf unconfigured-peer-graceful-restart { junos:must "(".. graceful-restart")"; junos:must-message "unconfigured-peer-graceful-restart is only valid with 'graceful-restart'"; type empty; description "BGP unconfigured peer graceful restart options"; } container graceful-restart { presence "enable graceful-restart"; description "BGP graceful restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-time { junos:must "(("routing-options graceful-restart" || "fabric routing-options graceful-restart"))"; junos:must-message "restart-time is only valid with 'routing-options graceful-restart'"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Restart time used when negotiating with a peer"; } leaf stale-routes-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } description "Maximum time for which stale routes are kept"; } container long-lived { description "Long-lived graceful restart options"; uses apply-advanced; container receiver { description "Long-lived graceful restart receiver (helper) options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable receiver (helper) functionality"; } } // choice enable-disable } // container receiver container advertise-to-non-llgr-neighbor { presence "enable advertise-to-non-llgr-neighbor"; description "Advertise stale routes to non-LLGR neighbors"; uses apply-advanced; leaf omit-no-export { type empty; description "Do not attach no-export community to stale routes"; } } // container advertise-to-non-llgr-neighbor } // container long-lived leaf disable-notification-extensions { type empty; description "Disable notification extensions"; } leaf forwarding-state-bit { type enumeration { enum "as-rr-client" { value 0; description "As for a route reflector client"; } enum "from-fib" { value 1; description "Always use state of associated FIB(s)"; } } description "Control forwarding-state flag negotiation"; } leaf dont-help-shared-fate-bfd-down { type empty; description "Honor BFD-Down(C=0) if GR-restart not in progress"; } } // container graceful-restart leaf include-mp-next-hop { type empty; description "Include NEXT-HOP attribute in multiprotocol updates"; } leaf disable-4byte-as { type empty; description "Disable 4 byte AS capability advertisement"; } container idle-after-switch-over { description "Stop peer session from coming up after nonstop-routing switch-over"; choice idle-interval { leaf forever { type empty; description "Idle the peer until the user intervenes"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Timeout value, in seconds, for starting peer after switch over"; } } // choice idle-interval } // container idle-after-switch-over container outbound-route-filter { junos:must "(!("system processes routing bgp update-threading"))"; junos:must-message "Can't be configured together with update-threading"; description "Dynamically negotiated cooperative route filtering"; uses apply-advanced; leaf bgp-orf-cisco-mode { type empty; description "Using BGP ORF capability code 130 and Prefix ORF type 128"; } container extended-community { status deprecated; description "Extended community filtering"; uses apply-advanced; choice accept-choice { leaf accept { type empty; description "Honor remote requests for extended community ORF"; } leaf no-accept { type empty; description "Don't honor remote requests for extended community ORF"; } } // choice accept-choice leaf vrf-filter { type empty; description "Request remote filtering using locally configured VRF import targets"; } } // container extended-community container prefix-based { presence "enable prefix-based"; description "Prefix-based outbound route filtering"; uses apply-advanced; container accept { presence "enable accept"; description "Honor Prefix-based ORFs from remote peers"; uses apply-advanced; leaf inet { type empty; description "Honor IPv4 prefix filters"; } leaf inet6 { type empty; description "Honor IPv6 prefix filters"; } } // container accept } // container prefix-based } // container outbound-route-filter container message-batching { status deprecated; description "DEPRECATED - Batching of outgoing messages"; uses apply-advanced; choice enable-disable { leaf enable { type empty; description "Enable parameter"; } leaf disable { type empty; description "Disable parameter"; } } // choice enable-disable leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "100 .. 1000"; } } units "milliseconds"; default "250"; description "DEPRECATED - Interval over which to batch messages"; } } // container message-batching container multipath { presence "enable multipath"; description "Allow load sharing among multiple BGP paths"; uses apply-advanced; leaf disable { type empty; description "Disable Multipath"; } leaf multiple-as { type empty; description "Use paths received from different ASs"; } leaf allow-protection { type empty; description "Allow protection for multipath legs"; } leaf pause-computation-during-churn { type empty; description "Pause multipath job to absorb churn"; } leaf list-nexthop { type empty; description "Use List-NH for homogenous nexthop-set also"; } } // container multipath leaf tcp-mss { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4096"; } } description "Maximum TCP segment size"; } leaf bgp-identifier { type jt:ipv4addr; description "BGP Identifier"; } leaf tcp-aggressive-transmission { type empty; description "Enable aggressive transmission of pure TCP ACKs and retransmissions"; } container bmp { description "Specific settings to override the routing-options settings"; uses apply-advanced; leaf monitor { type enumeration { enum "enable" { value 0; description "Enable monitoring of BGP peer(s)"; } enum "disable" { value 1; description "Disable monitoring of BGP peer(s)"; } } description "Enable/Disable monitoring"; } container route-monitoring { description "Control route monitoring settings"; uses apply-advanced; leaf none { junos:must "((!(".. pre-policy") && (!(".. post-policy") && !(".. rib-out"))))"; junos:must-message "May not be configured with pre-policy or post-policy or rib-out"; type empty; description "Do not send route monitoring messages"; } container pre-policy { presence "enable pre-policy"; description "Send pre-policy route monitoring messages"; leaf exclude-non-feasible { type empty; description "Exclude looped routes, etc"; } } // container pre-policy container post-policy { presence "enable post-policy"; description "Send post-policy route monitoring messages"; leaf exclude-non-eligible { type empty; description "Exclude unresolved routes, etc."; } } // container post-policy container rib-out { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured together with bmp rib-out monitoring"; presence "enable rib-out"; description "Send adj-ribs-out route monitoring messages"; leaf pre-policy { type empty; description "Send pre-policy adj-ribs-out route monitoring messages"; } leaf post-policy { type empty; description "Send post-policy adj-ribs-out route monitoring messages"; } } // container rib-out } // container route-monitoring } // container bmp container advertise-bgp-static { presence "enable advertise-bgp-static"; description "Advertise bgp-static routes"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Static route advertisement policy"; } } // container advertise-bgp-static leaf add-path-display-ipv4-address { type empty; description "Display add-path path-id in IPv4 address format"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf session-mode { type enumeration { enum "automatic" { value 0; description "Choose session-mode automatically"; } enum "single-hop" { value 1; description "Use single-hop"; } enum "multihop" { value 2; description "Use multihop"; } } default "automatic"; description "BFD single-hop or multihop session-mode"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection container output-queue-priority { description "BGP output queue priority scheduler for updates"; uses apply-advanced; container expedited { presence "enable expedited"; description "Expedited queue; highest priority"; leaf update-tokens { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Number of tokens"; } } // container expedited list priority { key "name"; description "Output queue priority 1..16; higher is better"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf update-tokens { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Number of tokens"; } } // list priority container defaults { description "Map policy's priority class and BGP output-queue"; uses apply-advanced; container low { description "Assign the 'low' priority class to this output-queue"; uses bgp-output-queue-priority-class; } // container low container medium { description "Assign the 'medium' priority class to this output-queue"; uses bgp-output-queue-priority-class; } // container medium container high { description "Assign the 'high' priority class to this output-queue"; uses bgp-output-queue-priority-class; } // container high } // container defaults } // container output-queue-priority container multipath-build-priority { description "Configure the multipath build priority"; uses apply-advanced; choice multipath-priority { leaf low { type empty; description "Do multipath build with low priority"; } leaf medium { type empty; description "Do multipath build with medium priority"; } } // choice multipath-priority } // container multipath-build-priority leaf send-addpath-optimization { type empty; description "Enable BGP addpath advertisement optimization"; } container defaults { uses apply-advanced; container ebgp { description "Options impacting external BGP default behaviors"; uses apply-advanced; container no-policy { description "Default ebgp behaviors in the absence of configured policy"; uses apply-advanced; leaf receive { type enumeration { enum "accept" { value 0; description "By default, accept routes from all address families"; } enum "reject" { value 1; description "By default, reject routes from IPv4/IPv6 unicast address families"; } enum "reject-always" { value 2; description "By default, reject routes from all address families"; } } description "Default ebgp receive behavior"; } leaf advertise { type enumeration { enum "accept" { value 0; description "By default, advertise routes for all address families"; } enum "reject" { value 1; description "By default, do not advertise routes from IPv4/IPv6 unicast address families"; } enum "reject-always" { value 2; description "By default, do not advertise routes from any address families"; } } description "Default ebgp advertise behavior"; } } // container no-policy } // container ebgp } // container defaults } // grouping juniper-protocols-bgp grouping bgp-af-gr { uses apply-advanced; container long-lived { description "Long-lived graceful restart options"; uses apply-advanced; container restarter { description "Long-lived graceful restart restarter options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable restarter functionality"; } } // choice enable-disable leaf stale-time { type string; description "Stale time in seconds or dhms notation (1..16777215)"; } } // container restarter } // container long-lived leaf forwarding-state-bit { type enumeration { enum "set" { value 0; description "Always set"; } enum "from-fib" { value 1; description "Use state of associated FIB(s)"; } } description "Control forwarding-state flag negotiation"; } } // grouping bgp-af-gr grouping bgp-afi-default { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } } // grouping bgp-afi-default grouping apath-options { description "Number of paths to advertise"; uses apply-advanced; leaf receive { type empty; description "Receive multiple paths from peer"; } container send { presence "enable send"; description "Send multiple paths to peer"; uses apply-advanced; container path-selection-mode { junos:must "(!(".. multipath"))"; junos:must-message "Multipath must be disabled"; description "Configure how to select add-path routes"; uses apply-advanced; choice mode { leaf all-paths { type empty; description "Advertise all paths allowed by path count"; } leaf equal-cost-paths { type empty; description "Advertise equal cost paths"; } } // choice mode } // container path-selection-mode leaf-list prefix-policy { type jt:policy-algebra; ordered-by user; description "Perform add-path only for prefixes that match policy"; } leaf path-count { type union { type string { pattern "<.*>|$.*"; } type int32 { range "2 .. 64"; } } description "Number of paths to advertise"; } leaf include-backup-path { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "Number of backup paths to advertise"; } leaf multipath { type empty; description "Include only multipath contributor routes"; } } // container send } // grouping apath-options grouping bgp-afi-flow { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } leaf-list no-validate { type jt:policy-algebra; ordered-by user; description "Bypass validation procedure for routes that match policy"; } leaf strip-nexthop { type empty; description "Strip the next-hop from the outgoing flow update"; } leaf allow-policy-add-nexthop { type empty; status deprecated; description "Allow policy to add nexthop to a route without nexthop"; } } // grouping bgp-afi-flow grouping bgp-afi-flow-with-redirect-ip-action { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } leaf-list no-validate { type jt:policy-algebra; ordered-by user; description "Bypass validation procedure for routes that match policy"; } leaf strip-nexthop { type empty; description "Strip the next-hop from the outgoing flow update"; } container legacy-redirect-ip-action { presence "enable legacy-redirect-ip-action"; description "Configure legacy redirect to IP support"; uses apply-advanced; leaf receive { type empty; description "Accept legacy encoded redirect-to-ip action attribute"; } leaf send { type empty; description "Advertise Redirect action as legacy redirect attribute"; } } // container legacy-redirect-ip-action leaf secondary-independent-resolution { type empty; description "Resolve FLOW routes in VRF table independent of VPN FLOW route"; } } // grouping bgp-afi-flow-with-redirect-ip-action grouping bgp-afi-inet-transport { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label leaf per-prefix-label { type empty; description "Allocate a unique label to each advertised prefix"; } leaf per-group-label { type empty; description "Advertise prefixes with unique labels per group"; } container traffic-statistics { presence "enable traffic-statistics"; description "Collect statistics for BGP label-switched paths"; uses bgpaf-traffic-statistics; } // container traffic-statistics container protection { presence "enable protection"; description "Compute backup path for active nexthop failure"; } // container protection } // grouping bgp-afi-inet-transport grouping bgp-afi-inet6-labeled { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label leaf per-group-label { type empty; description "Advertise prefixes with unique labels per group"; } container traffic-statistics { presence "enable traffic-statistics"; description "Collect statistics for BGP label-switched paths"; uses bgpaf-traffic-statistics; } // container traffic-statistics container rib { description "Select table used by labeled unicast routes"; uses apply-advanced; leaf inet6.3 { type empty; description "Use inet6.3 to exchange labeled unicast routes"; } } // container rib container explicit-null { presence "enable explicit-null"; description "Advertise explicit null"; leaf connected-only { type empty; description "Advertise explicit null only for connected routes"; } } // container explicit-null container protection { junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))"; junos:must-message "Protection for labeled-bgp valid only for EBGP"; presence "enable protection"; description "Compute backup path for active nexthop failure"; } // container protection list topology { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; junos:must "(!("routing-options no-multi-topology-routing"))"; junos:must-message "Multi topology routing is disabled"; key "name"; ordered-by user; description "Multi topology routing tables"; leaf name { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Topology name"; } uses apply-advanced; leaf community { type string; description "Community to identify multi topology routes"; } } // list topology } // grouping bgp-afi-inet6-labeled grouping bgp-afi-inet6-transport { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label leaf per-prefix-label { type empty; description "Allocate a unique label to each advertised prefix"; } leaf per-group-label { type empty; description "Advertise prefixes with unique labels per group"; } container traffic-statistics { presence "enable traffic-statistics"; description "Collect statistics for BGP label-switched paths"; uses bgpaf-traffic-statistics; } // container traffic-statistics container lu-export { presence "enable lu-export"; description "Install Classful Transport routes in inet6.3"; uses apply-advanced; } // container lu-export container protection { presence "enable protection"; description "Compute backup path for active nexthop failure"; } // container protection } // grouping bgp-afi-inet6-transport grouping bgp-afi-l2vpn { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container egress-protection { junos:must "(!(".. .. .. .. type external"))"; junos:must-message "Egress-protection is valid only for IBGP"; presence "enable egress-protection"; description "Egress router protection"; uses apply-advanced; container context-identifier { description "Context identifier"; uses apply-advanced; leaf context-id { junos:must "("protocols mpls egress-protection context-identifier $$ primary")"; junos:must-message "context-identifier must be type primary"; junos:must "("protocols mpls egress-protection context-identifier $$")"; junos:must-message "same context-identifier must be defined in protocols mpls egress-protection"; type jt:ipv4addr; description "IP address"; } } // container context-identifier leaf-list keep-import { junos:must "("policy-options policy-statement ")"; junos:must-message "policy-options policy-statement"; type jt:policy-algebra; ordered-by user; description "Import policy"; } } // container egress-protection } // grouping bgp-afi-l2vpn grouping bgp-afi-l3vpn { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label container egress-protection { junos:must "(!(".. .. .. .. type external"))"; junos:must-message "Egress-protection is valid only for IBGP"; presence "enable egress-protection"; description "Egress router protection"; uses apply-advanced; container context-identifier { description "Context identifier"; uses apply-advanced; leaf context-id { junos:must "("protocols mpls egress-protection context-identifier $$ primary")"; junos:must-message "context-identifier must be type primary"; junos:must "("protocols mpls egress-protection context-identifier $$")"; junos:must-message "same context-identifier must be defined in protocols mpls egress-protection"; type jt:ipv4addr; description "IP address"; } } // container context-identifier leaf-list keep-import { junos:must "("policy-options policy-statement ")"; junos:must-message "policy-options policy-statement"; type jt:policy-algebra; ordered-by user; description "Import policy"; } } // container egress-protection leaf accept-local-nexthop { type empty; description "Enable processing of routes with own nexthop"; } } // grouping bgp-afi-l3vpn grouping bgp-afi-labeled { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label leaf per-prefix-label { type empty; description "Allocate a unique label to each advertised prefix"; } leaf per-group-label { type empty; description "Advertise prefixes with unique labels per group"; } container traffic-statistics { presence "enable traffic-statistics"; description "Collect statistics for BGP label-switched paths"; uses bgpaf-traffic-statistics; } // container traffic-statistics list topology { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; junos:must "(!("routing-options no-multi-topology-routing"))"; junos:must-message "Multi topology routing is disabled"; key "name"; ordered-by user; description "Multi topology routing tables"; leaf name { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Topology name"; } uses apply-advanced; leaf community { type string; description "Community to identify multi topology routes"; } } // list topology container rib { description "Select table used by labeled unicast routes"; uses rib-inet3; } // container rib container explicit-null { presence "enable explicit-null"; description "Advertise explicit null"; leaf connected-only { type empty; description "Advertise explicit null only for connected routes"; } } // container explicit-null container protection { junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))"; junos:must-message "Protection for labeled-bgp valid only for EBGP"; presence "enable protection"; description "Compute backup path for active nexthop failure"; uses apply-advanced; } // container protection container egress-protection { junos:must "(!(".. .. .. .. type external"))"; junos:must-message "Egress-protection is valid only for IBGP"; presence "enable egress-protection"; description "Egress router protection"; uses apply-advanced; container context-identifier { description "Context identifier"; uses apply-advanced; leaf context-id { junos:must "("protocols mpls egress-protection context-identifier $$ primary")"; junos:must-message "context-identifier must be type primary"; junos:must "("protocols mpls egress-protection context-identifier $$")"; junos:must-message "same context-identifier must be defined in protocols mpls egress-protection"; type jt:ipv4addr; description "IP address"; } } // container context-identifier leaf-list keep-import { junos:must "("policy-options policy-statement ")"; junos:must-message "policy-options policy-statement"; type jt:policy-algebra; ordered-by user; description "Import policy"; } } // container egress-protection leaf resolve-vpn { type empty; description "Install received NLRI in inet.3 also"; } container entropy-label { presence "enable entropy-label"; description "Use entropy label for entropy label capable BGP LSPs"; uses apply-advanced; leaf-list import { type jt:policy-algebra; ordered-by user; description "Policy to select BGP LSPs to use entropy label"; } leaf no-next-hop-validation { type empty; description "Don't validate next hop field against route next hop"; } } // container entropy-label } // grouping bgp-afi-labeled grouping bgp-afi-srte { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit leaf damping { type empty; description "Enable route flap damping"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf no-install { type empty; description "Dont install received routes in forwarding"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority } // grouping bgp-afi-srte grouping bgp-afi-topo { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container protection { junos:must "((!(".. .. .. .. type internal") && !(".. .. .. .. .. type internal")))"; junos:must-message "Protection is valid only for EBGP"; presence "enable protection"; description "Compute backup path for active nexthop failure"; } // container protection list topology { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; junos:must "(!("routing-options no-multi-topology-routing"))"; junos:must-message "Multi topology routing is disabled"; key "name"; ordered-by user; description "Multi topology routing tables"; leaf name { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Topology name"; } uses apply-advanced; leaf community { type string; description "Community to identify multi topology routes"; } } // list topology } // grouping bgp-afi-topo grouping bgp-afi-vpn { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label } // grouping bgp-afi-vpn grouping bgp-afi-vpn-protection { uses apply-advanced; container prefix-limit { description "Limit maximum number of prefixes from a peer"; uses bgpaf-prefix-limit; } // container prefix-limit container accepted-prefix-limit { description "Limit maximum number of prefixes accepted from a peer"; uses bgpaf-accepted-prefix-limit; } // container accepted-prefix-limit container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container add-path { description "Advertise multiple paths to peer"; uses apath-options; } // container add-path container aigp { presence "enable aigp"; description "Allow sending and receiving of AIGP attribute"; uses bgpaf-aigp-options; } // container aigp leaf damping { type empty; description "Enable route flap damping"; } leaf local-ipv4-address { type jt:ipv4addr; description "Local IPv4 address"; } container loops { description "Allow local AS in received AS paths"; uses bgpaf-loops; } // container loops container delay-route-advertisements { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable delay-route-advertisements"; description "Delay route updates for this family until FIB-sync"; uses apply-advanced; leaf always-wait-for-krt-drain { type empty; description "Wait for KRT-queue drain for more-specific prefixes"; } container minimum-delay { description "Minumum-delay to ensure KRT sees the route flash"; uses apply-advanced; leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after RPD start"; } leaf inbound-convergence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Min delay(sec) advertisement after source-peer sent all routes"; } } // container minimum-delay container maximum-delay { description "Maximum delay deferring routes"; uses apply-advanced; leaf route-age { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement route age"; } leaf routing-uptime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 36000"; } } description "Max delay(sec) advertisement after RPD start"; } } // container maximum-delay } // container delay-route-advertisements container nexthop-resolution { description "Configure nexthop resolution properties"; uses apply-advanced; leaf no-resolution { type empty; description "Consider nexthop good without resolution attempt"; } leaf preserve-nexthop-hierarchy { type empty; description "Attempt preserving resolved nexthop chain in forwarding"; } } // container nexthop-resolution container defer-initial-multipath-build { presence "enable defer-initial-multipath-build"; description "Defer initial multipath build until EOR is received"; uses apply-advanced; leaf maximum-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } description "Max delay(sec) multipath build after peer is up"; } } // container defer-initial-multipath-build container graceful-restart { description "BGP graceful restart options"; uses bgp-af-gr; } // container graceful-restart leaf extended-nexthop { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; type empty; description "Extended nexthop encoding"; } leaf extended-nexthop-color { type empty; description "Resolve using extended color nexthop"; } leaf extended-nexthop-tunnel { type empty; description "Use BGP tunnel attribute"; } leaf no-install { type empty; description "Dont install received routes in forwarding"; } leaf route-age-bgp-view { type empty; description "Maintain BGP route's age based on Update messages only"; } container output-queue-priority { description "Default output-queue to assign updates to"; uses bgp-output-queue-priority-class; } // container output-queue-priority container route-refresh-priority { description "Default output-queue to assign route refreshes to"; uses bgp-output-queue-priority-class; } // container route-refresh-priority container withdraw-priority { description "Default output-queue to assign withdrawn routes to"; uses bgp-output-queue-priority-class; } // container withdraw-priority leaf advertise-srv6-service { type empty; description "Advertise SRv6 service"; } leaf accept-srv6-service { type empty; description "Accept SRv6 service"; } container aggregate-label { presence "enable aggregate-label"; description "Aggregate labels of incoming routes with the same FEC"; uses apply-advanced; leaf community { type string; description "Community to identify the FEC of incoming routes"; } } // container aggregate-label container egress-protection { junos:must "(!(".. .. .. .. type external"))"; junos:must-message "Egress-protection is valid only for IBGP"; presence "enable egress-protection"; description "Egress router protection"; uses apply-advanced; container context-identifier { description "Context identifier"; uses apply-advanced; leaf context-id { junos:must "("protocols mpls egress-protection context-identifier $$ primary")"; junos:must-message "context-identifier must be type primary"; junos:must "("protocols mpls egress-protection context-identifier $$")"; junos:must-message "same context-identifier must be defined in protocols mpls egress-protection"; type jt:ipv4addr; description "IP address"; } } // container context-identifier leaf-list keep-import { junos:must "("policy-options policy-statement ")"; junos:must-message "policy-options policy-statement"; type jt:policy-algebra; ordered-by user; description "Import policy"; } } // container egress-protection } // grouping bgp-afi-vpn-protection grouping bgp-output-queue-priority-class { choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // grouping bgp-output-queue-priority-class grouping bgp_filter_obj { description "Filter to apply to tracing"; leaf match-on { type enumeration { enum "prefix" { value 0; description "Filter based on prefix"; } } description "Argument on which to match"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Filter policy"; } } // grouping bgp_filter_obj grouping bgpaf-accepted-prefix-limit { uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes accepted from a peer"; } container teardown { junos:must "(!(".. hide-excess"))"; junos:must-message "Can't be configured together with hide-excess"; junos:must "(!(".. drop-excess"))"; junos:must-message "Can't be configured together with drop-excess"; presence "enable teardown"; description "Clear peer connection on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } container idle-timeout { presence "enable idle-timeout"; description "Timeout before attempting to restart peer"; choice idle-parm { leaf forever { type empty; description "Idle the peer until the user intervenes"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2400"; } } description "Timeout value, in minutes, for restarting peer"; } } // choice idle-parm } // container idle-timeout } // container teardown container drop-excess { junos:must "(!(".. hide-excess"))"; junos:must-message "Can't be configured together with hide-excess"; junos:must "(!(".. teardown"))"; junos:must-message "Can't be configured together with teardown"; presence "enable drop-excess"; description "Drop routes from peer on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } } // container drop-excess container hide-excess { junos:must "(!(".. teardown"))"; junos:must-message "Can't be configured together with teardown"; junos:must "(!(".. drop-excess"))"; junos:must-message "Can't be configured together with drop-excess"; presence "enable hide-excess"; description "Hide routes from peer on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } } // container hide-excess } // grouping bgpaf-accepted-prefix-limit grouping bgpaf-aigp-options { uses apply-advanced; leaf disable { type empty; description "Disable sending and receiving of AIGP attribute"; } } // grouping bgpaf-aigp-options grouping bgpaf-loops { uses apply-advanced; leaf loops { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 10"; } } description "AS-Path loop count"; } } // grouping bgpaf-loops grouping bgpaf-prefix-limit { uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes from a peer"; } container teardown { junos:must "(!(".. hide-excess"))"; junos:must-message "Can't be configured together with hide-excess"; junos:must "(!(".. drop-excess"))"; junos:must-message "Can't be configured together with drop-excess"; presence "enable teardown"; description "Clear peer connection on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } container idle-timeout { presence "enable idle-timeout"; description "Timeout before attempting to restart peer"; choice idle-parm { leaf forever { type empty; description "Idle the peer until the user intervenes"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2400"; } } description "Timeout value, in minutes, for restarting peer"; } } // choice idle-parm } // container idle-timeout } // container teardown container drop-excess { junos:must "(!(".. hide-excess"))"; junos:must-message "Can't be configured together with hide-excess"; junos:must "(!(".. teardown"))"; junos:must-message "Can't be configured together with teardown"; presence "enable drop-excess"; description "Drop routes from peer on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } } // container drop-excess container hide-excess { junos:must "(!(".. teardown"))"; junos:must-message "Can't be configured together with teardown"; junos:must "(!(".. drop-excess"))"; junos:must-message "Can't be configured together with drop-excess"; presence "enable hide-excess"; description "Hide routes from peer on reaching limit"; uses apply-advanced; leaf limit-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of prefix-limit to start warnings"; } } // container hide-excess } // grouping bgpaf-prefix-limit grouping bgpaf-traffic-statistics { uses apply-advanced; leaf labeled-path { type empty; description "Ingress labeled path statistics"; } container file { description "Statistics file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file leaf interval { type union { type string { pattern "<.*>|$.*"; } type int32 { range "60 .. 65535"; } } description "Time to collect statistics (seconds)"; } } // grouping bgpaf-traffic-statistics grouping juniper-protocols-isis { uses apply-advanced; list interface { key "name"; description "Interface configuration"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container ldp-synchronization { presence "enable ldp-synchronization"; description "Advertise maximum metric until LDP is operational"; uses ldp-sync-obj; } // container ldp-synchronization list level { key "name"; ordered-by user; description "Configure levels on this interface"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "IS-IS level number"; } uses apply-advanced; leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Traffic engineering metric"; } leaf no-advertise-adjacency-segment { type empty; description "Do not advertise an adjacency segment for this level"; } container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment container ipv6-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv6 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv6-adjacency-segment container srm6-adjacency-segment { description "Configure srm6 adjacency segment"; uses apply-advanced; container unprotected { description "Adjacency SID uneligible for protection"; leaf sid { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Set Adjacency SID Value"; } } // container unprotected } // container srm6-adjacency-segment container srv6-adjacency-segment { description "Configure srv6 adjacency segment"; uses apply-advanced; container protected { presence "enable protected"; description "SRv6 Adjacency segment is eligible for protection"; uses apply-advanced; list locator { key "name"; ordered-by user; description "Locator to bind SRv6 adjacency segment"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced source-packet-routing srv6 must be defined"; type string; description "Locator name"; } uses apply-advanced; list end-x-sid { key "name"; ordered-by user; description "Endpoint 128 bit address"; leaf name { type jt:ipv6addr; } uses apply-advanced; container flavor { presence "enable flavor"; uses apply-advanced; leaf psp { type empty; description "Penultimate segment pop of the SRH"; } leaf usp { type empty; description "Ultimate segment pop of the SRH"; } leaf usd { type empty; description "Ultimate segment decapsulation"; } } // container flavor } // list end-x-sid } // list locator } // container protected container unprotected { presence "enable unprotected"; description "SRv6 Adjacency segment is uneligible for protection"; uses apply-advanced; list locator { key "name"; ordered-by user; description "Locator to bind SRv6 adjacency segment"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced source-packet-routing srv6 must be defined"; type string; description "Locator name"; } uses apply-advanced; list end-x-sid { key "name"; ordered-by user; description "Endpoint 128 bit address"; leaf name { type jt:ipv6addr; } uses apply-advanced; container flavor { presence "enable flavor"; uses apply-advanced; leaf psp { type empty; description "Penultimate segment pop of the SRH"; } leaf usp { type empty; description "Ultimate segment pop of the SRH"; } leaf usd { type empty; description "Ultimate segment decapsulation"; } } // container flavor } // list end-x-sid } // list locator } // container unprotected } // container srv6-adjacency-segment list lan-neighbor { junos:must "(!(".. ipv6-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if ipv6-adjacency-segment is configured in the same interface"; junos:must "(!(".. ipv4-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface"; junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface"; junos:must "(!(".. .. point-to-point"))"; junos:must-message "lan-neighbor can't be configured for point-to-point interfaces"; key "name"; ordered-by user; description "Configuration specific to a LAN neighbor"; leaf name { type jt:sysid; description "Neighbor's sysid"; } uses apply-advanced; container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment container ipv6-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv6 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv6-adjacency-segment container srm6-adjacency-segment { description "Configure srm6 adjacency segment"; uses apply-advanced; container unprotected { description "Adjacency SID uneligible for protection"; leaf sid { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Set Adjacency SID Value"; } } // container unprotected } // container srm6-adjacency-segment container srv6-adjacency-segment { description "Configure srv6 adjacency segment"; uses apply-advanced; container protected { presence "enable protected"; description "SRv6 Adjacency segment is eligible for protection"; uses apply-advanced; list locator { key "name"; ordered-by user; description "Locator to bind SRv6 adjacency segment"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced source-packet-routing srv6 must be defined"; type string; description "Locator name"; } uses apply-advanced; list end-x-sid { key "name"; ordered-by user; description "Endpoint 128 bit address"; leaf name { type jt:ipv6addr; } uses apply-advanced; container flavor { presence "enable flavor"; uses apply-advanced; leaf psp { type empty; description "Penultimate segment pop of the SRH"; } leaf usp { type empty; description "Ultimate segment pop of the SRH"; } leaf usd { type empty; description "Ultimate segment decapsulation"; } } // container flavor } // list end-x-sid } // list locator } // container protected container unprotected { presence "enable unprotected"; description "SRv6 Adjacency segment is uneligible for protection"; uses apply-advanced; list locator { key "name"; ordered-by user; description "Locator to bind SRv6 adjacency segment"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced source-packet-routing srv6 must be defined"; type string; description "Locator name"; } uses apply-advanced; list end-x-sid { key "name"; ordered-by user; description "Endpoint 128 bit address"; leaf name { type jt:ipv6addr; } uses apply-advanced; container flavor { presence "enable flavor"; uses apply-advanced; leaf psp { type empty; description "Penultimate segment pop of the SRH"; } leaf usp { type empty; description "Ultimate segment pop of the SRH"; } leaf usd { type empty; description "Ultimate segment decapsulation"; } } // container flavor } // list end-x-sid } // list locator } // container unprotected } // container srv6-adjacency-segment } // list lan-neighbor container post-convergence-lfa { junos:must "(".. .. .. backup-spf-options use-post-convergence-lfa")"; junos:must-message "Not allowed without 'protocols isis backup-spf-options use-post-convergence-lfa'"; presence "enable post-convergence-lfa"; description "Configure backup along post convergence on this interface"; uses apply-advanced; container node-protection { presence "enable node-protection"; description "Enable node protection"; uses apply-advanced; leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Cost for node protection"; } } // container node-protection leaf srlg-protection { type empty; description "Enable srlg protection"; } leaf fate-sharing-protection { type empty; description "Enable fate-sharing protection"; } } // container post-convergence-lfa container application-specific { description "Advertise application-specific TE attributes"; uses apply-advanced; list attribute-group { key "name"; max-elements 1; ordered-by user; description "Link attribute group name"; leaf name { type string; description "Link attribute group name"; } uses apply-advanced; leaf te-metric { junos:must "(".. application")"; junos:must-message "Atleast one application is must"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Traffic engineering metric for this attribute group"; } leaf-list admin-group { type string; max-elements 16; ordered-by user; description "Administrative groups for this attribute-group"; } container application { junos:must "((".. delay-metric" || (".. admin-group" || (".. te-metric" || (".. admin-groups" || (".. legacy" || ".. advertise-delay-metric"))))))"; junos:must-message "Atleast one attribute must be configured"; description "Standard Applications part of this attribute-group"; uses apply-advanced; leaf flex-algorithm { type empty; description "Set X flag in standard application bit mask"; } } // container application } // list attribute-group } // container application-specific choice enable-disable { leaf disable { type empty; description "Disable IS-IS for this level"; } } // choice enable-disable leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Metric for this level"; } leaf ipv4-multicast-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "IPv4 multicast metric for this level"; } leaf ipv6-unicast-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "IPv6 unicast metric for this level"; } leaf ipv6-multicast-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "IPv6 multicast metric for this level"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type enumeration { enum "default" { value 0; description "Default topology"; } enum "ipv4-multicast" { value 1; description "IPv4 multicast topology"; } enum "ipv6-unicast" { value 2; description "IPv6 unicast topology"; } enum "ipv6-multicast" { value 3; description "IPv6 multicast topology"; } } description "Topology name"; } uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology leaf authentication-key { type jt:unreadable; status deprecated; description "Authentication key (password)"; } leaf authentication-type { type enumeration { enum "md5" { value 0; status deprecated; description "MD5 authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } } status deprecated; description "Authentication type"; } leaf hello-authentication-key { type jt:unreadable; description "Authentication key (password) for hello packets"; } leaf hello-authentication-type { type enumeration { enum "md5" { value 0; description "MD5 authentication"; } enum "simple" { value 1; description "Simple password authentication"; } } description "Authentication type for hello packets"; } leaf hello-authentication-key-chain { junos:must "(!(".. hello-authentication-type"))"; junos:must-message "May not be configured with hello-authentication-type"; junos:must "(!(".. hello-authentication-key"))"; junos:must-message "May not be configured with hello-authentication-key"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { junos:posix-pattern "[A-za-z]$"; junos:pattern-message "Keychain name must not end with number."; length "1 .. 128"; } description "Key chain name"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 21845"; } } units "seconds"; description "Interval between hello packet transmissions"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Time after which neighbors think the interface is down"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Designated router election priority"; } container flood-reflector { junos:must "(".. .. level 1 disable")"; junos:must-message "flood-reflector cannot be enabled on level 1 interface"; junos:must "(("protocols isis level 2 flood-reflector" && !(".. .. level 1 flood-reflector")))"; junos:must-message "flood-reflector is only supported on level 2 interfaces"; presence "enable flood-reflector"; description "Configure interface as flood-reflector"; uses apply-advanced; leaf cluster-id { junos:must "("protocols isis level 2 flood-reflector client")"; junos:must-message "flood-reflector client is not configured at isis level"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Cluster-ID"; } } // container flood-reflector container passive { presence "enable passive"; description "Do not run IS-IS at this level, but advertise it"; uses apply-advanced; leaf remote-node-iso { junos:must "(".. remote-node-id")"; junos:must-message "remote-node-id must be configured"; type jt:sysid; description "ISO System-ID of the remote node"; } leaf remote-node-id { junos:must "(".. remote-node-iso")"; junos:must-message "remote-node-iso must be configured"; type jt:ipv4addr; description "Remote address of the link"; } } // container passive } // list level leaf delay-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } units "microseconds"; description "Delay metric"; } container delay-measurement { presence "enable delay-measurement"; description "Enable delay measurement"; uses apply-advanced; leaf probe-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } units "seconds"; description "Probe interval"; } leaf probe-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } units "seconds"; description "Probe count"; } container advertisement { description "Delay advertisement"; uses apply-advanced; container periodic { description "Periodic advertisement parameters"; uses apply-advanced; leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percentage"; description "Threshold"; } leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 3600"; } } units "seconds"; description "Interval"; } } // container periodic container accelerated { presence "enable accelerated"; description "Accelerated advertisement parameters"; uses apply-advanced; leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percentage"; description "Threshold"; } } // container accelerated } // container advertisement } // container delay-measurement leaf no-advertise-adjacency-segment { type empty; description "Do not advertise an adjacency segment for this interface"; } container auto-bandwidth { description "Auto bandwidth configuration"; uses apply-advanced; leaf template-name { junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")"; junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must"; junos:must "("routing-options auto-bandwidth template $$")"; junos:must-message "Referenced auto-bandwidth template must be defined"; type string; description "Auto bandwidth template name"; } choice enable-disable { leaf disable { type empty; description "Disable Auto bandwidth on this interface"; } } // choice enable-disable } // container auto-bandwidth choice protection-type { leaf link-protection { type empty; description "Protect interface from link faults only"; } leaf node-link-protection { type empty; description "Protect interface from both link and node faults"; } } // choice protection-type leaf no-eligible-backup { type empty; description "Not eligible for backup traffic from protected interfaces"; } leaf no-eligible-remote-backup { type empty; description "Not eligible for Remote-LFA backup traffic from protected interfaces"; } container link-degradation-threshold { presence "enable link-degradation-threshold"; description "Link up and down thresholds (in %) for proactive link protection"; leaf link-down { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } description "Signal degradation threshold above which link marked down"; } leaf link-up { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } description "Signal degradation threshold below which link is marked up."; } } // container link-degradation-threshold choice enable-disable { leaf disable { type empty; description "Disable IS-IS on this interface"; } } // choice enable-disable leaf authentication-key { type jt:unreadable; status deprecated; description "Authentication key (password)"; } leaf authentication-type { type enumeration { enum "md5" { value 0; status deprecated; description "MD5 authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } } status deprecated; description "Authentication type"; } leaf flood-group { type string { junos:posix-pattern "^[[:xdigit:]]{2}.(([[:xdigit:]]){2}){1,2}((.(([[:xdigit:]]){2}){1,2}){0,1}){0,5}$"; junos:pattern-message "At max 26 hexa decimal digits, standard ISO area ID format"; } description "ISO Area that this interface should send LSPs to"; } leaf hello-authentication-key { type jt:unreadable; status deprecated; description "Authentication key (password) for hello packets"; } leaf hello-authentication-type { type enumeration { enum "md5" { value 0; status deprecated; description "MD5 authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } } status deprecated; description "Authentication type for hello packets"; } leaf hello-padding-type { type enumeration { enum "strict" { value 0; description "Padding for all adjacency states"; } enum "adaptive" { value 1; description "Padding until state of neighbor adjacency is 'up'"; } enum "loose" { value 2; description "Padding until state of adjacency is 'initializing'"; } enum "disable" { value 3; description "Do not add any padding for hello packets"; } } default "loose"; description "Type of padding for hello packets"; } leaf interface-group-holddown-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 60"; } } units "seconds"; description "Time to wait before including in BBM calculation"; } choice layer2-map-choice { leaf layer2-map { type empty; description "Kernel ARP/ND creation for nexthops"; } leaf no-layer2-map { type empty; description "Don't kernel ARP/ND creation for nexthops"; } } // choice layer2-map-choice leaf max-hello-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 16000"; } } description "Maximum size allowed for ISIS Hello PDUs"; } leaf lsp-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } units "milliseconds"; default "100"; description "Interval between LSP transmissions"; } container csnp-interval { description "Rate of CSN packets (for LAN interfaces only)"; choice csnp_interval_option { leaf csnp-interval-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Interval between CSN packets"; } leaf disable { type empty; description "Do not send CSN packets on this interface"; } } // choice csnp_interval_option } // container csnp-interval container strict-dual-isis { junos:must "(!(".. .. topologies"))"; junos:must-message "strict-dual-isis is not allowed with multi-topologies"; presence "enable strict-dual-isis"; description "Ensure both ipv4 and ipv6 connectivity for adjacencies on this interface"; uses apply-advanced; leaf holdown { type union { type uint32; type string { pattern "<.*>|$.*"; } } default "12"; description "Set the holddown timer for strict spf computation"; } } // container strict-dual-isis container mesh-group { description "Add the interface to a mesh group"; choice mesh_group_option { leaf mesh-group-number { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Mesh group number for this interface"; } leaf blocked { type empty; description "Do not flood new LSPs on this interface"; } } // choice mesh_group_option } // container mesh-group leaf point-to-point { type empty; description "Treat interface as point to point"; } container passive { presence "enable passive"; description "Do not run IS-IS, but advertise it"; uses apply-advanced; leaf remote-node-iso { junos:must "(".. remote-node-id")"; junos:must-message "remote-node-id must be configured"; type jt:sysid; description "ISO System-ID of the remote node"; } leaf remote-node-id { junos:must "(".. remote-node-iso")"; junos:must-message "remote-node-iso must be configured"; type jt:ipv4addr; description "Remote address of the link"; } } // container passive leaf checksum { type empty; description "Enable checksum for packets on this interface"; } leaf no-unicast-topology { type empty; description "Do not include this interface in the unicast topology"; } leaf no-ipv4-multicast { type empty; description "Do not include this interface in the IPv4 multicast topology"; } leaf no-ipv6-unicast { type empty; description "Do not include this interface in the IPv6 unicast topology"; } leaf no-ipv6-multicast { type empty; description "Do not include this interface in the IPv6 multicast topology"; } leaf no-adjacency-down-notification { type empty; description "Do not inform other protocols about adjacency down events"; } container bfd-liveness-detection { junos:must "(!(".. family inet bfd-liveness-detection"))"; junos:must-message "To configure bfd-liveness-detection, 'family inet bfd-liveness-detection' must not be configured"; status deprecated; description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection list family { key "name"; ordered-by user; description "Address family specific interface attributes"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; container bfd-liveness-detection { junos:must "(!((".. .. bfd-liveness-detection" && ".. .. family inet bfd-liveness-detection")))"; junos:must-message "bfd-liveness-detection and 'family inet bfd-liveness-detection' cannot be configured at the same time"; description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection } // list family } // list interface container source-packet-routing { junos:must "(!(".. srm6"))"; junos:must-message "must not have 'protocols isis srm6' configured"; presence "enable source-packet-routing"; description "Enable Source Packet Routing (SPRING)"; uses apply-advanced; container adjacency-segment { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Configure attributes for Adjacency Segments in SPRING"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "180000 .. 900000"; } } description "Duration(ms) for which adjacency segments will be retained after isolating from an interface"; } } // container adjacency-segment container udp-tunneling { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Enable SR over UDP feature"; uses apply-advanced; leaf encapsulation { type empty; description "Enable UDP Tunnel Encapsulation"; } leaf decapsulation { type empty; description "Enable UDP Tunnel decapsulation"; } } // container udp-tunneling container srgb { junos:must "(!(".. node-segment index-range"))"; junos:must-message "May not be confiugred with node-segment index-range"; junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Set the SRGB global block in SPRING"; leaf start-label { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Start range for SRGB label block"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Index to the SRGB start label block"; } } // container srgb container node-segment { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Enable support for Node segments in SPRING"; uses apply-advanced; leaf ipv4-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set IPv4 Node Segment index"; } leaf ipv6-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set IPv6 Node Segment index"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 16385"; } } description "Set Range of Node Segment indices allowed"; } } // container node-segment leaf-list flex-algorithm { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 255"; } } max-elements 16; description "Flex-algorithms we would like to participate in"; } leaf use-flex-algorithm-metric-always { type empty; description "Use flex-algo prefix metric whenever available"; } leaf strict-asla-based-flex-algorithm { type empty; description "Flex-Algorithm to ignore links not having ASLA sub-TLVs"; } leaf new-capability-subtlv { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; type empty; description "Advertise all ranges in single spring capability subtlv"; } leaf explicit-null { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; type empty; description "Set E and P bits in all Prefix SID advertisements"; } leaf mapping-server { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; junos:must "("routing-options source-packet-routing mapping-server-entry $$")"; junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined"; type string; description "Mapping server name"; } leaf no-strict-spf { type empty; description " Disable strict spf algo 1 advertisement"; } leaf ldp-stitching { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; type empty; description "Enable SR to LDP stitching"; } container srv6 { presence "enable srv6"; description "Enable IPv6 Segment Routing (SRv6)"; uses apply-advanced; list locator { key "name"; ordered-by user; description "SRv6 Locator"; leaf name { junos:must "("routing-options source-packet-routing srv6 locator $$")"; junos:must-message "Referenced source-packet-routing srv6 must be defined"; type string; description "Locator name"; } uses apply-advanced; list end-sid { key "name"; ordered-by user; leaf name { type jt:ipv6addr; } uses apply-advanced; container flavor { presence "enable flavor"; uses apply-advanced; leaf psp { type empty; description "Penultimate segment pop of the SRH"; } leaf usp { type empty; description "Ultimate segment pop of the SRH"; } leaf usd { type empty; description "Ultimate segment decapsulation"; } } // container flavor } // list end-sid } // list locator } // container srv6 container sensor-based-stats { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Configure sensor based stats in SPRING"; uses apply-advanced; container per-interface-per-member-link { description "Configure sensor based stats per nexthop"; leaf ingress { type empty; description "Enable sensor based stats on ingress interface"; } leaf egress { type empty; description "Enable sensor based stats on egress interface"; } } // container per-interface-per-member-link container per-sid { description "Configure sensor based stats per spring route"; leaf ingress { type empty; description "Enable sensor based stats for per-sid ingress accounting"; } leaf egress { type empty; description "Enable sensor based stats for IP-MPLS egress accounting"; } } // container per-sid } // container sensor-based-stats container traffic-statistics { junos:must "(!(".. .. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; description "Enable support for traffic statistics in SPRING"; uses apply-advanced; container statistics-granularity { description "Granularity for traffic statistics in SPRING"; uses apply-advanced; leaf per-interface { type empty; description "Interface Based traffic statistics in SPRING"; } } // container statistics-granularity leaf auto-bandwidth { junos:must "("protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface")"; junos:must-message "Config protocols isis source-packet-routing traffic-statistics statistics-granularity per-interface is must"; junos:must "("routing-options auto-bandwidth template $$")"; junos:must-message "Referenced auto-bandwidth template must be defined"; type string; description "Auto bandwidth name"; } } // container traffic-statistics } // container source-packet-routing container srm6 { junos:must "(!(".. source-packet-routing"))"; junos:must-message "must not have 'protocols isis source-packet-routing' configured"; presence "enable srm6"; description "Enable SRm6"; uses apply-advanced; container sid { description "Configure attributes for SID in srm6"; uses apply-advanced; leaf node-sid { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Set Node SID Value"; } leaf address { type jt:ipv6addr; description "IPv6 address corresponding to SID"; } } // container sid } // container srm6 list level { key "name"; ordered-by user; description "Configure global level attributes"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "IS-IS level number"; } uses apply-advanced; leaf labeled-preference { junos:must "(".. .. source-packet-routing")"; junos:must-message "labeled-preference cannot be specified without 'protocols isis source-packet-routing'"; type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of labeled IS-IS routes"; } leaf srv6-preference { junos:must "(".. .. source-packet-routing")"; junos:must-message "srv6-preference cannot be specified without 'protocols isis source-packet-routing'"; type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of SRV6 IS-IS routes"; } leaf flex-algorithm-preference { junos:must "(".. .. source-packet-routing")"; junos:must-message "flex-algorithm-preference cannot be specified without 'protocols isis source-packet-routing'"; type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of flex-algorithm L-ISIS routes"; } container source-packet-routing { presence "enable source-packet-routing"; description "Enable Source Packet Routing (SPRING)"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable Source Packet Routing on this level"; } } // choice enable-disable leaf srms-preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Set SRMS preference value"; } } // container source-packet-routing choice enable-disable { leaf disable { type empty; description "Disable IS-IS on this level"; } } // choice enable-disable leaf authentication-key { type jt:unreadable; description "Authentication key (password)"; } leaf authentication-type { type enumeration { enum "md5" { value 0; description "MD5 authentication"; } enum "simple" { value 1; description "Simple password authentication"; } } description "Authentication type"; } leaf purge-originator { type enumeration { enum "self" { value 0; description "Add POI only for self-originated purge LSPs"; } enum "empty" { value 1; description "Add POI for purge LSPs who do not have POI information"; } } description "Add Purge Originator information"; } leaf no-hello-authentication { type empty; description "Disable authentication for hello packets"; } leaf no-csnp-authentication { type empty; description "Disable authentication for CSN packets"; } leaf no-psnp-authentication { type empty; description "Disable authentication for PSN packets"; } leaf authentication-key-chain { junos:must "(!(".. authentication-type"))"; junos:must-message "May not be configured with authentication-type"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { junos:posix-pattern "[A-za-z]$"; junos:pattern-message "Keychain name must not end with number."; length "1 .. 128"; } description "Key chain name"; } leaf wide-metrics-only { junos:must "(!(".. .. clns-routing"))"; junos:must-message "wide-metrics-only cannot be specified with clns-routing"; type empty; description "Generate wide metrics only"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of internal routes"; } leaf external-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of external routes"; } leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of external prefixes that can be exported"; } container flood-reflector { junos:must "(!(".. .. level 1 flood-reflector"))"; junos:must-message "Flood-reflector is supported only in level 2"; description "Enable flood-reflector"; uses apply-advanced; container reflector { junos:must "(!(".. client"))"; junos:must-message "flood-reflector and client can't be configured together"; description "Configure this as a flood-reflector"; uses apply-advanced; leaf cluster-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Cluster-ID"; } } // container reflector leaf client { type empty; description "Configure interface as flood-reflector client"; } } // container flood-reflector } // list level list interface-group { key "name"; description "Interface grouping configuration"; leaf name { type string; description "Interface group name"; } uses apply-advanced; list level { key "name"; ordered-by user; description "Configure levels on this interface-group"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "IS-IS level number"; } uses apply-advanced; container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment container ipv6-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same level"; junos:must "(!(".. .. no-advertise-adjacency-segment"))"; junos:must-message "ipv6-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv6 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv6-adjacency-segment container srm6-adjacency-segment { description "Configure srm6 adjacency segment"; uses apply-advanced; container unprotected { description "Adjacency SID uneligible for protection"; leaf sid { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Set Adjacency SID Value"; } } // container unprotected } // container srm6-adjacency-segment list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type enumeration { enum "default" { value 0; description "Default topology"; } enum "ipv4-multicast" { value 1; description "IPv4 multicast topology"; } enum "ipv6-unicast" { value 2; description "IPv6 unicast topology"; } enum "ipv6-multicast" { value 3; description "IPv6 multicast topology"; } } description "Topology name"; } uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list level container link-group-protection { junos:must "(!(".. .. backup-spf-options"))"; junos:must-message "Backup SPF options can't be configured"; description "Configure link group protection"; uses apply-advanced; leaf minimum-bandwidth { type string; description "Minimum bandwidth to carry traffic"; } leaf revert-bandwidth { type string; description "Revert bandwidth to carry traffic"; } } // container link-group-protection list interface { key "name"; description "List interfaces for this group"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Interface weight for adjacency set"; } } // list interface } // list interface-group container spf-options { description "Configure SPF attributes"; uses apply-advanced; container microloop-avoidance { description "Configure microloop avoidance mechanisms"; uses apply-advanced; container post-convergence-path { junos:must "(!(".. use-route-convergence-delay"))"; junos:must-message "use-route-convergence-delay is not allowed with post-convergence-path"; presence "enable post-convergence-path"; description "Temporarily install post-convergence path for routes potentially affected by microloops"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "500 .. 60000"; } } units "milliseconds"; description "Time after which temporary post-convergence paths are removed"; } leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Set maximum number of label supported for Micro-Loop-Avoidance calculations"; } leaf maximum-srv6-sids { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 6"; } } description "Set maximum number of SRV6 SIDs supported for Micro-Loop-Avoidance calculations"; } } // container post-convergence-path } // container microloop-avoidance leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 1000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 10000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 5"; } } description "Number of rapid SPF runs before SPF holddown"; } container multipath { description "Configure multipath options"; uses apply-advanced; container weighted { description "Weighted multipath options"; uses apply-advanced; leaf one-hop { type empty; description "Enable load balancing on onehop multipath based on interface bandwidth"; } } // container weighted } // container multipath } // container spf-options container traceoptions { description "Trace options for IS-IS"; uses apply-advanced; list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "traffic-statistics" { value 0; description "Trace traffic-statistics related events"; } enum "post-convergence-lfa" { value 1; description "Trace post-convergence-lfa related events"; } enum "error" { value 2; description "Trace errored packets"; } enum "spf" { value 3; description "Trace SPF events"; } enum "packets" { value 4; description "Trace IS-IS packets"; } enum "hello" { value 5; description "Trace hello packets"; } enum "lsp" { value 6; description "Trace link-state packets"; } enum "psn" { value 7; description "Trace partial sequence number (PSN) packets"; } enum "csn" { value 8; description "Trace complete sequence number (CSN) packets"; } enum "layer2-map" { value 9; description "Trace ARP/ND kernel state manipulation"; } enum "lsp-generation" { value 10; description "Trace LSP generation"; } enum "graceful-restart" { value 11; description "Trace graceful restart events"; } enum "ldp-synchronization" { value 12; description "Trace synchronization between IS-IS and LDP"; } enum "nsr-synchronization" { value 13; description "Trace NSR synchronization events"; } enum "spring" { value 14; description "Trace source packet routing"; } enum "prefix-sid" { value 15; description "Trace source packet routing, prefix-sids"; } enum "flex-algorithm" { value 16; description "Trace flex-algorithm related events"; } enum "adj-sid" { value 17; description "Trace adj-sid related events"; } enum "route" { value 18; description "Trace routing information"; } enum "normal" { value 19; description "Trace normal events"; } enum "general" { value 20; description "Trace general events"; } enum "state" { value 21; description "Trace state transitions"; } enum "policy" { value 22; description "Trace policy processing"; } enum "task" { value 23; description "Trace routing protocol task processing"; } enum "timer" { value 24; description "Trace routing protocol timer processing"; } enum "srv6" { value 25; description "Trace srv6 related events"; } enum "rmopd" { value 26; description "Trace rmopd interactions"; } enum "all" { value 27; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file } // container traceoptions container backup-spf-options { description "Configure backup SPF attributes"; uses apply-advanced; container remote-backup-calculation { junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols isis source-packet-routing' is must"; presence "enable use-post-convergence-lfa"; description "Calculate Post Convergence Backup Nexthops"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Set maximum number of label supported for post convergence path calculations"; } leaf maximum-srv6-sids { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 6"; } } description "Set maximum number of SRV6 SIDs for post convergence path calculations"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Set maximum equal cost backup post convergence paths"; } } // container use-post-convergence-lfa container use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Use of SPRING paths as backup can't be configured without configuring 'protocols isis source-packet-routing'"; presence "enable use-source-packet-routing"; description "Use SPRING routed paths for protection"; uses apply-advanced; } // container use-source-packet-routing leaf per-prefix-calculation { type empty; description "Calculate backup nexthops for non-best prefix originators"; } leaf node-link-degradation { junos:must "(!(".. .. backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols isis backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options list context-identifier { key "name"; ordered-by user; description "Configuration for advertisement of a context-identifier "; leaf name { type jt:ipprefix; description "Context identifier range"; } uses apply-advanced; list level { key "name"; ordered-by user; description "Configure global level attributes"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "IS-IS level number"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable advertisements to this level"; } } // choice enable-disable } // list level } // list context-identifier container traffic-engineering { description "Configure traffic engineering attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable traffic engineering"; } } // choice enable-disable leaf l3-unicast-topology { type empty; description "Download IGP topology into TED"; } leaf ipv6 { type empty; description "Enable TEDv6"; } leaf credibility-protocol-preference { type empty; description "Follow IGP protocol preference for TED protocol credibility"; } leaf ipv4-multicast-rpf-routes { junos:must "(!(".. .. topologies ipv4-multicast"))"; junos:must-message "ipv4-multicast-rpf-routes cannot be used with the ipv4-multicast topology"; junos:must "(!(".. .. multicast-topology"))"; junos:must-message "ipv4-multicast-rpf-routes cannot be used with multicast-topology"; junos:must "(".. shortcuts")"; junos:must-message "ipv4-multicast-rpf-routes cannot be used without shortcuts"; type empty; status deprecated; description "Install IPv4 routes for multicast RPF checks into inet.2"; } leaf ignore-lsp-metrics { type empty; description "Ignore label-switched path metrics when doing shortcuts"; } container tunnel-source-protocol { description "Protocols from which to pick label-switched paths"; uses apply-advanced; container rsvp { presence "enable rsvp"; description "Pick label-switched paths from rsvp"; uses apply-advanced; leaf preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Preference for label-switched paths from this protocol"; } } // container rsvp container spring-te { presence "enable spring-te"; description "Pick label-switched paths from spring-te"; uses apply-advanced; leaf preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Preference for label-switched paths from this protocol"; } } // container spring-te } // container tunnel-source-protocol list family { key "name"; ordered-by user; description "Address family specific traffic-engineering attributes"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } enum "inet-mpls" { value 2; description "IPv4-MPLS family"; } enum "inet6-mpls" { value 3; description "IPv6-MPLS family"; } } } uses apply-advanced; container shortcuts { junos:must "(!(".. .. no-ldp-shortcuts"))"; junos:must-message "Shortcuts configuration cannot be used with no-ldp-shortcuts"; junos:must "(!(".. .. shortcuts"))"; junos:must-message "per-family shortcuts configuration cannot be used with global shortcuts enabled"; junos:must "(!(".. .. disable"))"; junos:must-message "shortcuts cannot be used without traffic-engineering enabled"; presence "enable shortcuts"; description "Use label-switched paths as next hops, if possible"; uses apply-advanced; leaf multicast-rpf-routes { junos:must "(!(".. .. .. .. multicast-topology"))"; junos:must-message "ipv4 multicast-rpf-routes cannot be used with the multicast-topology"; junos:must "(!(".. .. .. .. topologies ipv4-multicast"))"; junos:must-message "ipv4 multicast-rpf-routes cannot be used with the ipv4-multicast topology"; type empty; description "Install routes for multicast RPF checks into multicast RIB"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy for shortcut"; } } // container shortcuts } // list family container shortcuts { presence "enable shortcuts"; status deprecated; description "Use label-switched paths as next hops, if possible"; uses apply-advanced; leaf ignore-lsp-metrics { type empty; status deprecated; description "Ignore label-switched path metrics when doing shortcuts"; } } // container shortcuts container multipath { description "Configure label-switched-path multipath behavior"; uses apply-advanced; leaf lsp-equal-cost { junos:must "((".. .. shortcuts" || (".. .. family $$={inet} shortcuts" || (".. .. family $$={inet6} shortcuts" || ".. .. family $$={iso} shortcuts"))))"; junos:must-message "Traffic engineering shortcuts for inet, inet6 or iso family must be configured."; type empty; description "Include equal cost label-switched-paths"; } } // container multipath container advertisement { description "Configure traffic engineering attribute advertisements"; uses apply-advanced; leaf always { type empty; description "Advertise applicable legacy TE attributes always"; } container application-specific { description "Advertise application-specific TE attributes"; uses apply-advanced; container all-applications { presence "enable all-applications"; description "Advertise common application-specific link attributes"; uses apply-advanced; leaf legacy { type empty; description "Use legacy TE attributes for this application"; } } // container all-applications } // container application-specific } // container advertisement } // container traffic-engineering list label-switched-path { junos:must "(!(".. traffic-engineering ipv4-multicast-rpf-routes"))"; junos:must-message "cannot advertise LSPs when using ipv4-multicast-rpf-routes"; key "name"; ordered-by user; description "Configuration for advertisement of a label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of label-switched path to be advertised"; } uses apply-advanced; list level { key "name"; ordered-by user; description "Configure global level attributes"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "IS-IS level number"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable advertisements to this level"; } } // choice enable-disable leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777215"; } } description "SPF metric for this level"; } } // list level } // list label-switched-path choice enable-disable { leaf disable { type empty; description "Disable IS-IS"; } } // choice enable-disable leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf reference-bandwidth { type string; description "Bandwidth for calculating metric defaults"; } choice layer2-map-choice { leaf layer2-map { type empty; description "Kernel ARP/ND creation for nexthops"; } leaf no-layer2-map { type empty; description "Don't kernel ARP/ND creation for nexthops"; } } // choice layer2-map-choice leaf job-stats { type empty; description "Collect job statistics"; } leaf lsp-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "350 .. 65535"; } } units "seconds"; description "Lifetime of LSPs"; } leaf max-lsp-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 1492"; } } default "1492"; description "Maximum size allowed for LSPs"; } leaf max-hello-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 16000"; } } default "1492"; description "Maximum size allowed for ISIS Hello PDUs"; } leaf max-snp-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 1400"; } } default "1400"; description "Maximum size allowed for Sequence Number (Complete/Partial) PDUs"; } leaf spf-delay { junos:must "(!(".. spf-options delay"))"; junos:must-message "You can only configure either spf-delay or delay under spf-options"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 120000"; } } units "milliseconds"; status deprecated; description "Time to wait before running an SPF"; } leaf authentication-key { type jt:unreadable; status deprecated; description "Authentication key (password)"; } leaf authentication-type { type enumeration { enum "md5" { value 0; status deprecated; description "MD5 authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } } status deprecated; description "Authentication type"; } leaf loose-authentication-check { type empty; description "Verify authentication only if PDU has authentication TLV"; } leaf max-areas { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 36"; } } default "3"; description "Maximum number of advertised Areas"; } leaf no-authentication-check { type empty; description "Disable authentication checking"; } leaf no-ipv4-routing { type empty; description "Disable IPv4 routing"; } leaf no-ipv6-routing { type empty; description "Disable IPv6 routing"; } leaf no-adjacency-holddown { type empty; description "Disable adjacency hold down"; } leaf multicast-topology { type empty; status deprecated; description "Enable multicast topology"; } leaf ignore-attached-bit { type empty; description "Ignore the attached bit in Level 1 LSPs"; } container rib-group { description "Routing table group for importing IS-IS routes"; uses rib_group_type; } // container rib-group container strict-dual-isis { junos:must "(!(".. topologies"))"; junos:must-message "strict-dual-isis is not allowed with multi-topologies"; presence "enable strict-dual-isis"; description "Ensure both ipv4 and ipv6 connectivity for all adjacencies"; uses apply-advanced; leaf holdown { type union { type uint32; type string { pattern "<.*>|$.*"; } } default "12"; description "Set the holddown timer for strict spf computation"; } } // container strict-dual-isis container topologies { description "Enable topologies"; uses apply-advanced; leaf ipv4-multicast { type empty; description "Enable IPv4-multicast topology"; } leaf ipv6-unicast { type empty; description "Enable IPv6-unicast topology"; } leaf ipv6-multicast { type empty; description "Enable IPv6-multicast topology"; } } // container topologies container overload { presence "enable overload"; description "Set the overload bit (no transit traffic)"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 3600"; } } units "seconds"; description "Time after which overload bit is reset"; } leaf advertise-high-metrics { type empty; description "Advertise high metrics instead of setting the overload bit"; } leaf allow-route-leaking { type empty; description "Allow routes to be leaked when overload is configured"; } leaf internal-prefixes { type empty; description "Allow internal prefixes to be advertised with high metric"; } leaf external-prefixes { type empty; description "Allow external prefixes to be advertised with high metric"; } } // container overload container graceful-restart { description "IS-IS graceful restart options"; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf helper-disable { type empty; description "Disable graceful restart helper capability"; } leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 300"; } } units "seconds"; description "Maximum time for graceful restart to finish"; } } // container graceful-restart } // grouping juniper-protocols-isis grouping juniper-protocols-l2vpn { description "Layer 2 VPN, VPLS or EVPN configuration"; uses apply-advanced; leaf bum-hashing { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "Bum-hashing knob is only applicable for instance type vpls"; type empty; description "Enable BUM hashing feature in the instance"; } container mac-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC address forwarding table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } } description "Action when MAC limit is reached"; } } // container mac-table-size container mac-ip-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC+IP bindings table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings"; } } // container mac-ip-table-size container interface-mac-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC address learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit container interface-mac-ip-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC+IP bindings learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit container mac-notification { presence "enable mac-notification"; description "MAC notification options"; uses apply-advanced; leaf notification-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; default "30"; description "Interval for sending MAC notifications"; } } // container mac-notification leaf mac-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "seconds"; description "Delay for discarding MAC address if no updates are received"; } leaf no-mac-learning { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Disable dynamic MAC address learning"; } leaf no-normalization { type empty; description "Disable vlan id normalization for interfaces"; } leaf mac-statistics { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Enable MAC address statistics"; } container mib { presence "enable mib"; description "Snmp mib options"; uses apply-advanced; container dot1q-mib { presence "enable dot1q-mib"; description "Dot1q MIB configuration options"; uses apply-advanced; leaf port-list { type enumeration { enum "bit-map" { value 0; description "Port list is represented in bit-map format"; } enum "string" { value 1; description "Port list is represented in string format"; } } description "Port list for staticegressports and staticuntaggedports MIB"; } } // container dot1q-mib } // container mib container static-rvtep-mac { description "Configure Static MAC and remote VxLAN tunnel endpoint entries"; uses apply-advanced; list mac { key "mac_addr remote-vtep"; description "Unicast MAC address"; leaf mac_addr { type jt:mac-unicast; } leaf remote-vtep { type jt:ipaddr; description "Configure static remote VXLAN tunnel endpoints"; } } // list mac } // container static-rvtep-mac list interface { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance"; key "name"; ordered-by user; description "Interface that connect this site to the VPN"; leaf name { junos:must "(((".. .. .. .. protocols evpn flexible-cross-connect-vlan-aware" || ".. .. .. .. interface $$") || "FALSE"))"; junos:must-message "Interface must be part of this routing instance"; junos:must "((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Interface must be part of this routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container interface-mac-limit { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; description "Maximum number of MAC addresses learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf disable { type empty; description "Disable interface for interface-mac-limit"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit leaf action-priority { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8"; } } description "Blocking priority of this interface on mac move detection"; } list static-mac { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; key "name"; ordered-by user; description "Static MAC addresses assigned to this interface"; leaf name { junos:must "((!(".. .. .. .. .. vlan-id all") || all ".. vlan-id <*>"))"; junos:must-message " Specify vlan-id for qualified learning "; type jt:mac-addr; description "MAC address"; } uses apply-advanced; list vlan-id { junos:must "(".. .. .. .. .. vlan-id all")"; junos:must-message "'vlan-id all' has to be configured for the bridging domain"; key "name"; ordered-by user; description "VLAN ID of learning VLAN"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Learning VLAN"; } uses apply-advanced; } // list vlan-id } // list static-mac container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf no-mac-learning { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf mac-pinning { type empty; description "Enable MAC pinning"; } leaf persistent-learning { junos:must "(!("switch-options mac-table-aging-time "))"; junos:must-message "Persistent learning can not co-exist with mac-table-aging-time"; type empty; description "Enable persistent MAC learning on this interface"; } leaf flow-label-transmit-static { junos:must "(".. .. .. .. instance-type evpn-vpws")"; junos:must-message "Flow-Label static only supported for EVPN-VPWS"; type empty; description "Push Flow Label on PW packets sent to remote PE"; } leaf flow-label-receive-static { junos:must "(".. .. .. .. instance-type evpn-vpws")"; junos:must-message "Flow-Label static only supported for EVPN-VPWS"; type empty; description "Pop Flow Label from PW packets received from remote PE"; } leaf protect-interface { junos:must "("interfaces $$")"; junos:must-message "Interface must be part of this routing instance"; junos:must "(!("interfaces ${inter_name} esi"))"; junos:must-message "ESI can not be configured for protect interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } leaf remote-site-id { junos:must "(!(".. .. .. .. .. l2vpn-id"))"; junos:must-message "Remote site identifier is not valid for FEC 129 VPWS instances"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65534"; } } description "Site identifier associated with this interface"; } leaf target-attachment-identifier { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; junos:must "(unique ".. .. interface <*> target-attachment-identifier $$")"; junos:must-message "All interface target attachment identifiers must be unique within a site"; type string { junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$"; junos:pattern-message " Use fec129 AII type 1 format with just <AC-ID> or fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where <Global-ID> is a value between 0..4294967295, <Prefix> is a value between 0..4294967295 or a valid IP address, <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1). e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2"; } description "FEC 129 VPWS target attachment identifier"; } leaf flow-label-transmit { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; type empty; description "Advertise capability to push Flow Label in transmit direction to remote PE"; } leaf flow-label-receive { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; type empty; description "Advertise capability to pop Flow Label in receive direction to remote PE"; } leaf encapsulation-type { type enumeration { enum "atm-aal5" { value 0; description "ATM AAL/5 encapsulation"; } enum "atm-cell" { value 1; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-port-mode" { value 2; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-vp-mode" { value 3; description "ATM VP promiscuous mode cell encapsulation"; } enum "atm-cell-vc-mode" { value 4; description "ATM non-promiscuous cell encapsulation"; } enum "frame-relay" { value 5; description "Frame Relay encapsulation"; } enum "ppp" { value 6; description "PPP encapsulation"; } enum "cisco-hdlc" { value 7; description "Cisco-compatible HDLC encapsulation"; } enum "ethernet-vlan" { value 8; description "Ethernet VLAN encapsulation"; } enum "ethernet" { value 9; description "Ethernet encapsulation"; } enum "interworking" { value 10; description "Layer 2.5 interworking VPN"; } enum "frame-relay-port-mode" { value 11; description "Frame Relay port mode encapsulation"; } enum "satop-t1" { value 12; description "SATOP-T1 based Layer 2 VPN"; } enum "satop-e1" { value 13; description "SATOP-E1 based Layer 2 VPN"; } enum "satop-t3" { value 14; description "SATOP-T3 based Layer 2 VPN"; } enum "satop-e3" { value 15; description "SATOP-E3 based Layer 2 VPN"; } enum "cesop" { value 16; description "CESOP based Layer 2 VPN"; } } description "Encapsulation type for VPN"; } leaf ignore-encapsulation-mismatch { type empty; description "Allow different encapsulation types on local and remote end"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "512 .. 65535"; } } description "MTU to be advertised to the remote end"; } leaf ignore-mtu-mismatch { type empty; description "Allow different MTU values on local and remote end"; } choice cword { leaf control-word { type empty; description "Adds control-word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control-word to the Layer 2 encapsulation"; } } // choice cword leaf pseudowire-status-tlv { type empty; description "Send pseudowire status TLV"; } container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection } // container oam leaf community { type string; description "Community associated with this interface"; } leaf description { type string; description "Text description"; } } // list interface list site { key "name"; ordered-by user; description "Sites connected to this provider equipment"; leaf name { type string; description "Name of Layer 2 VPN or VPLS site"; } uses apply-advanced; list mesh-group { key "name"; ordered-by user; description "Mesh-groups that are part of this site"; leaf name { junos:must "(".. .. .. mesh-group $$")"; junos:must-message "Mesh-group must be configured to associate with a site"; type string; description "Mesh-group name"; } uses apply-advanced; } // list mesh-group list interface { junos:must "(!(!((".. .. .. .. protocols vpls" || ".. .. .. .. protocols l2vpn"))))"; junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance"; key "name"; ordered-by user; description "Interface that connect this site to the VPN"; leaf name { junos:must "((".. .. .. .. .. interface $$" || any ".. .. .. .. .. bridge-domains <*> interface $$"))"; junos:must-message "Interface must be part of this routing instance"; junos:must "((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Interface must be part of this routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container interface-mac-limit { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; description "Maximum number of MAC addresses learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf disable { type empty; description "Disable interface for interface-mac-limit"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit leaf action-priority { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8"; } } description "Blocking priority of this interface on mac move detection"; } list static-mac { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; key "name"; ordered-by user; description "Static MAC addresses assigned to this interface"; leaf name { junos:must "((!(".. .. .. .. .. .. vlan-id all") || all ".. vlan-id <*>"))"; junos:must-message " Specify vlan-id for qualified learning "; type jt:mac-addr; description "MAC address"; } uses apply-advanced; list vlan-id { junos:must "(".. .. .. .. .. .. vlan-id all")"; junos:must-message "'vlan-id all' has to be configured for the bridging domain"; key "name"; ordered-by user; description "VLAN ID of learning VLAN"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Learning VLAN"; } uses apply-advanced; } // list vlan-id } // list static-mac container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf no-mac-learning { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf mac-pinning { type empty; description "Enable MAC pinning"; } leaf persistent-learning { junos:must "(!("switch-options mac-table-aging-time "))"; junos:must-message "Persistent learning can not co-exist with mac-table-aging-time"; type empty; description "Enable persistent MAC learning on this interface"; } leaf remote-site-id { junos:must "(!(".. .. .. .. .. l2vpn-id"))"; junos:must-message "Remote site identifier is not valid for FEC 129 VPWS instances"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65534"; } } description "Site identifier associated with this interface"; } leaf target-attachment-identifier { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; junos:must "(unique ".. .. interface <*> target-attachment-identifier $$")"; junos:must-message "All interface target attachment identifiers must be unique within a site"; type string { junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$"; junos:pattern-message " Use fec129 AII type 1 format with just <AC-ID> or fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where <Global-ID> is a value between 0..4294967295, <Prefix> is a value between 0..4294967295 or a valid IP address, <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1). e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2"; } description "FEC 129 VPWS target attachment identifier"; } leaf flow-label-transmit { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; type empty; description "Advertise capability to push Flow Label in transmit direction to remote PE"; } leaf flow-label-receive { junos:must "(".. .. source-attachment-identifier")"; junos:must-message "Source attachment identifier configuration required for the containing site"; type empty; description "Advertise capability to pop Flow Label in receive direction to remote PE"; } leaf encapsulation-type { type enumeration { enum "atm-aal5" { value 0; description "ATM AAL/5 encapsulation"; } enum "atm-cell" { value 1; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-port-mode" { value 2; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-vp-mode" { value 3; description "ATM VP promiscuous mode cell encapsulation"; } enum "atm-cell-vc-mode" { value 4; description "ATM non-promiscuous cell encapsulation"; } enum "frame-relay" { value 5; description "Frame Relay encapsulation"; } enum "ppp" { value 6; description "PPP encapsulation"; } enum "cisco-hdlc" { value 7; description "Cisco-compatible HDLC encapsulation"; } enum "ethernet-vlan" { value 8; description "Ethernet VLAN encapsulation"; } enum "ethernet" { value 9; description "Ethernet encapsulation"; } enum "interworking" { value 10; description "Layer 2.5 interworking VPN"; } enum "frame-relay-port-mode" { value 11; description "Frame Relay port mode encapsulation"; } enum "satop-t1" { value 12; description "SATOP-T1 based Layer 2 VPN"; } enum "satop-e1" { value 13; description "SATOP-E1 based Layer 2 VPN"; } enum "satop-t3" { value 14; description "SATOP-T3 based Layer 2 VPN"; } enum "satop-e3" { value 15; description "SATOP-E3 based Layer 2 VPN"; } enum "cesop" { value 16; description "CESOP based Layer 2 VPN"; } } description "Encapsulation type for VPN"; } leaf ignore-encapsulation-mismatch { type empty; description "Allow different encapsulation types on local and remote end"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "512 .. 65535"; } } description "MTU to be advertised to the remote end"; } leaf ignore-mtu-mismatch { type empty; description "Allow different MTU values on local and remote end"; } choice cword { leaf control-word { type empty; description "Adds control-word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control-word to the Layer 2 encapsulation"; } } // choice cword leaf pseudowire-status-tlv { type empty; description "Send pseudowire status TLV"; } container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection } // container oam leaf community { type string; description "Community associated with this interface"; } leaf description { type string; description "Text description"; } } // list interface choice site-identifier-mode { leaf site-identifier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65534"; } } description "Layer 2 VPN or VPLS site identifier (unique in the VPN)"; } container automatic-site-id { junos:must "(!(".. .. .. .. protocols l2vpn"))"; junos:must-message "Automatic site ID is supported only for VPLS service"; junos:must "(!(any ".. .. mesh-group <*> peer-as"))"; junos:must-message "Automatic site cannot be configured with BGP mesh group"; presence "enable automatic-site-id"; description "Enable automatic assignment of site identifier"; uses apply-advanced; leaf startup-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to wait at startup before claming a site identifier (seconds)"; } leaf new-site-wait-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to wait before claiming a site identifier"; } leaf collision-detect-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to wait for detecting a collision"; } container reclaim-wait-time { presence "enable reclaim-wait-time"; description "Time to wait for reclaiming a site identifier"; leaf minimum { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "Minimum wait time"; } leaf maximum { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "Maximum wait time"; } } // container reclaim-wait-time } // container automatic-site-id } // choice site-identifier-mode leaf source-attachment-identifier { junos:must "(".. .. .. .. l2vpn-id")"; junos:must-message "Source attachment identifier only supported for FEC 129 VPWS instances"; junos:must "(unique ".. .. site <*> source-attachment-identifier $$")"; junos:must-message "All site source attachment identifiers must be unique within an instance"; type string { junos:posix-pattern "^([[:digit:].]){1,15}$|^([[:digit:]]){0,10}:([[:digit:].]){0,15}:([[:digit:]]){1,10}$"; junos:pattern-message " Use fec129 AII type 1 format with just <AC-ID> or fec129 AII type 2 format <Global-ID>:<Prefix>:<AC-ID> where <Global-ID> is a value between 0..4294967295, <Prefix> is a value between 0..4294967295 or a valid IP address, <AC-ID> is a value between 1..4294967295 (or a valid IP address for AII type 1). e.g. 1, 0.0.0.1, 0:0:1, 1:2:3, 1:2.2.2.2:3, ::1, 1::2, :1:2"; } description "FEC 129 VPWS source attachment identifier"; } leaf flow-label-transmit { junos:must "(".. .. .. .. l2vpn-id")"; junos:must-message "Per-site Flow Label Config is only supported for FEC129 VPWS"; type empty; description "Advertise capability to push Flow Label in transmit direction to remote PE"; } leaf flow-label-receive { junos:must "(".. .. .. .. l2vpn-id")"; junos:must-message "Per-site Flow Label Config is only supported for FEC129 VPWS"; type empty; description "Advertise capability to push Flow Label in receive direction to remote PE"; } leaf encapsulation-type { type enumeration { enum "atm-aal5" { value 0; description "ATM AAL/5 encapsulation"; } enum "atm-cell" { value 1; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-port-mode" { value 2; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-vp-mode" { value 3; description "ATM VP promiscuous mode cell encapsulation"; } enum "atm-cell-vc-mode" { value 4; description "ATM non-promiscuous cell encapsulation"; } enum "frame-relay" { value 5; description "Frame Relay encapsulation"; } enum "ppp" { value 6; description "PPP encapsulation"; } enum "cisco-hdlc" { value 7; description "Cisco-compatible HDLC encapsulation"; } enum "ethernet-vlan" { value 8; description "Ethernet VLAN encapsulation"; } enum "ethernet" { value 9; description "Ethernet encapsulation"; } enum "interworking" { value 10; description "Layer 2.5 interworking VPN"; } enum "frame-relay-port-mode" { value 11; description "Frame Relay port mode encapsulation"; } enum "satop-t1" { value 12; description "SATOP-T1 based Layer 2 VPN"; } enum "satop-e1" { value 13; description "SATOP-E1 based Layer 2 VPN"; } enum "satop-t3" { value 14; description "SATOP-T3 based Layer 2 VPN"; } enum "satop-e3" { value 15; description "SATOP-E3 based Layer 2 VPN"; } enum "cesop" { value 16; description "CESOP based Layer 2 VPN"; } } description "Encapsulation type for VPN"; } leaf ignore-encapsulation-mismatch { type empty; description "Allow different encapsulation types on local and remote end"; } choice cword { leaf control-word { type empty; description "Adds control-word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control-word to the Layer 2 encapsulation"; } } // choice cword leaf pseudowire-status-tlv { type empty; description "Send pseudowire status TLV"; } container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection } // container oam leaf community { type string; description "Community associated with this site"; } container multi-homing { junos:must "(!(".. automatic-site-id"))"; junos:must-message "Multi-homing cannot be configured for automatic site"; presence "enable multi-homing"; description "Enable multi-homing functionality for this site"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 18000"; } } units "seconds"; description "Enable multi-homing non-designated forwarder hold time (seconds)"; } } // container multi-homing leaf site-preference { type string; description "Layer 2 VPN or VPLS site preference"; } leaf hot-standby { junos:must "(!(".. site-preference primary"))"; junos:must-message "primary site cannot be hot-standby"; type empty; description "Keep backup pseudowire in continuous standby mode and ready for traffic forwarding"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "512 .. 65535"; } } description "MTU to be advertised to the remote end"; } leaf ignore-mtu-mismatch { type empty; description "Allow different MTU values on local and remote end"; } container active-interface { description "Configure interface to designate as active"; choice interface_name { leaf any { type empty; description "One configured interface is designated active at random"; } leaf primary { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface to designate as active if it is operational"; } } // choice interface_name } // container active-interface leaf best-site { junos:must "(!(".. .. .. l2vpn"))"; junos:must-message "'best-site' feature not supported for VPWS/BGP-L2VPN instances"; junos:must "(!(".. .. vpls-id"))"; junos:must-message "'best-site' feature not supported for LDP based VPLS instances"; junos:must "(!(".. interface"))"; junos:must-message "'interface' must not be defined when 'best-site' knob is activated"; type empty; description "Activates best-site functionality for this instance"; } } // list site list neighbor { junos:must "(".. vpls-id")"; junos:must-message "'vpls-id' must be defined"; key "name"; ordered-by user; description "Neighbor for this VPLS instance"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; leaf mac-pinning { type empty; description "Enable MAC pinning"; } container static { junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> static"))"; junos:must-message "Backup neighbor should be static"; presence "enable static"; description "Configuration of static vpls"; uses apply-advanced; leaf incoming-label { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "VPLS outgoing static label"; } choice cword { leaf control-word { type empty; description "Adds control-word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control-word to the Layer 2 encapsulation"; } } // choice cword } // container static container associate-profile { description "Associate profile options for dynamic IFL"; uses apply-advanced; leaf profile-name { type string { length "1 .. 81"; } description "Associated profile name"; } leaf profile-variable-set { type string { length "1 .. 81"; } description "Associate dynamic variable set with the profile"; } } // container associate-profile leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the remote PE"; } leaf community { type string; description "Community associated with this neighbor"; } leaf encapsulation-type { type enumeration { enum "ethernet-vlan" { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; value 0; description "Ethernet VLAN encapsulation"; } enum "ethernet" { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; value 1; description "Ethernet encapsulation"; } } description "Encapsulation type for VPN"; } leaf ignore-encapsulation-mismatch { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; type empty; description "Allow different encapsulation types on local and remote end"; } container pseudowire-status-tlv { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; presence "enable pseudowire-status-tlv"; description "Send pseudowire status TLV"; uses apply-advanced; leaf hot-standby-vc-on { type empty; description "Activate pseudowire upon arrival of 'hot-standby' status TLV message"; } } // container pseudowire-status-tlv leaf switchover-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 180000"; } } units "milliseconds"; default "10000"; description "Pseudowire switchover delay "; } container revert-time { presence "enable revert-time"; description "Enable pseudowire redundancy reversion (seconds)"; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 600"; } } units "seconds"; description "Reversion timer (seconds)"; } leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1200"; } } units "seconds"; description "Maximum reversion interval to add over revert-time delay"; } } // container revert-time leaf connection-protection { junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> standby"))"; junos:must-message "For connection-protection services, backup neighbor must be standby"; junos:must "(!(".. switchover-delay"))"; junos:must-message "connection-protection cannot be configured with switchover-delay"; junos:must "(!(".. revert-time"))"; junos:must-message "connection-protection cannot be configured with revert-time"; type empty; description "End-2-end protection via OAM failure detection"; } list backup-neighbor { key "name"; ordered-by user; description "Configuration of redundant l2circuit"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; container static { junos:must "(".. .. static")"; junos:must-message "Primary Neighbor must be static"; presence "enable static"; description "Configuration of static vpls"; uses apply-advanced; leaf incoming-label { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "VPLS outgoing static label"; } } // container static leaf community { junos:must "(!(".. .. connection-protection"))"; junos:must-message "The backup neighbor cannot be configured with community alongwith connection-protection"; type string; description "Community associated with this Layer 2 circuit"; } leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the remote PE"; } leaf standby { type empty; description "Keep backup pseudowire in continuous standby"; } leaf hot-standby { junos:must "((!(".. .. .. control-word") && !(".. .. .. .. control-word")))"; junos:must-message "Hot-standby cannot be configured while having control-word enabled"; junos:must "(".. .. pseudowire-status-tlv")"; junos:must-message "Pseudowire-status-tlv must be configured in order to have hot-standby enabled"; junos:must "(!(".. .. connection-protection"))"; junos:must-message "Hot-standby cannot be configured while having connection-protection enabled"; junos:must "(!(".. standby"))"; junos:must-message "The backup neighbor cannot be configured with standby and hot-standby features simultaneously"; type empty; description "Keep backup pseudowire in continuous standby mode and ready for traffic forwarding"; } } // list backup-neighbor container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection } // container oam } // list neighbor list mesh-group { key "name"; description "Mesh-group under this VPLS instance"; leaf name { type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "The mesh-group name should be between 1 and 32 characters"; } description "Mesh-group name"; } uses apply-advanced; leaf local-switching { type empty; description "Allow local-switching within interfaces in this mesh-group"; } list neighbor { junos:must "(!(".. peer-as"))"; junos:must-message "'peer-as' and 'neighbor' must not be defined in the same mesh-group"; junos:must "(!(".. interface"))"; junos:must-message "'interface' and 'neighbor' must not be defined in the same mesh-group"; junos:must "((".. vpls-id" || ".. .. vpls-id"))"; junos:must-message "'vpls-id' must be defined"; key "name"; ordered-by user; description "Neighbor belonging to this mesh-group"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; leaf mac-pinning { type empty; description "Enable MAC pinning"; } container static { junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> static"))"; junos:must-message "Backup neighbor should be static"; presence "enable static"; description "Configuration of static vpls"; uses apply-advanced; leaf incoming-label { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "VPLS outgoing static label"; } choice cword { leaf control-word { type empty; description "Adds control-word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control-word to the Layer 2 encapsulation"; } } // choice cword } // container static container associate-profile { description "Associate profile options for dynamic IFL"; uses apply-advanced; leaf profile-name { type string { length "1 .. 81"; } description "Associated profile name"; } leaf profile-variable-set { type string { length "1 .. 81"; } description "Associate dynamic variable set with the profile"; } } // container associate-profile leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the remote PE"; } leaf community { type string; description "Community associated with this neighbor"; } leaf encapsulation-type { type enumeration { enum "ethernet-vlan" { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; value 0; description "Ethernet VLAN encapsulation"; } enum "ethernet" { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; value 1; description "Ethernet encapsulation"; } } description "Encapsulation type for VPN"; } leaf ignore-encapsulation-mismatch { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; type empty; description "Allow different encapsulation types on local and remote end"; } container pseudowire-status-tlv { junos:must "(!(".. static"))"; junos:must-message "not supported for static vpls"; presence "enable pseudowire-status-tlv"; description "Send pseudowire status TLV"; uses apply-advanced; leaf hot-standby-vc-on { type empty; description "Activate pseudowire upon arrival of 'hot-standby' status TLV message"; } } // container pseudowire-status-tlv leaf switchover-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 180000"; } } units "milliseconds"; default "10000"; description "Pseudowire switchover delay "; } container revert-time { presence "enable revert-time"; description "Enable pseudowire redundancy reversion (seconds)"; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 600"; } } units "seconds"; description "Reversion timer (seconds)"; } leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1200"; } } units "seconds"; description "Maximum reversion interval to add over revert-time delay"; } } // container revert-time leaf connection-protection { junos:must "((!(".. backup-neighbor") || all ".. backup-neighbor <*> standby"))"; junos:must-message "For connection-protection services, backup neighbor must be standby"; junos:must "(!(".. switchover-delay"))"; junos:must-message "connection-protection cannot be configured with switchover-delay"; junos:must "(!(".. revert-time"))"; junos:must-message "connection-protection cannot be configured with revert-time"; type empty; description "End-2-end protection via OAM failure detection"; } list backup-neighbor { key "name"; ordered-by user; description "Configuration of redundant l2circuit"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; container static { junos:must "(".. .. static")"; junos:must-message "Primary Neighbor must be static"; presence "enable static"; description "Configuration of static vpls"; uses apply-advanced; leaf incoming-label { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "VPLS incoming static label [1000000 - 1048575] or [29696 - 41983]"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "VPLS outgoing static label"; } } // container static leaf community { junos:must "(!(".. .. connection-protection"))"; junos:must-message "The backup neighbor cannot be configured with community alongwith connection-protection"; type string; description "Community associated with this Layer 2 circuit"; } leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the remote PE"; } leaf standby { type empty; description "Keep backup pseudowire in continuous standby"; } leaf hot-standby { junos:must "((!(".. .. .. control-word") && !(".. .. .. .. control-word")))"; junos:must-message "Hot-standby cannot be configured while having control-word enabled"; junos:must "(".. .. pseudowire-status-tlv")"; junos:must-message "Pseudowire-status-tlv must be configured in order to have hot-standby enabled"; junos:must "(!(".. .. connection-protection"))"; junos:must-message "Hot-standby cannot be configured while having connection-protection enabled"; junos:must "(!(".. standby"))"; junos:must-message "The backup neighbor cannot be configured with standby and hot-standby features simultaneously"; type empty; description "Keep backup pseudowire in continuous standby mode and ready for traffic forwarding"; } } // list backup-neighbor container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection } // container oam leaf-list vpls-id-list { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } ordered-by user; description "LDP VPLS Identifier list for this neighbor"; } } // list neighbor list interface { key "name"; description "Interfaces belonging to this flood group"; leaf name { junos:must "(".. .. .. .. .. interface $$")"; junos:must-message "Interface must be part of this VPLS routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; } // list interface container associate-profile { description "Associate profile options for dynamic IFL"; uses apply-advanced; leaf profile-name { type string { length "1 .. 81"; } description "Associated profile name"; } leaf profile-variable-set { type string { length "1 .. 81"; } description "Associate dynamic variable set with the profile"; } } // container associate-profile choice peer-as-choice { container peer-as { description "Autonomous system of the peer"; uses apply-advanced; leaf all { type empty; description "Include peers from all autonomous systems"; } } // container peer-as } // choice peer-as-choice leaf vpls-id { junos:must "(!(any ".. .. mesh-group <*> route-distinguisher"))"; junos:must-message "Does not support FEC129 and FEC128 LDP VPLS mesh-group under the same instance"; junos:must "(!(".. interface"))"; junos:must-message "'vpls-id' must not be defined when specifying 'interface' in a mesh-group"; type string; description "LDP VPLS Identifier for this mesh-group"; } leaf-list vrf-import { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined"; type jt:policy-algebra; ordered-by user; description "Import policy for VPLS instance mesh-group"; } leaf-list vrf-export { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined"; type jt:policy-algebra; ordered-by user; description "Export policy for VPLS instance mesh-group"; } container vrf-target { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined"; description "VPLS mesh-group target community configuration"; uses apply-advanced; leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use in import and export"; } leaf import { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when filtering on import"; } leaf export { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when marking routes on export"; } } // container vrf-target container mac-flush { presence "enable mac-flush"; description "Enables mac-flush processing"; uses apply-advanced; leaf any-interface { junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))"; junos:must-message "'any-interface' can be configured only for LDP VPLS"; type empty; description "Send mac-flush when any AC interface goes down"; } leaf any-spoke { junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))"; junos:must-message "'any-spoke' can be configured only for LDP VPLS"; type empty; description "Send mac-flush when any spoke pseudo wire goes down"; } leaf propagate { junos:must "((".. .. vpls-id" || ".. .. .. vpls-id"))"; junos:must-message "'propagate' can be configured only for LDP VPLS"; type empty; description "Propagate mac-flush to the core"; } } // container mac-flush container route-distinguisher { junos:must "(!(any ".. .. mesh-group <*> vpls-id"))"; junos:must-message "Does not support FEC129 and FEC128 LDP VPLS mesh-group under the same instance"; description "Route distinguisher for this mesh-group"; leaf rd-type { type string { junos:posix-pattern "^[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100"; } description "Number in (16 bit:32 bit) or (32 bit 'L':16 bit) or (IP address:16 bit) format"; } } // container route-distinguisher } // list mesh-group leaf service-type { type enumeration { enum "single" { value 0; description "Only one service for the virtual-switch"; } } description "Specify service type for vpls"; } leaf designated-forwarder-election-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } units "seconds"; description "Time to wait before electing a DF(seconds)"; } leaf designated-forwarder-preference-least { type empty; description "Use least preference in DF election"; } leaf encapsulation { junos:must "((((".. .. .. instance-type virtual-switch" || (".. .. .. instance-type evpn" || (".. .. .. instance-type mac-vrf" || ".. .. .. instance-type evpn-vpws"))) && !(".. .. .. switch-options route-distinguisher")) || ".. .. .. switch-options route-distinguisher"))"; junos:must-message "Encapsulation can only be configured for an EVPN instance"; type enumeration { enum "mpls" { value 0; description "MPLS encapsulation"; } enum "vxlan" { value 1; description "VXLAN encapsulation"; } enum "mpls-inet6" { value 2; description "MPLS over IPv6 encapsulation"; } } default "mpls"; description "Encapsulation type for EVPN"; } leaf default-gateway { type enumeration { enum "advertise" { value 0; description "Advertise IRB MACs with default gateway community"; } enum "no-gateway-community" { value 1; description "Advertise IRB MACs without default gateway community"; } enum "do-not-advertise" { value 2; description "Do not advertise IRB MACs"; } } description "Default gateway mode"; } container duplicate-mac-detection { description "Duplicate MAC detection settings"; uses apply-advanced; leaf detection-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 20"; } } description "Number of moves to trigger duplicate MAC detection"; } leaf detection-window { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 600"; } } units "seconds"; description "Time window for detection of duplicate MACs"; } leaf auto-recovery-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "minutes"; description "Automatically unblock duplicate MACs after a time delay"; } } // container duplicate-mac-detection choice extended-attributes { case case_1 { } // case case_1 leaf-list extended-vni-list { junos:must "(!((".. .. .. .. .. chassis satellite-management redundancy-groups" && !(".. mclag"))))"; junos:must-message "Need to configure 'protocols evpn mclag' when evpn is configured with mclag."; junos:must "(".. encapsulation vxlan")"; junos:must-message "Extended VNI list can only be configured with encapsulation vxlan"; junos:must "((".. .. .. instance-type virtual-switch" || ".. .. .. instance-type mac-vrf"))"; junos:must-message "Extended VNI list can only be configured in a virtual switch instance"; type string; description "List of VNI identifiers (1..16777214) or all, that are to be EVPN extended"; } case case_3 { } // case case_3 } // choice extended-attributes container evi-options { junos:must "(".. extended-isid-list")"; junos:must-message "Extended-isid-list must be configured"; description "EVI options"; uses juniper-protocols-evi-options; } // container evi-options container remote-ip-host-routes { junos:must "(!(".. encapsulation mpls-inet6"))"; junos:must-message "VMTO not supported with encapsulation mpls-inet6"; junos:must "(!(".. .. .. instance-type vrf"))"; junos:must-message "remote-ip-host-routes knob is for virtual-switch, EVPN or default instance"; presence "enable remote-ip-host-routes"; description "Virtual machine traffic optimization(VMTO) for EVPN"; uses apply-advanced; leaf-list import { type jt:policy-algebra; ordered-by user; description "Policy to control the creation of remote IP host routes"; } leaf no-advertise-community { type empty; description "Don't advertise Type 2 route's community"; } } // container remote-ip-host-routes container assisted-replication { junos:must "(!("forwarding-options multicast-replication evpn irb local-only"))"; junos:must-message "Assisted Replication is not valid with forwarding-options multicast-replication evpn irb local-only"; junos:must "(".. encapsulation vxlan")"; junos:must-message "Assisted Replication is supported only with encapsulation vxlan option"; description "Option to enable Assisted Replication"; uses apply-advanced; choice AR { container leaf { presence "enable leaf"; description "Assisted Replicator Leaf"; uses apply-advanced; leaf replicator-activation-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 180"; } } units "seconds"; default "10"; description "Dealy interval in starting replication"; } } // container leaf case case_2 { } // case case_2 } // choice AR } // container assisted-replication container vrf-target { junos:must "((".. extended-isid-list" || ".. extended-vlan-list"))"; junos:must-message "Extended-isid-list or extended-vlan-list must be configured"; description "VRF target community configuration"; uses apply-advanced; leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use in import and export"; } } // container vrf-target container interconnect { description "Interconnect"; uses juniper-protocols-evpn-interconnect; } // container interconnect leaf pmsi-tunnel-endpoint { junos:must "(!(".. pbb-evpn-core"))"; junos:must-message "Not Supported for PBB EVPN"; junos:must "(!(".. encapsulation mpls-inet6"))"; junos:must-message "Not supported for encapsulation mpls-inet6"; junos:must "(!(".. encapsulation vxlan"))"; junos:must-message "Not Supported for EVPN-VXLAN encapsulation"; junos:must "(!(".. .. .. provider-tunnel"))"; junos:must-message "Not Applicable for P2MP Tunnels"; junos:must "(!(".. .. .. instance-type evpn-vpws"))"; junos:must-message "Not Applicable for instance-type EVPN-VPWS"; type jt:ipv4addr; description "IM IR PMSI tunnel Endpoint for remote PE"; } leaf pmsi-tunnel-endpoint-inet6 { junos:must "(".. encapsulation mpls-inet6")"; junos:must-message "Supported for mpls-inet6 encapsulation only"; junos:must "(!(".. .. .. instance-type evpn-vpws"))"; junos:must-message "Not Applicable for instance-type EVPN-VPWS"; type jt:ipv6addr; description "IM IR PMSI IPv6 tunnel Endpoint for remote PE"; } leaf normalization { junos:must "(!(".. encapsulation vxlan"))"; junos:must-message "Not applicable for EVPN-VXLAN encapsulation"; junos:must "((".. .. .. instance-type mac-vrf" && ".. .. .. service-type vlan-based"))"; junos:must-message "Applicable for mac-vrf vlan-based service only"; type empty; description "Enable vlan id normalization for interfaces"; } leaf smet-etag-carry-vid { junos:must "((".. .. .. instance-type mac-vrf" && ".. .. .. service-type vlan-based"))"; junos:must-message "Applicable for mac-vrf vlan-based service only"; type empty; description "SMET Type 6,7 and 8 Routes to carry vlan id in Ethernet Tag field"; } container irb-symmetric-routing { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "EVPN T-2 symmetric-routing must be configured with instance-type vrf"; description "Enable EVPN T-2 symmtric routing"; uses apply-advanced; leaf vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777214"; } } description "VXLAN network identifier used for T-2 Symmetric Routing IP prefixes"; } } // container irb-symmetric-routing container ip-prefix-routes { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "ip-prefix-routes must be configured with instance-type vrf"; presence "enable ip-prefix-routes"; description "Advertise IP prefixes through EVPN"; uses apply-advanced; leaf advertise { type enumeration { enum "gateway-address" { junos:must "(".. gateway-interface")"; junos:must-message "advertise gateway-address must be configured with gateway-interface"; value 0; description "Advertise a gateway address in exported IP prefix routes"; } enum "direct-nexthop" { junos:must "((".. encapsulation vxlan" || ".. .. .. .. vrf-table-label"))"; junos:must-message "vrf-table-label must be used unless encapsulation vxlan is configured"; value 1; description "Advertise a direct nexthop in exported IP prefix routes"; } } description "Advertisement attributes for IP prefixes"; } leaf gateway-interface { junos:must "(".. advertise gateway-address")"; junos:must-message "gateway-interface must be configured with advertise gateway-address"; junos:must "(".. .. .. .. interface $$")"; junos:must-message "Interface must configured in this routing instance"; junos:must "("interfaces $$ family inet")"; junos:must-message "Family inet must be defined"; junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Gateway interface used when gateway address is advertised"; } leaf encapsulation { type enumeration { enum "mpls" { junos:must "(".. advertise direct-nexthop")"; junos:must-message "encapsulation must be configured with advertise direct-nexthop"; value 0; description "MPLS encapsulation"; } enum "vxlan" { junos:must "(".. vni")"; junos:must-message "encapsulation vxlan must be configured with vni"; junos:must "((".. advertise direct-nexthop" || ".. .. irb-symmetric-routing"))"; junos:must-message "encapsulation must be configured with advertise direct-nexthop or irb-symmetric-routing"; value 1; description "VXLAN encapsulation"; } } description "Encapsulation used for IP prefixes"; } leaf vni { junos:must "(".. encapsulation vxlan")"; junos:must-message "vni must be configured with encapsulation vxlan"; junos:must "((".. advertise direct-nexthop" || ".. .. irb-symmetric-routing"))"; junos:must-message "vni must be configured with advertise direct-nexthop or irb-symmetric-routing"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777214"; } } description "VXLAN network identifier used for IP prefixes"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Policy to control import of IP prefixes from EVPN"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Policy to control export of IP prefixes through EVPN"; } container route-attributes { description "Route Attribute Import Export Option"; uses apply-advanced; container as-path { description "AS-PATH Attribute"; uses apply-advanced; leaf import-action { type enumeration { enum "allow" { value 0; description "Inherit as-path from EVPN routes to IP routes"; } enum "skip" { value 1; description "Donot inehrit as-path from EVPN routes to IP routes"; } } description "AS-PATH Attribute Inherit Option on Import"; } leaf export-action { type enumeration { enum "allow" { value 0; description "Inherit as-path from IP routes to EVPN routes"; } enum "skip" { value 1; description "Donot inherit as-path from IP routes to EVPN routes"; } } description "AS-PATH Attribute Inherit Option on Export"; } } // container as-path container preference { description "Preference Attribute"; uses apply-advanced; leaf import-action { type enumeration { enum "allow" { value 0; description "Inherit preference from EVPN routes to IP routes"; } enum "skip" { value 1; description "Donot inherit preference from EVPN routes to EVPN routes"; } } description "Preference Attribute Inerit Option on Import"; } leaf export-action { type enumeration { enum "allow" { value 0; description "Inherit preference from IP routes to EVPN routes"; } enum "skip" { value 1; description "Donot inherit preference from IP routes to EVPN routes"; } } description "Preference Attribute Inherit Option on Export"; } } // container preference container community { description "Community Attribute"; uses apply-advanced; leaf import-action { type enumeration { enum "allow" { value 0; description "Inherit community from EVPN routes to IP routes"; } enum "skip" { value 1; description "Donot inherit community from EVPN routes to IP routes"; } } description "Community Attribute Inherit Option on Import"; } leaf export-action { type enumeration { enum "allow" { value 0; description "Inherit community from IP routes to EVPN routes"; } enum "skip" { value 1; description "Donot inherit community from IP route to EVPN routes"; } } description "Community Attribute Inherit Option on Export"; } } // container community } // container route-attributes } // container ip-prefix-routes leaf igmp-id { junos:must "(!(".. encapsulation mpls-inet6"))"; junos:must-message "IGMP snooping not supported with encapsulation mpls-inet6"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "EVPN IGMP Identifier value"; } leaf multicast-mode { junos:must "(".. encapsulation vxlan")"; junos:must-message "multicast-mode can only be configured with encapsulation vxlan"; junos:must "((((".. .. .. instance-type virtual-switch" || ".. .. .. instance-type mac-vrf") && !(".. .. .. switch-options route-distinguisher")) || ".. .. .. switch-options route-distinguisher"))"; junos:must-message "multicast-mode can only be configured in a virtual switch instance"; type enumeration { enum "ingress-replication" { value 0; description "Ingress Replication"; } } default "ingress-replication"; description "Multicast mode for EVPN"; } container oism { junos:must "(".. oism supplemental-bridge-domain-irb")"; junos:must-message "OISM must be configured with Supplemental Bridge Domain"; junos:must "(".. .. .. instance-type vrf")"; junos:must-message "oism must be configured with instance-type vrf"; description "EVPN Multicast OISM features"; uses apply-advanced; leaf supplemental-bridge-domain-irb { junos:must "(".. .. .. .. interface $$")"; junos:must-message "Interface must configured in this routing instance"; junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "OISM SBD irb interface address"; } leaf originate-smet-on-revenue-vlan-too { type empty; description "Originate smet route on revenue vlan too"; } container pim-evpn-gateway { presence "enable pim-evpn-gateway"; description "Configure PIM EVPN Gateway PEG parameters"; uses apply-advanced; list external-irb { key "name"; ordered-by user; description "List of IRBs for external connectivity"; leaf name { junos:must "(".. .. .. .. .. .. interface $$")"; junos:must-message "Interface must be configured in this instance"; junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "External vlan interface name"; } uses apply-advanced; } // list external-irb } // container pim-evpn-gateway } // container oism choice flexible-cross-connect-type { leaf flexible-cross-connect-vlan-aware { junos:must "(!(".. encapsulation mpls-inet6"))"; junos:must-message "EVPN flexible cross-connect not supported with encapsulation mpls-inet6"; junos:must "(!(".. flexible-cross-connect-vlan-unaware"))"; junos:must-message "VPWS Instance can support either vlan aware or unaware service"; junos:must "(".. .. .. instance-type evpn-vpws")"; junos:must-message "instance-type evpn-vpws must be configured"; type empty; description "Enable EVPN flexible cross-connect VLAN aware Service"; } leaf flexible-cross-connect-vlan-unaware { junos:must "(!(".. flexible-cross-connect-vlan-aware"))"; junos:must-message "VPWS Instance can support either vlan aware or unaware service"; junos:must "(!(".. encapsulation mpls-inet6"))"; junos:must-message "EVPN flexible cross-connect not supported with encapsulation mpls-inet6"; junos:must "(".. .. .. instance-type evpn-vpws")"; junos:must-message "instance-type evpn-vpws must be configured"; type empty; description "Enable EVPN flexible cross-connect VLAN unaware Service"; } } // choice flexible-cross-connect-type leaf auto-service-id { junos:must "(".. flexible-cross-connect-vlan-aware")"; junos:must-message "flexible-cross-connect-vlan-aware must be configured"; junos:must "(".. .. .. instance-type evpn-vpws")"; junos:must-message "instance-type evpn-vpws must be configured"; type empty; description "Enable auto-derivation of VPWS service instance identifier"; } leaf hot-standby-on { junos:must "(".. .. .. instance-type evpn-vpws")"; junos:must-message "instance-type evpn-vpws must be configured"; type empty; description "Activate evpn vpws upon becoming DF"; } list group { junos:must "(".. flexible-cross-connect-vlan-unaware")"; junos:must-message "flexible-cross-connect-vlan-unaware must be configured"; junos:must "(".. .. .. instance-type evpn-vpws")"; junos:must-message "instance-type evpn-vpws must be configured"; key "name"; ordered-by user; description "Enable EVPN flexible cross-connect VLAN unaware Service"; leaf name { type string; description "Group name to group vlan unaware cross connects"; } uses apply-advanced; container esi { presence "enable esi"; description "ESI configuration to group vlan unaware cross connects"; uses apply-advanced; leaf identifier { type jt:esi; description "ESI value for grouping of vlan unaware cross connects"; } } // container esi list interface { key "name"; ordered-by user; description "Name of the interface part of vlan unaware fxc"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; } // list interface container service-id { presence "enable service-id"; description "Service-id for vlan unaware cross connects for EVPN VPWS"; uses apply-advanced; leaf local { junos:must "(unique ".. .. group <*> service-id local $$")"; junos:must-message "Unique Local SID can only be configured "; junos:must "(unique ".. .. interface <*> vpws-service-id local $$")"; junos:must-message "Unique Local SID can only be configured "; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Local service id for vlan unaware service"; } leaf remote { junos:must "(unique ".. .. group <*> service-id remote $$")"; junos:must-message "Unique Remote SID can only be configured "; junos:must "(unique ".. .. interface <*> vpws-service-id remote $$")"; junos:must-message "Unique Remote SID can only be configured "; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Remote service id for vlan unaware service"; } } // container service-id } // list group container vni-options { junos:must "(".. .. .. vrf-target")"; junos:must-message "vrf-target must be configured"; junos:must "((".. extended-vni-list" || ".. .. .. instance-type mac-vrf"))"; junos:must-message "Extended-vni-list must be configured for non mac-vrf instance"; junos:must "(".. encapsulation vxlan")"; junos:must-message "encapsulation vxlan must be configured"; description "VNI options"; uses apply-advanced; list vni { key "name"; description "Per-vni options"; leaf name { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 16777214"; } } } uses apply-advanced; container vrf-target { description "VRF target community configuration"; uses apply-advanced; leaf export { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } status deprecated; description "Target community to use when marking routes on export"; } leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community"; } } // container vrf-target } // list vni } // container vni-options container traceoptions { description "Trace options for Layer 2 VPNs"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errors"; } enum "topology" { value 1; description "Trace Layer 2 VPN, VPLS and EVPN topology changes"; } enum "nlri" { value 2; description "Trace Layer 2 VPN, VPLS and EVPN remote site advertisements"; } enum "connections" { value 3; description "Trace Layer 2 VPN and VPLS connections"; } enum "automatic-site" { value 4; description "Trace VPLS automatic site state"; } enum "oam" { value 5; description "Trace OAM messages"; } enum "mac-database" { value 6; description "Trace MAC route database in a EVPN instance"; } enum "nsr" { value 7; description "Trace NSR in a EVPN instance"; } enum "egress-protection" { value 8; description "Trace Edge Protection messages"; } enum "instance" { value 9; description "Evpn instance related messages"; } enum "interface" { value 10; description "Interface related messages"; } enum "l2aldsync" { value 11; description "Messages related to EVPN-L2ALD communication"; } enum "p2mp" { value 12; description "P2MP messages"; } enum "esi" { value 13; description "Evpn ethernet segment related messages"; } enum "mcsn" { value 14; description "Evpn multicast snooping related messages"; } enum "vpws" { value 15; description "VPWS messages"; } enum "irb" { value 16; description "Integrated routing bridging messages"; } enum "ar" { value 17; description "Assisted-replication messages"; } enum "etree" { value 18; description "Evpn etree messages"; } enum "kernel" { value 19; description "Messages related to rpd-kernel communication"; } enum "bd" { value 20; description "Evpn bridge domain messages"; } enum "pbb" { value 21; description "Evpn provider backbone bridging messages"; } enum "infra" { value 22; description "Messages related to infrastructure in evpn"; } enum "pfxdb" { value 23; description "Type-5 related messages"; } enum "route" { value 24; description "Trace routing information"; } enum "normal" { value 25; description "Trace normal events"; } enum "general" { value 26; description "Trace general events"; } enum "state" { value 27; description "Trace state transitions"; } enum "policy" { value 28; description "Trace policy processing"; } enum "task" { value 29; description "Trace routing protocol task processing"; } enum "timer" { value 30; description "Trace routing protocol timer processing"; } enum "all" { value 31; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf encapsulation-type { type enumeration { enum "atm-aal5" { value 0; description "ATM AAL/5 encapsulation"; } enum "atm-cell" { value 1; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-port-mode" { value 2; description "ATM port promiscuous mode cell encapsulation"; } enum "atm-cell-vp-mode" { value 3; description "ATM VP promiscuous mode cell encapsulation"; } enum "atm-cell-vc-mode" { value 4; description "ATM non-promiscuous cell encapsulation"; } enum "frame-relay" { value 5; description "Frame Relay encapsulation"; } enum "ppp" { value 6; description "PPP encapsulation"; } enum "cisco-hdlc" { value 7; description "Cisco-compatible HDLC encapsulation"; } enum "ethernet-vlan" { value 8; description "Ethernet VLAN encapsulation"; } enum "ethernet" { value 9; description "Ethernet encapsulation"; } enum "interworking" { value 10; description "Layer 2.5 interworking VPN"; } enum "frame-relay-port-mode" { value 11; description "Frame Relay port mode encapsulation"; } enum "satop-t1" { value 12; description "SATOP-T1 based Layer 2 VPN"; } enum "satop-e1" { value 13; description "SATOP-E1 based Layer 2 VPN"; } enum "satop-t3" { value 14; description "SATOP-T3 based Layer 2 VPN"; } enum "satop-e3" { value 15; description "SATOP-E3 based Layer 2 VPN"; } enum "cesop" { value 16; description "CESOP based Layer 2 VPN"; } } description "Encapsulation type for VPN"; } leaf control-word { type empty; description "Add control word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Disables control word on the Layer 2 encapsulation"; } leaf site-range { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65534"; } } description "Maximum site identifier in this VPLS domain"; } leaf label-block-size { type enumeration { enum "2" { value 0; description "Label block size of 2"; } enum "4" { value 1; description "Label block size of 4"; } enum "8" { value 2; description "Label block size of 8"; } enum "16" { value 3; description "Label block size of 16"; } } description "Label block size for this VPLS instance"; } choice tunnel-services-choice { container tunnel-services { description "Use tunnel services for this VPLS instance"; uses apply-advanced; leaf-list devices { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tunnel services devices to use for this VPLS instance"; } leaf primary { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Primary tunnel services device to use for VPLS instance"; } } // container tunnel-services leaf no-tunnel-services { type empty; description "Do not use tunnel services for this VPLS instance"; } } // choice tunnel-services-choice leaf community { type string; description "Community associated with this VPLS instance"; } leaf vpls-id { type string; description "Identifier for this VPLS instance"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "512 .. 65535"; } } description "MTU to be advertised to the remote end"; } leaf ignore-mtu-mismatch { type empty; description "Allow different MTU values on local and remote end"; } container mac-flush { presence "enable mac-flush"; description "Enables mac-flush processing"; uses apply-advanced; leaf any-interface { junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))"; junos:must-message "'any-interface' can be configured only for LDP VPLS"; type empty; description "Send mac-flush when any AC interface goes down"; } leaf any-spoke { junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))"; junos:must-message "'any-spoke' can be configured only for LDP VPLS"; type empty; description "Send mac-flush when any spoke pseudo wire goes down"; } leaf propagate { junos:must "((".. .. vpls-id" || any ".. .. mesh-group <*> vpls-id"))"; junos:must-message "'propagate' can be configured only for LDP VPLS"; type empty; description "Propagate mac-flush to the core"; } } // container mac-flush leaf ignore-encapsulation-mismatch { type empty; description "Allow different encapsulation types on local and remote end"; } leaf pseudowire-status-tlv { type empty; description "Send pseudowire status TLV"; } leaf flow-label-transmit { type empty; description "Advertise capability to push Flow Label in transmit direction to remote PE"; } leaf flow-label-receive { type empty; description "Advertise capability to pop Flow Label in receive direction to remote PE"; } leaf flow-label-transmit-static { junos:must "((".. vpls-id" || (".. .. .. l2vpn-id" || (".. .. .. instance-type evpn-vpws" || (".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))))"; junos:must-message "Flow-Label static only supported for FEC128 or FEC129 VPLS, EVPN, Virtual-switch or VPWS"; junos:must "(!(".. flow-label-transmit"))"; junos:must-message "Can't have flow-label-transmit-static along with flow-label-transmit"; type empty; description "Push Flow Label on PW packets sent to remote PE"; } leaf flow-label-receive-static { junos:must "((".. vpls-id" || (".. .. .. l2vpn-id" || (".. .. .. instance-type evpn-vpws" || (".. .. .. instance-type evpn" || ".. .. .. instance-type virtual-switch")))))"; junos:must-message "Flow-Label static only supported for FEC128 or FEC129 VPLS, EVPN, Virtual-switch or VPWS"; junos:must "(!(".. flow-label-receive"))"; junos:must-message "Can't have flow-label-receive-static along with flow-label-receive"; type empty; description "Pop Flow Label from PW packets received from remote PE"; } container associate-profile { description "Associate profile options for dynamic IFL"; uses apply-advanced; leaf profile-name { type string { length "1 .. 81"; } description "Associated profile name"; } leaf profile-variable-set { type string { length "1 .. 81"; } description "Associate dynamic variable set with the profile"; } } // container associate-profile leaf connectivity-type { type enumeration { enum "ce" { value 0; description "CE interface is required"; } enum "irb" { value 1; description "IRB interface is sufficient"; } enum "permanent" { value 2; description "Pseudowire permanently up"; } } description "Specify type of interface sufficient to bring vpls connection up"; } list import-labeled-routes { junos:must "(!(".. neighbor"))"; junos:must-message "not supported for static vpls"; key "name"; ordered-by user; description "Import ingress label route to instance.mpls.0 from mpls.0"; leaf name { junos:must "("routing-instances $$ protocols mpls")"; junos:must-message "protocols MPLS must be configured on routing-instance to import the labeled routes"; junos:must "("routing-instances $$ instance-type virtual-router")"; junos:must-message "Ingress labelled route can be imported only to routing-instance type virtual-router"; junos:must "("routing-instances $$")"; junos:must-message "Referenced routing instance must be defined"; type string; description "Routing instance name where label route has to be imported"; } } // list import-labeled-routes container oam { description "OAM Configuration for VPN"; uses apply-advanced; leaf ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between ping messages"; } leaf ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time } // container bfd-liveness-detection container control-channel { description "Supported control channel type "; uses apply-advanced; choice action-choice { leaf pwe3-control-word { type empty; description "For BGP based PW send oam packets with control word, with 0001b as first nibble"; } leaf router-alert-label { type empty; description "For BGP based PW send oam packets with router alert label"; } leaf pw-label-ttl-1 { type empty; description "For BGP based PW send oam packets with MPLS pw label TTL = 1"; } } // choice action-choice } // container control-channel } // container oam container multi-homing { description "Multi-homing configuration for FEC129 VPLS"; uses apply-advanced; leaf peer-active { type empty; description "Keep CE interfaces in up state when all BGP peers go down"; } list site { key "name"; description "Sites connected to this provider equipment"; leaf name { type string; description "Name of Layer 2 VPN or VPLS site"; } uses apply-advanced; leaf identifier { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65534"; } } description "Layer 2 VPN or VPLS multi-homing identifier"; } leaf preference { type string; description "Layer 2 VPN or VPLS multi-homing preference"; } container active-interface { description "Configure interface to designate as active"; uses apply-advanced; choice interface_name { leaf any { type empty; description "One configured interface is designated active at random"; } leaf primary { junos:must "(".. .. .. .. .. .. interface $$")"; junos:must-message "Interface must be part of this VPLS routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface to designate as active if it is operational"; } } // choice interface_name } // container active-interface list interface { key "name"; ordered-by user; description "Interface that connects this site to the VPN"; leaf name { junos:must "(".. .. .. .. .. .. interface $$")"; junos:must-message "Interface must be part of this VPLS routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf preference { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Layer 2 VPN or VPLS multi-homing preference for the interface"; } } // list interface leaf peer-active { type empty; description "Keep CE interfaces in up state when all BGP peers go down"; } } // list site } // container multi-homing } // grouping juniper-protocols-l2vpn grouping juniper-protocols-evi-options { uses apply-advanced; list isid { key "name"; description "Per-evi options"; leaf name { type union { type string { pattern "<.*>|$.*"; } type int32 { range "256 .. 16777214"; } } } uses apply-advanced; container vrf-target { description "VRF target community configuration"; uses apply-advanced; leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community"; } } // container vrf-target } // list isid } // grouping juniper-protocols-evi-options grouping juniper-protocols-evpn-interconnect { description "Interconnect configuration for the routing instance"; uses apply-advanced; leaf-list vrf-import { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined for vrf-import"; type jt:policy-algebra; ordered-by user; description "Import policy for Interconnect"; } leaf-list vrf-export { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined for vrf-export"; type jt:policy-algebra; ordered-by user; description "Export policy for Interconnect"; } container vrf-target { junos:must "(".. route-distinguisher")"; junos:must-message "route distinguisher must be defined for vrf-target"; description "Interconnect target community configuration"; uses apply-advanced; leaf community { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use in import and export"; } leaf import { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when filtering on import"; } leaf export { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community to use when marking routes on export"; } } // container vrf-target container route-distinguisher { description "Route distinguisher for this interconnect"; leaf rd-type { type string { junos:posix-pattern "^[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100"; } description "Number in (16 bit:32 bit) or (32 bit 'L':16 bit) or (IP address:16 bit) format"; } } // container route-distinguisher container esi { description "ESI configuration of interconnect"; uses apply-advanced; leaf identifier { junos:must "(unique "interfaces <*> esi $$")"; junos:must-message "ESI value must be unique across all IFDs and IFLs"; type jt:esi; description "ESI value for interconnect"; } choice mode { leaf all-active { type empty; description "All-active mode"; } } // choice mode container df-election-type { presence "enable df-election-type"; description "DF Election Type"; uses apply-advanced; choice pref_choice { container preference { presence "enable preference"; description "Preference based DF election"; uses apply-advanced; leaf value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } default "32767"; description "Preference value for EVPN Multihoming DF election"; } } // container preference } // choice pref_choice choice mod_choice { container mod { junos:must "(!(".. preference"))"; junos:must-message "preference must not be configured"; presence "enable mod"; description "MOD based DF election"; } // container mod } // choice mod_choice } // container df-election-type } // container esi leaf-list interconnected-vni-list { type string; description "List of translated VNIs (1..16777214) or all, that are to be EVPN interconnected"; } } // grouping juniper-protocols-evpn-interconnect grouping juniper-protocols-ldp { uses apply-advanced; container traceoptions { description "Trace options for LDP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errored packets"; } enum "event" { value 1; description "Trace LDP state machine events"; } enum "packet-dump" { value 2; description "Dump the contents of selected packet types"; } enum "packets" { value 3; description "Trace all LDP packets"; } enum "periodic" { value 4; description "Trace periodic (hello and keepalive) packets"; } enum "initialization" { value 5; description "Trace initialization packets"; } enum "notification" { value 6; description "Trace notification packets"; } enum "address" { value 7; description "Trace address packets"; } enum "label" { value 8; description "Trace label packets"; } enum "binding" { value 9; description "Trace label binding state"; } enum "path" { value 10; description "Trace label path state"; } enum "ppmd" { value 11; description "Trace state and events for ppmd process"; } enum "nsr-synchronization" { value 12; description "Trace NSR synchronization events"; } enum "link-protection" { value 13; description "Trace link protection events"; } enum "p2mp-nsr-synchronization" { value 14; description "Trace p2mp NSR synchronization events"; } enum "route" { value 15; description "Trace routing information"; } enum "normal" { value 16; description "Trace normal events"; } enum "general" { value 17; description "Trace general events"; } enum "state" { value 18; description "Trace state transitions"; } enum "policy" { value 19; description "Trace policy processing"; } enum "task" { value 20; description "Trace routing protocol task processing"; } enum "timer" { value 21; description "Trace routing protocol timer processing"; } enum "all" { value 22; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses ldp_filter_obj; } // container filter } // list flag } // container traceoptions container traffic-statistics { description "Collect statistics for LDP label-switched paths"; uses apply-advanced; container file { description "Statistics file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file leaf interval { type union { type string { pattern "<.*>|$.*"; } type int32 { range "60 .. 65535"; } } description "Time to collect statistics (seconds)"; } leaf no-penultimate-hop { type empty; description "No penultimate hop statistics collection"; } } // container traffic-statistics container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf helper-disable { type empty; description "Disable the graceful restart helper capability"; } leaf recovery-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "120 .. 1800"; } } units "seconds"; description "Time required for recovery"; } leaf maximum-neighbor-recovery-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "140 .. 1900"; } } units "seconds"; description "Maximum time stale mappings are maintained"; } leaf reconnect-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 300"; } } units "seconds"; description "Time required to reestablish session after graceful restart"; } leaf maximum-neighbor-reconnect-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 300"; } } units "seconds"; description "Maximum reconnect time allowed from a restarting neighbor"; } } // container graceful-restart container auto-targeted-session { presence "enable auto-targeted-session"; description "Configure auto targeted session parameters"; uses apply-advanced; leaf teardown-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; default "90"; description "Auto targeted session tear down delay"; } leaf maximum-sessions { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } default "100"; description "Auto targeted maximum sessions"; } leaf no-rlfa { type empty; description "Do not allow RLFA in auto targeted sessions"; } leaf no-dynamic-tunnels { type empty; description "Do not allow dynamic tunnels in auto targeted sessions"; } } // container auto-targeted-session leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Route preference"; } leaf no-forwarding { type empty; description "Do not use LDP ingress routes for forwarding"; } leaf rib-group { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-group must be defined"; type string; description "Routing table group for importing ingress routes"; } leaf rib-group6 { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-group must be defined"; type string; description "Routing table group for importing ingress v6 routes"; } leaf l2-smart-policy { type empty; description "Do not export or import Layer 3 FECs for Layer 2 sessions"; } leaf track-igp-metric { type empty; description "Track the IGP metric"; } leaf strict-targeted-hellos { type empty; description "Do not send targeted hellos to unconfigured neighbors"; } container longest-match { presence "enable longest-match"; description "Configure longest match"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Longest match import policy"; } } // container longest-match leaf-list color-import-policy { type jt:policy-algebra; ordered-by user; description "Import color policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list egress-policy { type jt:policy-algebra; ordered-by user; description "Configure LSP egress policy"; } leaf-list dod-request-policy { type jt:policy-algebra; ordered-by user; description "Configure DoD label request policy"; } container next-hop { description "LDP next-hop control"; uses apply-advanced; container merged { junos:must "("protocols ldp deaggregate")"; junos:must-message "next-hop merged policy requires deaggregate to be enabled."; description "Merged next hop"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Merged next-hop policy"; } } // container merged container no-rsvp-tunneling { junos:must "("protocols ldp deaggregate")"; junos:must-message "next-hop no-rsvp-tunneling policy requires deaggregate to be enabled."; description "No rsvp tunneling"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "No rsvp tunneling next-hop policy"; } } // container no-rsvp-tunneling } // container next-hop choice mtu-discovery-choice { leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf no-mtu-discovery { type empty; description "Don't enable TCP path MTU discovery"; } } // choice mtu-discovery-choice choice deaggregate-choice { leaf deaggregate { type empty; description "Deaggregate FECs into separate labels"; } leaf no-deaggregate { type empty; description "Don't deaggregate FECs into separate labels"; } } // choice deaggregate-choice leaf explicit-null { type empty; description "Advertise the EXPLICIT_NULL label for egress FECs"; } leaf label-withdrawal-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 120"; } } units "seconds"; default "60"; description "Delay label withdrawal for FECs to avoid label churn"; } container make-before-break { presence "enable make-before-break"; description "Configure make before break"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; default "30"; description "Make before break timeout"; } leaf switchover-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; default "3"; description "Make before break switchover delay"; } } // container make-before-break container transport-address { description "Address used for TCP sessions"; choice address-choice { leaf router-id { type empty; description "Use router ID for TCP connections"; } leaf interface { type empty; description "Use interface address for TCP connections"; } leaf address { type jt:ipaddr; description "Use specified address for TCP connections"; } } // choice address-choice } // container transport-address leaf keepalive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Keepalive interval (seconds)"; } leaf keepalive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Keepalive timeout (seconds)"; } list interface { key "name"; description "Enable LDP on this interface"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable LDP on this interface"; } } // choice enable-disable leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Hello interval (seconds)"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Hello hold time (seconds)"; } container link-protection { presence "enable link-protection"; description "Enable link protection to protect interface for link faults only"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable link-protection"; } } // choice enable-disable leaf dynamic-rsvp-lsp { type empty; description "Enable setup of dynamic rsvp lsp for link protection"; } } // container link-protection container transport-address { description "Address used for TCP sessions"; choice address-choice { leaf router-id { type empty; description "Use router ID for TCP connections"; } leaf interface { type empty; description "Use interface address for TCP connections"; } leaf address { type jt:ipaddr; description "Use specified address for TCP connections"; } } // choice address-choice } // container transport-address choice allow-subnet-mismatch-choice { leaf allow-subnet-mismatch { type empty; description "Allow subnet mismatch for source address in hello packet"; } leaf no-allow-subnet-mismatch { type empty; description "Don't allow subnet mismatch for source address in hello packet"; } } // choice allow-subnet-mismatch-choice } // list interface list neighbor { key "name"; description "Configure a remote LDP neighbor"; leaf name { type jt:ipaddr; description "Neighbor address"; } uses apply-advanced; } // list neighbor list session { key "name"; description "Configure session parameters"; leaf name { type jt:ipaddr; description "Session destination address"; } uses apply-advanced; leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf downstream-on-demand { type empty; description "Configure downstream on demand label distribution mode"; } leaf transport-address { type jt:ipaddr; description "Address used for TCP sessions to the neighbor"; } choice mtu-discovery-choice { leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf no-mtu-discovery { type empty; description "Don't enable TCP path MTU discovery"; } } // choice mtu-discovery-choice } // list session list session-group { key "name"; description "Configure session group parameters"; leaf name { type jt:ipprefix; description "Session destination address/prefix length"; } uses apply-advanced; leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf downstream-on-demand { type empty; description "Configure downstream on demand label distribution mode"; } leaf transport-address { type jt:ipaddr; description "Address used for TCP sessions to the neighbor"; } choice mtu-discovery-choice { leaf mtu-discovery { type empty; description "Enable TCP path MTU discovery"; } leaf no-mtu-discovery { type empty; description "Don't enable TCP path MTU discovery"; } } // choice mtu-discovery-choice } // list session-group container session-protection { presence "enable session-protection"; description "Configure session protection"; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } units "seconds"; description "Session protection timeout"; } } // container session-protection container igp-synchronization { description "Configure IGP synchronization parameters"; uses apply-advanced; leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 300"; } } units "seconds"; description "Time to hold the up notification to the IGPs"; } } // container igp-synchronization container log-updown { description "Logging actions for LSP up/down events"; uses apply-advanced; container trap { description "SNMP traps options"; choice enable-disable { leaf disable { type empty; description "Disable LDP LSP up/down trap"; } } // choice enable-disable } // container trap } // container log-updown container policing { description "Configure policing for an LDP FEC"; uses apply-advanced; list fec { key "name"; ordered-by user; description "Forwarding equivalence class"; leaf name { type jt:ipv4prefix; description "Forwarding equivalence class address"; } uses apply-advanced; leaf ingress-traffic { junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))"; junos:must-message "referenced filter must be defined under firewall family any"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of filter to use for policing ingress LDP traffic"; } leaf transit-traffic { junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))"; junos:must-message "referenced filter must be defined under firewall family any"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of filter to use for policing transit LDP traffic"; } } // list fec } // container policing container entropy-label { description "Insert entropy label for a LDP FEC"; uses apply-advanced; leaf-list ingress-policy { type jt:policy-algebra; ordered-by user; description "Entropy label ingress policy"; } } // container entropy-label container oam { description "Configure periodic OAM for a LDP FEC"; uses apply-advanced; leaf-list ingress-policy { type jt:policy-algebra; ordered-by user; description "OAM ingress policy"; } leaf-list bfd-port-egress-policy { type jt:policy-algebra; ordered-by user; description "OAM egress policy"; } list fec { key "name"; ordered-by user; description "Forwarding equivalence class"; leaf name { type jt:ipv4prefix; description "Forwarding equivalence class address"; } uses apply-advanced; choice bfd_liveness_detection_type { container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time leaf ecmp { type empty; description "Enable equal cost multipath (ECMP) support for BFD"; } container failure-action { description "Action to take when BFD session goes down"; choice action-choice { leaf remove-route { type empty; description "Remove LDP route from the ribs"; } leaf remove-nexthop { type empty; description "Remove LDP nexthop from the route"; } } // choice action-choice } // container failure-action leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; default "0"; description "Time to hold the session-UP notification to the client"; } leaf no-router-alert-option { type empty; description "Do not set Router-Alert options in IP header for MPLS-BFD"; } leaf use-ip-ttl-1 { type empty; description "Set TTL value to 1 in IP header for MPLS-BFD"; } } // container bfd-liveness-detection leaf no-bfd-liveness-detection { type empty; description "Disable BFD liveness detection"; } } // choice bfd_liveness_detection_type container periodic-traceroute { presence "enable periodic-traceroute"; description "Configure periodic traceroute"; uses apply-advanced; leaf frequency { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "15 .. 120"; } } units "minutes"; description "Time between traceroute attempts"; } leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Maximum time-to-live value"; } leaf retries { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 9"; } } description "Number of times to resend probe"; } leaf wait { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "5 .. 15"; } } units "seconds"; description "Time to wait before resending probe"; } leaf paths { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Maximum number of paths to traverse"; } leaf source { type jt:ipv4addr; description "Source address to use when sending probes"; } leaf exp { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 7"; } } description "Class-of-service value to use when sending probes"; } leaf fanout { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 64"; } } description "Maximum number of nexthops to search per node"; } leaf disable { type empty; description "Disable periodic traceroute for a FEC"; } } // container periodic-traceroute } // list fec container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time leaf ecmp { type empty; description "Enable equal cost multipath (ECMP) support for BFD"; } container failure-action { description "Action to take when BFD session goes down"; choice action-choice { leaf remove-route { type empty; description "Remove LDP route from the ribs"; } leaf remove-nexthop { type empty; description "Remove LDP nexthop from the route"; } } // choice action-choice } // container failure-action leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; default "0"; description "Time to hold the session-UP notification to the client"; } leaf no-router-alert-option { type empty; description "Do not set Router-Alert options in IP header for MPLS-BFD"; } leaf use-ip-ttl-1 { type empty; description "Set TTL value to 1 in IP header for MPLS-BFD"; } } // container bfd-liveness-detection container periodic-traceroute { presence "enable periodic-traceroute"; description "Configure periodic traceroute"; uses apply-advanced; leaf frequency { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "15 .. 120"; } } units "minutes"; description "Time between traceroute attempts"; } leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Maximum time-to-live value"; } leaf retries { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 9"; } } description "Number of times to resend probe"; } leaf wait { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "5 .. 15"; } } units "seconds"; description "Time to wait before resending probe"; } leaf paths { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Maximum number of paths to traverse"; } leaf source { type jt:ipv4addr; description "Source address to use when sending probes"; } leaf exp { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 7"; } } description "Class-of-service value to use when sending probes"; } leaf fanout { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 64"; } } description "Maximum number of nexthops to search per node"; } } // container periodic-traceroute leaf lsp-ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; default "60"; description "Time interval between LSP ping messages"; } leaf lsp-ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } } // container oam container targeted-hello { description "Configure targeted hello parameters"; uses apply-advanced; leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Hello interval (seconds)"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Hold interval (seconds)"; } } // container targeted-hello container p2mp { presence "enable p2mp"; description "Advertise P2MP capability to peers"; uses apply-advanced; container recursive { description "Configure P2MP recursive parameters"; uses apply-advanced; leaf route { type empty; description "Allow recursive route resolution to signal P2MP FEC"; } } // container recursive list root-address { key "name"; description "Configure the root address of P2MP LSP"; leaf name { type jt:ipaddr; description "Root address of the P2MP LSP"; } uses apply-advanced; list lsp-id { key "name"; description "Configure the generic LSP identifier"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Generic LSP identifier value"; } uses apply-advanced; } // list lsp-id list group-address { key "name"; description "IPv4/Ipv6 group address for mLDP LSP"; leaf name { type jt:ipaddr; description "IPv4/Ipv6 group address"; } uses apply-advanced; list source-address { key "name"; description "IPv4/Ipv6 source address"; leaf name { type jt:ipaddr; description "IPv4/Ipv6 source address for mLDP LSP"; } uses apply-advanced; } // list source-address } // list group-address } // list root-address leaf no-rsvp-tunneling { type empty; description "Do not allow LDP P2MP to use RSVP-TE LSPs for tunneling"; } } // container p2mp container sr-mapping-client { presence "enable sr-mapping-client"; description "Enable LDP to SR mapping-client functionality"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "SR mapping-client policy"; } } // container sr-mapping-client leaf upstream-label-assignment { type empty; description "Allow Upstream Label Assignment capability"; } list family { key "name"; ordered-by user; description "Address family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; } // list family leaf transport-preference { type enumeration { enum "ipv4" { value 0; description "Use IPv4 for TCP connections"; } enum "ipv6" { value 1; description "Use IPv6 for TCP connections"; } } description "TCP transport preference"; } container dual-transport { presence "enable dual-transport"; description "Use separate IPv4 and IPv6 TCP transport"; uses apply-advanced; leaf inet-lsr-id { type jt:ipv4addr; description "LSR identifier for address family inet"; } leaf inet6-lsr-id { type jt:ipv4addr; description "LSR identifier for address family inet6"; } } // container dual-transport } // grouping juniper-protocols-ldp grouping juniper-protocols-mpls { description "Multiprotocol Label Switching options"; uses apply-advanced; list lsp-external-controller { key "name"; ordered-by user; description "External path computing entity"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Name of the external path computing entity"; } uses apply-advanced; container label-switched-path-template { description "Template for externally provisioned LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(!("protocols mpls label-switched-path $$ p2mp"))"; junos:must-message "Referenced template cannot be a p2mp template"; junos:must "("protocols mpls label-switched-path $$ template")"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "![*<>]"; junos:pattern-message "Template name should not contain '*' and angle brackets"; length "1 .. 32"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template container label-switched-path-p2mp-template { description "Template for externally provisioned P2MP LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "("protocols mpls label-switched-path $$ p2mp")"; junos:must-message "Referenced template should be a p2mp template"; junos:must "("protocols mpls label-switched-path $$ template")"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "![*<>]"; junos:pattern-message "Template name should not contain '*' and angle brackets"; length "1 .. 32"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-p2mp-template list pce-controlled-lsp { key "name"; ordered-by user; description "Template for externally provisioned LSP using regular expression"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Template regular expression"; } uses apply-advanced; container label-switched-path-template { description "Template for externally provisioned LSP parameters"; uses apply-advanced; leaf template-name { junos:must "(!("protocols mpls label-switched-path $$ p2mp"))"; junos:must-message "Referenced template cannot be a p2mp template"; junos:must "("protocols mpls label-switched-path $$ template")"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "![*<>]"; junos:pattern-message "Template name should not contain '*' and angle brackets"; length "1 .. 64"; } description "Name of point-to-point LSP template"; } } // container label-switched-path-template container label-switched-path-p2mp-template { description "Template for externally provisioned P2MP LSP parameters"; uses apply-advanced; leaf template-name { junos:must "("protocols mpls label-switched-path $$ p2mp")"; junos:must-message "Referenced template should be a p2mp template"; junos:must "("protocols mpls label-switched-path $$ template")"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "![*<>]"; junos:pattern-message "Template name should not contain '*' and angle brackets"; length "1 .. 64"; } description "Name of point-to-multipoint LSP template"; } } // container label-switched-path-p2mp-template } // list pce-controlled-lsp } // list lsp-external-controller container path-mtu { presence "enable path-mtu"; description "Path MTU configuration"; uses apply-advanced; leaf allow-fragmentation { type empty; description "If needed, fragment IP before encapsulating in MPLS"; } container rsvp { presence "enable rsvp"; description "RSVP-specific path MTU options"; uses apply-advanced; leaf mtu-signaling { type empty; description "Enable RSVP path MTU signaling"; } } // container rsvp } // container path-mtu container diffserv-te { description "Global diffserv-traffic-engineering options"; uses apply-advanced; leaf bandwidth-model { type enumeration { enum "extended-mam" { value 0; description "Maximum allocation model with support for E-LSPs"; } enum "mam" { value 1; description "Maximum allocation model"; } enum "rdm" { value 2; description "Russian dolls model"; } } description "Bandwidth constraint model supported"; } container te-class-matrix { description "Supported combinations of traffic-class and preemption"; uses apply-advanced; container te0 { description "Definition for traffic-engineering class te0"; uses te-class-object; } // container te0 container te1 { description "Definition for traffic-engineering class te1"; uses te-class-object; } // container te1 container te2 { description "Definition for traffic-engineering class te2"; uses te-class-object; } // container te2 container te3 { description "Definition for traffic-engineering class te3"; uses te-class-object; } // container te3 container te4 { description "Definition for traffic-engineering class te4"; uses te-class-object; } // container te4 container te5 { description "Definition for traffic-engineering class te5"; uses te-class-object; } // container te5 container te6 { description "Definition for traffic-engineering class te6"; uses te-class-object; } // container te6 container te7 { description "Definition for traffic-engineering class te7"; uses te-class-object; } // container te7 } // container te-class-matrix } // container diffserv-te container auto-policing { description "Automatic policing of LSPs"; uses apply-advanced; list class { key "name"; ordered-by user; description "Forwarding class"; leaf name { type enumeration { enum "all" { value 0; description "All forwarding classes"; } enum "ct0" { value 1; description "Forwarding class 0"; } enum "ct1" { value 2; description "Forwarding class 1"; } enum "ct2" { value 3; description "Forwarding class 2"; } enum "ct3" { value 4; description "Forwarding class 3"; } } } uses apply-advanced; choice policing-action { leaf drop { type empty; description "Drop packets if bandwidth is exceeded"; } leaf loss-priority-high { type empty; description "Set loss priority to high if bandwidth is exceeded"; } leaf loss-priority-low { type empty; description "Set loss priority to low if bandwidth is exceeded"; } } // choice policing-action } // list class } // container auto-policing container statistics { description "Collect statistics for signaled label-switched paths"; uses apply-advanced; container file { presence "enable file"; description "Statistics file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file leaf interval { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 65535"; } } description "Time to collect statistics (seconds)"; } leaf auto-bandwidth { type empty; description "Enable auto bandwidth allocation"; } leaf no-transit-statistics { type empty; description "Disable transit LSP statistics collection"; } choice transit-polling-type { leaf no-transit-statistics-polling { type empty; status deprecated; description "Disable polling and display of transit lsp statistics"; } leaf transit-statistics-polling { junos:must "(!(" .. no-transit-statistics"))"; junos:must-message "no-transit-statistics and transit-statistics-polling cannot coexist"; type empty; description "Enable polling and display of transit lsp statistics"; } } // choice transit-polling-type leaf no-bypass-statistics-polling { type empty; description "Disable polling and display of bypass lsp statistics"; } leaf statistics-query-batch-size { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 25"; } } description "Number of LSPs for which statistics will be queried together"; } } // container statistics container p2mp-lsp { description "P2MP LSP control configuration"; uses apply-advanced; leaf single-abr { type empty; description "Try to use same exit node for all inter-domain sub LSPs"; } leaf no-re-merge { type empty; description "Avoid LSP CSPF creating remerge"; } } // container p2mp-lsp container log-updown { description "Logging actions for LSP up/down events"; uses apply-advanced; choice syslog-choice { leaf syslog { type empty; description "Send syslog messages"; } leaf no-syslog { type empty; description "Don't send syslog messages"; } } // choice syslog-choice choice trap-choice { leaf trap { type empty; description "Send SNMP traps"; } container no-trap { presence "enable no-trap"; description "Don't send SNMP traps"; uses apply-advanced; leaf mpls-lsp-traps { type empty; description "Dont send mpls lsp up/down traps"; } leaf rfc3812-traps { type empty; description "Dont send rfc3812 traps"; } } // container no-trap } // choice trap-choice leaf trap-path-down { type empty; description "Send SNMP traps when a path goes down"; } leaf trap-path-up { type empty; description "Send SNMP traps when a path goes up"; } } // container log-updown container optimize-adaptive-teardown { description "Post make before break adaptive teardown"; uses apply-advanced; leaf p2p { type empty; description "Turn on post make before break adaptive teardown for p2p"; } leaf timeout { junos:must "(".. p2p")"; junos:must-message "adaptive-teardown must include 'p2p' attribute"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 65535"; } } units "seconds"; description "Timeout for adaptive teardown to clean up LSP"; } container delay { junos:must "(".. p2p")"; junos:must-message "adaptive-teardown must include 'p2p' attribute"; description "Delay tearing down old optimized path after adaptive-teardown kicks in"; uses apply-advanced; leaf delay-value { type union { type string { pattern "<.*>|$.*"; } type int32 { range "3 .. 65535"; } } units "seconds"; description "Delay tearing down old optimized path after adaptive-teardown kicks in"; } } // container delay } // container optimize-adaptive-teardown container traffic-engineering { presence "enable traffic-engineering"; description "Traffic-engineering control"; uses apply-advanced; choice protocols { leaf bgp { type empty; description "BGP destinations only"; } leaf bgp-igp { type empty; description "BGP and IGP destinations"; } leaf bgp-igp-both-ribs { type empty; description "BGP and IGP destinations with routes in both routing tables"; } leaf mpls-forwarding { type empty; description "Use MPLS routes for forwarding, not routing"; } } // choice protocols container database { description "Traffic engineering database"; uses apply-advanced; container import { description "Configure TED import parameters"; uses apply-advanced; container l3-unicast-topology { presence "enable l3-unicast-topology"; description "Download L3-Unicast topology into RIB"; uses apply-advanced; leaf bgp-link-state { type empty; description "Export L3-Unicast topology, instead of TE topology, into BGP-LS"; } } // container l3-unicast-topology leaf-list policy { type jt:policy-algebra; ordered-by user; description "Configure import policy"; } leaf identifier { type union { type string { pattern "<.*>|$.*"; } type uint64 { range "2 .. 18446744073709551615"; } } description "BGP-TE identifier"; } leaf bgp-ls-identifier { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "BGP-TE domain identifier"; } leaf ipv6 { type empty; description "Import ipv6 addresses"; } } // container import container export { description "Configure TED export related parameters"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Export policy"; } container credibility { description "TED credibility value for entries from BGP-TE"; uses apply-advanced; leaf unknown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from unknown entities"; } leaf direct { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from directly connected links"; } leaf static { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from static configuration"; } leaf ospf { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from ospf"; } leaf isis-level-1 { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from ISIS Level 1"; } leaf isis-level-2 { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from ISIS Level 2"; } leaf bgp { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 512"; } } description "Entries sourced from BGP"; } } // container credibility leaf l3-unicast-topology { type empty; description "Download RIB entries into L3-Unicast topology"; } } // container export } // container database } // container traffic-engineering list admin-groups { key "name"; ordered-by user; description "Administrative groups"; leaf name { type string; description "Group name"; } uses apply-advanced; leaf group-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 31"; } } description "Group bit position"; } } // list admin-groups leaf advertisement-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; default "5"; description "Time that an 'LSP down' advertisement will be delayed"; } leaf rsvp-error-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 240"; } } units "seconds"; default "25"; description "Time that RSVP PathErr events will be remembered"; } leaf optimize-aggressive { type empty; description "Run aggressive optimization algorithm based on IGP metric only"; } leaf smart-optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Path optimization interval after a link traversed by the path goes down"; } leaf optimize-switchover-delay { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 900"; } } units "seconds"; description "Delay before switching LSP to newly optimized path"; } leaf no-propagate-ttl { type empty; description "Disable TTL propagation from IP to MPLS (on push) and MPLS to IP (on pop)"; } leaf explicit-null { type empty; description "Advertise the EXPLICIT_NULL label when the router is the egress"; } leaf icmp-tunneling { type empty; description "Allow MPLS LSPs to be used for tunneling ICMP error packets"; } leaf revert-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Hold-down window before reverting back to primary path, 0 means disable"; } leaf optimize-hold-dead-delay { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Delay before tearing down the old optimized path"; } leaf cspf-backoff-time { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Delay before CSPF, when there is PathErr on backup path"; } leaf expand-loose-hop { type empty; description "Perform CSPF path computation to expand loose hops"; } leaf mib-mpls-show-p2mp { type empty; description "Show p2mp tunnels entries in mpls mib walk"; } container bandwidth { description "Bandwidth to reserve (bps)"; uses bandwidth-type; } // container bandwidth container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group container admin-group-extended { description "Extended administrative group policy"; uses admin_group_include_exclude; } // container admin-group-extended container priority { presence "enable priority"; description "Preemption priorities"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } container oam { description "Periodic OAM"; uses periodic_oam; } // container oam leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class-of-service value"; } leaf no-decrement-ttl { type empty; description "Do not decrement the TTL within an LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type int32 { range "2 .. 255"; } } description "Maximum allowed router hops"; } leaf no-cspf { type empty; description "Disable automatic path computation"; } leaf admin-down { type empty; description "Set GMPLS LSP to administrative down state"; } leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Periodical path reoptimizations"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } choice record-choice { leaf record { type empty; description "Record transit routers"; } leaf no-record { type empty; description "Don't record transit routers"; } } // choice record-choice leaf standby { type empty; description "Keep backup paths in continuous standby"; } leaf exclude-srlg { type empty; description "Exclude SRLG links for secondary path"; } leaf ultimate-hop-popping { type empty; description "Request ultimate hop popping from egress"; } leaf sync-active-path-bandwidth { type empty; description "Signal standby path with bandwidth obtained from active path"; } leaf cross-credibility-cspf { type empty; description "Compute paths across multi-protocol links and nodes"; } list label-switched-path { key "name"; ordered-by user; description "Label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of path"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MPLS label-switched path"; } } // choice enable-disable container traceoptions { description "Trace options for MPLS label-switched path"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "cspf" { value 0; description "Trace CSPF computation"; } enum "cspf-node" { value 1; description "Trace nodes visited during CSPF"; } enum "cspf-link" { value 2; description "Trace links visited during CSPF"; } enum "cspf-abstract" { value 3; description "Trace abstract hop based CSPF details"; } enum "state" { value 4; description "Trace state transitions"; } enum "all" { value 5; description "Trace everything"; } } } } // list flag } // container traceoptions leaf no-install-to-address { type empty; description "Don't install host route 'to' address into routing tables"; } leaf backup { type empty; description "Use LSP for IGP backup"; } leaf from { type jt:ipv4addr; description "Address of ingress router"; } container pop-and-forward { junos:must "(!(".. lsp-external-controller"))"; junos:must-message "lsp-external-controller unsupported for pop-and-forward LSP"; junos:must "(!(".. lsp-attributes"))"; junos:must-message "lsp-attributes unsupported for pop-and-forward LSP"; junos:must "(!(".. single-sided-associated-bidirectional"))"; junos:must-message "single-sided-associated-bidirectional unsupported for pop-and-forward LSP"; junos:must "(!(".. associate-lsp"))"; junos:must-message "associate-lsp unsupported for pop-and-forward LSP"; junos:must "(!(".. corouted-bidirectional-passive"))"; junos:must-message "corouted-bidirectional-passive unsupported for pop-and-forward LSP"; junos:must "(!(".. corouted-bidirectional"))"; junos:must-message "corouted-bidirectional unsupported for pop-and-forward LSP"; junos:must "(!(".. backup"))"; junos:must-message "backup unsupported for pop-and-forward LSP"; junos:must "(!(".. no-cspf"))"; junos:must-message "no-cspf unsupported for pop-and-forward LSP"; junos:must "(!((".. ultimate-hop-popping" || ".. .. ultimate-hop-popping")))"; junos:must-message "ultimate hop popping unsupported for pop-and-forward LSP"; junos:must "(!(".. p2mp"))"; junos:must-message "p2mp unsupported for pop-and-forward LSP"; junos:must "(!(".. node-link-protection"))"; junos:must-message "link/node protection unsupported for pop-and-forward LSP"; junos:must "(!(".. fast-reroute"))"; junos:must-message "fast-reroute unsupported for pop-and-forward LSP"; presence "enable pop-and-forward"; description "Enable LSP as pop-and-forward with auto-delegation"; } // container pop-and-forward choice label-switched-path-or-template { leaf to { type jt:ipv4addr; description "Address of egress router"; } leaf template { junos:must "(!(".. associate-lsp"))"; junos:must-message "Template cannot have associate-lsp"; junos:must "(!(".. corouted-bidirectional-passive"))"; junos:must-message "Template cannot be passive bidirectional"; junos:must "(!(".. corouted-bidirectional"))"; junos:must-message "Template cannot be active bidirectional"; junos:must "(!(".. lsp-external-controller"))"; junos:must-message "Can't configure external controller in template"; junos:must "(!(".. disable"))"; junos:must-message "Not applicable for template"; junos:must "(!((".. primary" || ".. secondary")))"; junos:must-message "Template cannot include 'path' statement"; type empty; description "Template for dynamic lsp paramaters"; } } // choice label-switched-path-or-template leaf corouted-bidirectional { junos:must "(!(".. p2mp"))"; junos:must-message "p2mp unsupported for bidirectional LSP"; junos:must "(!(".. auto-bandwidth"))"; junos:must-message "auto-bandwidth unsupported for bidirectional LSP"; junos:must "(!((".. link-protection" || ".. node-link-protection")))"; junos:must-message "link/node protection unsupported for bidirectional LSP"; junos:must "(!(".. fast-reroute"))"; junos:must-message "fast-reroute unsupported for bidirectional LSP"; junos:must "(!(".. corouted-bidirectional-passive"))"; junos:must-message "Passive and active bidirectional attributes cannot coexist"; type empty; description "Setup the LSP as a corouted bidirectional LSP"; } leaf corouted-bidirectional-passive { junos:must "(!(".. p2mp"))"; junos:must-message "p2mp unsupported for bidirectional LSP"; junos:must "(!(".. auto-bandwidth"))"; junos:must-message "auto-bandwidth unsupported for bidirectional LSP"; junos:must "(!((".. link-protection" || ".. node-link-protection")))"; junos:must-message "link/node protection unsupported for bidirectional LSP"; junos:must "(!(".. fast-reroute"))"; junos:must-message "fast-reroute unsupported for bidirectional LSP"; junos:must "(!((".. standby" || ".. .. standby")))"; junos:must-message "standby unsupported for passive bidirectional LSP"; junos:must "(!(".. soft-preemption"))"; junos:must-message "soft-preemption unsupported for passive bidirectional LSP"; junos:must "(!((".. oam bfd-liveness-detection" || ".. .. oam bfd-liveness-detection")))"; junos:must-message "oam bfd-liveness-detection unsupported for passive bidirectional LSP"; junos:must "(!((".. no-decrement-ttl" || ".. .. no-decrement-ttl")))"; junos:must-message "no-decrement-ttl unsupported for passive bidirectional LSP"; junos:must "(!((".. exclude-srlg" || ".. .. exclude-srlg")))"; junos:must-message "exclude-srlg unsupported for passive bidirectional LSP"; junos:must "(!((".. bandwidth" || ".. .. bandwidth")))"; junos:must-message "bandwidth unsupported for passive bidirectional LSP"; junos:must "(!((".. admin-group-extended" || ".. .. admin-group-extended")))"; junos:must-message "admin-group-extended unsupported for passive bidirectional LSP"; junos:must "(!((".. admin-group" || ".. .. admin-group")))"; junos:must-message "admin-group unsupported for passive bidirectional LSP"; junos:must "(!(".. adaptive"))"; junos:must-message "adaptive unsupported for passive bidirectional LSP"; junos:must "(!(".. lsp-attributes"))"; junos:must-message "Passive bidirectional LSP cannot include 'lsp-attributes' statement"; junos:must "(!((".. primary" || ".. secondary")))"; junos:must-message "Passive bidirectional LSP cannot include 'path' statement"; type empty; description "Associate LSP with incoming corouted bidirectional LSP"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric value"; } leaf ldp-tunneling { type empty; description "Allow LDP to use this LSP for tunneling"; } leaf soft-preemption { junos:must "(!(".. fast-reroute"))"; junos:must-message "soft-preemption is unsupported when fast-reroute is desired"; type empty; description "Attempt make-before-break service while preempting this LSP"; } list install { key "name"; ordered-by user; description "Install prefix"; leaf name { type jt:ipprefix; description "Destination prefix"; } leaf active { type empty; description "Install prefix into forwarding table"; } } // list install leaf retry-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time before retrying the primary path"; } leaf retry-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } description "Maximum number of times to retry primary path"; } container lsp-attributes { description "Attributes for generalized LSP"; uses apply-advanced; leaf signal-bandwidth { junos:must "(!((".. switching-type l2sc" || (".. switching-type psc-1" || ".. switching-type ethernet-vlan"))))"; junos:must-message "signal-bandwidth invalid for VLAN LSP and Packet LSP"; type enumeration { enum "ds1" { value 0; description "1.544 Mbps"; } enum "vt1-5" { value 1; description "1.728 Mbps"; } enum "e1" { value 2; description "2.048 Mbps"; } enum "vt2" { value 3; description "2.304 Mbps"; } enum "ethernet" { value 4; description "10 Mbps"; } enum "e3" { value 5; description "34.368 Mbps"; } enum "ds3" { value 6; description "44.736 Mbps"; } enum "sts-1" { value 7; description "51.84 Mbps"; } enum "fastether" { value 8; description "100.00 Mbps"; } enum "stm-1" { value 9; description "155.52 Mbps"; } enum "stm-4" { value 10; description "622.08 Mbps"; } enum "gigether" { value 11; description "1000.00 Mbps"; } enum "stm-16" { value 12; description "2488.32 Mbps"; } enum "stm-64" { value 13; description "9953.28 Mbps"; } enum "10gigether" { value 14; description "10000.00 Mbps"; } enum "stm-256" { value 15; description "39813.12 Mbps"; } enum "100gige" { value 16; description "100000.00 Mbps"; } } description "Signal bandwidth for the LSP"; } leaf switching-type { type enumeration { enum "psc-1" { value 0; description "Packet switching"; } enum "lambda" { value 1; description "Lambda switching"; } enum "fiber" { value 2; description "Fiber switching"; } enum "tdm" { value 3; description "TDM switching"; } enum "ethernet-vlan" { junos:must "((!(".. encoding-type") || ".. encoding-type ethernet"))"; junos:must-message "Only ethernet encoding supported for VLAN LSP"; value 4; description "Ethernet VLAN switching"; } } description "LSP switching type desired"; } leaf encoding-type { type enumeration { enum "packet" { value 0; description "Packet encoding"; } enum "ethernet" { value 1; description "Ethernet encoding"; } enum "pdh" { value 2; description "PDH encoding"; } enum "sonet-sdh" { value 3; description "SONET-SDH encoding"; } } description "LSP encoding type desired"; } leaf gpid { type enumeration { enum "ipv4" { value 0; } enum "ethernet" { value 1; } enum "ppp" { value 2; } enum "hdlc" { value 3; } enum "pos-no-scrambling-crc-16" { value 4; } enum "pos-no-scrambling-crc-32" { value 5; } enum "pos-scrambling-crc-16" { value 6; } enum "pos-scrambling-crc-32" { value 7; } } description "Generalized PID"; } container upstream-label { description "Upstream Label for the bidirectional label-switched path"; uses apply-advanced; leaf vlan-id { junos:must "(".. .. switching-type ethernet-vlan")"; junos:must-message "VLAN label is valid only for VLAN LSP"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "VLAN ID label for the label-switched path"; } } // container upstream-label } // container lsp-attributes leaf revert-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Hold-down window before reverting back to primary path, 0 means disable"; } leaf optimize-hold-dead-delay { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Delay before tearing down the old optimized path"; } leaf cspf-backoff-time { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Delay before CSPF, when there is PathErr on backup path"; } container bandwidth { description "Bandwidth to reserve (bps)"; uses bandwidth-type; } // container bandwidth container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group container admin-group-extended { description "Extended administrative group policy"; uses admin_group_include_exclude; } // container admin-group-extended container priority { presence "enable priority"; description "Preemption priorities"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } container oam { description "Periodic OAM"; uses periodic_oam; } // container oam leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class-of-service value"; } leaf no-decrement-ttl { type empty; description "Do not decrement the TTL within an LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type int32 { range "2 .. 255"; } } description "Maximum allowed router hops"; } leaf no-cspf { type empty; description "Disable automatic path computation"; } leaf admin-down { type empty; description "Set GMPLS LSP to administrative down state"; } leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Periodical path reoptimizations"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } choice record-choice { leaf record { type empty; description "Record transit routers"; } leaf no-record { type empty; description "Don't record transit routers"; } } // choice record-choice leaf standby { type empty; description "Keep backup paths in continuous standby"; } leaf exclude-srlg { type empty; description "Exclude SRLG links for secondary path"; } leaf ultimate-hop-popping { type empty; description "Request ultimate hop popping from egress"; } leaf sync-active-path-bandwidth { type empty; description "Signal standby path with bandwidth obtained from active path"; } leaf cross-credibility-cspf { type empty; description "Compute paths across multi-protocol links and nodes"; } leaf entropy-label { type empty; description "Enable entropy label"; } leaf self-ping-duration { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 65535"; } } units "seconds"; description "Duration over which to run self-ping (65535 = until success). Default = 1800s"; } leaf no-self-ping { type empty; description "Do not run self-ping for this LSP"; } choice cspf-attribute { leaf random { type empty; description "Randomly select among equal-cost paths"; } leaf least-fill { type empty; description "Select the least filled among equal-cost paths"; } leaf most-fill { type empty; description "Select the most filled among equal-cost paths"; } } // choice cspf-attribute leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } choice lp-type { leaf link-protection { type empty; description "Protect LSP from link faults only"; } leaf node-link-protection { type empty; description "Protect LSP from both link and node faults"; } } // choice lp-type leaf intra-domain { type empty; status deprecated; description "Intra-domain LSP"; } leaf inter-domain { type empty; description "Inter-domain LSP"; } leaf adaptive { type empty; description "Have the LSP smoothly cut over to new routes"; } container in-place-lsp-bandwidth-update { junos:must "(!(".. fast-reroute"))"; junos:must-message "In-place update unsupported for LSPs requesting detour protection"; junos:must "(!((".. lsp-external-controller" || ".. .. lsp-external-controller")))"; junos:must-message "In-place update unsupported for externally controlled LSPs"; junos:must "(!(".. single-sided-associated-bidirectional"))"; junos:must-message "In-place update unsupported for single-sided-associated-bidirectional LSPs"; junos:must "(!(".. corouted-bidirectional-passive"))"; junos:must-message "In-place update unsupported for corouted-bidirectional-passive LSPs"; junos:must "(!(".. corouted-bidirectional"))"; junos:must-message "In-place update unsupported for corouted-bidirectional LSPs"; junos:must "(!((".. no-cspf" || ".. .. no-cspf")))"; junos:must-message "In-place update unsupported for no-cspf LSPs"; junos:must "(!(".. p2mp"))"; junos:must-message "In-place update unsupported for p2mp sub-LSPs"; presence "enable in-place-lsp-bandwidth-update"; description "Update LSP in-place re-using the same LSP identifier"; } // container in-place-lsp-bandwidth-update container fast-reroute { presence "enable fast-reroute"; description "Fast reroute"; uses apply-advanced; leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 255"; } } description "Maximum allowed router hops"; } choice bw-attribute { leaf bandwidth { type string; description "Bandwidth to reserve (bps)"; } leaf bandwidth-percent { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 100"; } } description "Percentage of main path bandwidth to reserve"; } } // choice bw-attribute choice include_any_or_no_include_any { leaf no-include-any { type empty; description "Disable include-any checking"; } leaf-list include-any { type string; ordered-by user; description "Groups, one or more of which must be present"; } } // choice include_any_or_no_include_any choice include_all_or_no_include_all { leaf no-include-all { type empty; description "Disable include-all checking"; } leaf-list include-all { type string; ordered-by user; description "Groups, all of which must be present"; } } // choice include_all_or_no_include_all choice exclude_or_no_exclude { leaf no-exclude { type empty; description "Disable exclude checking"; } leaf-list exclude { type string; ordered-by user; description "Groups, all of which must be absent"; } } // choice exclude_or_no_exclude } // container fast-reroute container p2mp { junos:must "(!(".. associate-backup-pe-groups"))"; junos:must-message "backup-pe-group cannot be associated with P2MP LSP"; junos:must "(!(".. egress-protection"))"; junos:must-message "egress-protection unsupported for P2MP LSP branch"; junos:must "(!(any ".. primary <*> adaptive"))"; junos:must-message "adaptive unsupported for P2MP LSP branch path"; junos:must "(!(".. adaptive"))"; junos:must-message "adaptive unsupported for P2MP LSP branch"; junos:must "(!(".. install"))"; junos:must-message "install prefixes invalid for P2MP LSP branch"; junos:must "(!(".. ldp-tunneling"))"; junos:must-message "ldp-tunneling unsupported for P2MP LSP branch"; junos:must "(!(".. backup"))"; junos:must-message "backup invalid for P2MP LSP branch"; junos:must "(!(".. no-install-to-address"))"; junos:must-message "no-install-to-address invalid for P2MP LSP branch"; junos:must "(!(".. node-link-protection"))"; junos:must-message "node protection unsupported for P2MP LSP branch"; junos:must "(!(".. fast-reroute"))"; junos:must-message "fast-reroute unsupported for P2MP LSP branch"; junos:must "(!(".. secondary"))"; junos:must-message "secondary paths unsupported for P2MP LSP branch"; junos:must "(!(".. ultimate-hop-popping"))"; junos:must-message "For point-to-multipoint LSP, ultimate hop popping cannot be configured"; junos:must "(!(".. lsp-external-controller"))"; junos:must-message "Can't configure lsp-external-controller knob in p2mp LSPs"; junos:must "((!(".. .. .. .. .. logical-systems") || !(".. .. ipv6-tunneling")))"; junos:must-message "In logical systems, IPv6 tunneling cannot be configured with P2MP LSPs"; junos:must "((any ".. p2mp <*>" || ".. template"))"; junos:must-message "For S2L point-to-multipoint LSP, parent point-to-multipoint LSP name must be configured"; presence "enable p2mp"; description "Point-to-multipoint label-switched path"; leaf path_name { junos:must "(!(".. .. .. label-switched-path $$"))"; junos:must-message "The P2MP name is the same as an existing LSP name"; junos:must "(!(".. .. template"))"; junos:must-message "Name not applicable for point-to-multipoint template"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Name of point-to-multipoint LSP"; } } // container p2mp container auto-bandwidth { junos:must "(!(".. p2mp"))"; junos:must-message "Cannot do auto-bandwidth for P2MP LSP branch"; junos:must "((!(".. lsp-attributes") || (".. lsp-attributes switching-type psc-1" && (!(".. lsp-attributes encoding-type") || ".. lsp-attributes encoding-type packet"))))"; junos:must-message "Cannot do auto-bandwidth for non-packet LSP"; presence "enable auto-bandwidth"; description "Do auto bandwidth allocation for this LSP"; uses apply-advanced; leaf adjust-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "300 .. 315360000"; } } units "seconds"; default "86400"; description "Time to adjust LSP bandwidth"; } leaf adjust-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 50"; } } units "percent"; default "0"; description "Percentage change in average LSP utilization to trigger auto-adjustment"; } leaf adjust-threshold-absolute { type string; units "bps"; default "0"; description "Change in average LSP utilization to trigger auto-adjustment"; } leaf adjust-threshold-activate-bandwidth { type string; units "bps"; description "Adjusts signaled bw if greater than this value"; } leaf minimum-bandwidth { type string; units "bps"; description "Minimum LSP bandwidth"; } leaf maximum-bandwidth { type string; units "bps"; description "Maximum LSP bandwidth"; } leaf minimum-bandwidth-adjust-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "300 .. 31536000"; } } units "seconds"; description "Duration for which minimum bandwidth will be frozen"; } leaf minimum-bandwidth-adjust-threshold-change { junos:must "(".. minimum-bandwidth-adjust-interval")"; junos:must-message "minimum-bandwidth-adjust-interval must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; description "Change in max average bandwidth to freeze min bandwidth"; } leaf minimum-bandwidth-adjust-threshold-value { junos:must "(!(".. minimum-bandwidth-adjust-threshold-change"))"; junos:must-message "minimum-bandwidth-adjust-threshold-change cannot be configured with minimum-bandwidth-adjust-threshold-value"; junos:must "(".. minimum-bandwidth-adjust-interval")"; junos:must-message "minimum-bandwidth-adjust-interval must be configured"; type string; units "bps"; status deprecated; description "Freeze min bandwidth if max average bandwidth falls below this bw"; } leaf monitor-bandwidth { type empty; description "Monitor LSP bandwidth without adjustments"; } leaf adjust-threshold-overflow-limit { junos:must "(((".. adjust-threshold" && ".. maximum-bandwidth") && (!(".. adjust-threshold $$={0}") && !(".. maximum-bandwidth $$={0}"))))"; junos:must-message "Non-zero adjust-threshold and maximum-bandwidth MUST be configured"; junos:must "(!(".. monitor-bandwidth"))"; junos:must-message "adjust-threshold-overflow-limit cannot be used with monitor-bandwidth"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Number of consecutive overflow samples to trigger auto-adjustment"; } leaf adjust-threshold-underflow-limit { junos:must "((".. adjust-threshold" && !(".. adjust-threshold 0")))"; junos:must-message "Non-zero adjust-threshold must be configured"; junos:must "(!(".. monitor-bandwidth"))"; junos:must-message "adjust-threshold-underflow-limit cannot be used with monitor-bandwidth"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Number of consecutive underflow samples to trigger auto-adjustment"; } leaf resignal-minimum-bandwidth { type empty; description "Resignal the LSP using minimum-bandwidth"; } leaf sync-active-path-bandwidth { type empty; description "Signal standby path with bandwidth obtained from active path"; } } // container auto-bandwidth container optimize-on-change { description "Specify additional re-optimization triggers for this LSP"; uses apply-advanced; leaf link-congestion { type empty; description "Optimize when a link becomes congested"; } } // container optimize-on-change container deselect-on-bandwidth-failure { presence "enable deselect-on-bandwidth-failure"; description "Deselect active path if it cannot meet the bandwidth constraint"; uses apply-advanced; leaf tear-lsp { type empty; description "Bring down active path when all paths fail to reserve required bandwidth"; } } // container deselect-on-bandwidth-failure container track-igp-metric { description "Track IGP metric for LSP install prefixes"; uses apply-advanced; leaf install-v4-prefixes { type empty; description "Track IGP metric for IPV4 prefixes"; } leaf install-v6-prefixes { type empty; description "Track IGP metric for IPV6 prefixes"; } } // container track-igp-metric container associate-lsp { junos:must "((".. oam mpls-tp-mode" || ".. .. oam mpls-tp-mode"))"; junos:must-message "mpls-tp-mode must be configured for associate-lsp"; description "Associate the LSP for OAM"; uses apply-advanced; leaf lsp-name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of assocation LSP"; } leaf from { type jt:ipv4addr; description "Address of ingress router of associated LSP"; } } // container associate-lsp list primary { key "name"; ordered-by user; description "Preferred path"; leaf name { type string { length "1 .. 64"; } description "Name of path"; } uses apply-advanced; container bandwidth { description "Bandwidth to reserve (bps)"; uses bandwidth-type; } // container bandwidth container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group container admin-group-extended { description "Extended administrative group policy"; uses admin_group_include_exclude; } // container admin-group-extended container priority { presence "enable priority"; description "Preemption priorities"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } container oam { description "Periodic OAM"; uses periodic_oam; } // container oam leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class-of-service value"; } leaf no-decrement-ttl { type empty; description "Do not decrement the TTL within an LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type int32 { range "2 .. 255"; } } description "Maximum allowed router hops"; } leaf no-cspf { type empty; description "Disable automatic path computation"; } leaf admin-down { type empty; description "Set GMPLS LSP to administrative down state"; } leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Periodical path reoptimizations"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } choice record-choice { leaf record { type empty; description "Record transit routers"; } leaf no-record { type empty; description "Don't record transit routers"; } } // choice record-choice leaf standby { type empty; description "Keep backup paths in continuous standby"; } leaf exclude-srlg { type empty; description "Exclude SRLG links for secondary path"; } leaf ultimate-hop-popping { type empty; description "Request ultimate hop popping from egress"; } leaf sync-active-path-bandwidth { type empty; description "Signal standby path with bandwidth obtained from active path"; } leaf cross-credibility-cspf { type empty; description "Compute paths across multi-protocol links and nodes"; } leaf adaptive { type empty; description "Have the LSP smoothly cut over to new routes"; } leaf select { type enumeration { enum "manual" { value 0; description "Manual override as preferred active path, if up and stable"; } enum "unconditional" { value 1; description "Unconditional override as preferred active path, regardless of up/down status"; } } } container upstream-label { description "Upstream Label for the bidirectional label-switched path"; uses apply-advanced; leaf vlan-id { junos:must "(".. .. .. lsp-attributes switching-type ethernet-vlan")"; junos:must-message "VLAN label is valid only for VLAN LSP"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "VLAN ID label for the label-switched path"; } } // container upstream-label container optimize-on-change { junos:must "(!("protocols mpls label-switched-path $$ optimize-on-change"))"; junos:must-message "LSP already has optimize-on-change"; description "Specify additional re-optimization triggers for this path"; uses apply-advanced; leaf link-congestion { type empty; description "Optimize when a link becomes congested"; } } // container optimize-on-change } // list primary list secondary { key "name"; ordered-by user; description "Backup path"; leaf name { type string { length "1 .. 64"; } description "Name of path"; } uses apply-advanced; container bandwidth { description "Bandwidth to reserve (bps)"; uses bandwidth-type; } // container bandwidth container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group container admin-group-extended { description "Extended administrative group policy"; uses admin_group_include_exclude; } // container admin-group-extended container priority { presence "enable priority"; description "Preemption priorities"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } container oam { description "Periodic OAM"; uses periodic_oam; } // container oam leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class-of-service value"; } leaf no-decrement-ttl { type empty; description "Do not decrement the TTL within an LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type int32 { range "2 .. 255"; } } description "Maximum allowed router hops"; } leaf no-cspf { type empty; description "Disable automatic path computation"; } leaf admin-down { type empty; description "Set GMPLS LSP to administrative down state"; } leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Periodical path reoptimizations"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } choice record-choice { leaf record { type empty; description "Record transit routers"; } leaf no-record { type empty; description "Don't record transit routers"; } } // choice record-choice leaf standby { type empty; description "Keep backup paths in continuous standby"; } leaf exclude-srlg { type empty; description "Exclude SRLG links for secondary path"; } leaf ultimate-hop-popping { type empty; description "Request ultimate hop popping from egress"; } leaf sync-active-path-bandwidth { type empty; description "Signal standby path with bandwidth obtained from active path"; } leaf cross-credibility-cspf { type empty; description "Compute paths across multi-protocol links and nodes"; } leaf adaptive { type empty; description "Have the LSP smoothly cut over to new routes"; } leaf select { type enumeration { enum "manual" { value 0; description "Manual override as preferred active path, if up and stable"; } enum "unconditional" { value 1; description "Unconditional override as preferred active path, regardless of up/down status"; } } } container upstream-label { description "Upstream Label for the bidirectional label-switched path"; uses apply-advanced; leaf vlan-id { junos:must "(".. .. .. lsp-attributes switching-type ethernet-vlan")"; junos:must-message "VLAN label is valid only for VLAN LSP"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "VLAN ID label for the label-switched path"; } } // container upstream-label container optimize-on-change { junos:must "(!("protocols mpls label-switched-path $$ optimize-on-change"))"; junos:must-message "LSP already has optimize-on-change"; description "Specify additional re-optimization triggers for this path"; uses apply-advanced; leaf link-congestion { type empty; description "Optimize when a link becomes congested"; } } // container optimize-on-change container non-active-hold-priority { description "Non-active hold priority"; leaf non-active-hold-prio-value { junos:must "(!((".. .. no-cspf" || (".. .. .. no-cspf" || ".. .. .. .. no-cspf"))))"; junos:must-message "Non-active hold priority unsupported for no-cspf LSPs"; junos:must "((".. .. standby" || (".. .. .. standby" || ".. .. .. .. standby")))"; junos:must-message "Non-active hold priority supported only for standby path"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Non-active hold priority value"; } } // container non-active-hold-priority } // list secondary container policing { description "Traffic policing for this LSP"; leaf filter { junos:must "(!("firewall family any filter $$ interface-specific"))"; junos:must-message "LSP policing filter must not be interface-specific"; junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))"; junos:must-message "referenced filter must be defined under firewall family any"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of filter to use for policing LSP traffic"; } leaf no-auto-policing { type empty; description "Turn off automatic policing for this LSP"; } } // container policing leaf lsp-external-controller { junos:must "(!(".. single-sided-associated-bidirectional"))"; junos:must-message "Single-sided associated bidir LSP cannot be externally controlled"; junos:must "(!(".. corouted-bidirectional"))"; junos:must-message "Externally controlled LSP cannot be corouted bidirectional"; junos:must "(!(".. corouted-bidirectional-passive"))"; junos:must-message "Externally controlled LSP cannot be corouted bidirectional"; junos:must "("protocols mpls lsp-external-controller $$")"; junos:must-message "Referenced lsp-external-controller is not defined"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Name of the external path computing entity"; } leaf associate-backup-pe-groups { junos:must "(".. oam bfd-liveness-detection")"; junos:must-message "bfd-liveness-detection must be configured for this feature."; type empty; description "Associate this LSP with backup-pe groups"; } leaf egress-protection { junos:must "(!(".. install"))"; junos:must-message "Cannot install routes for an egress protection LSP"; type empty; description "Use this LSP for egress protection data transport"; } leaf transport-class { junos:must "("routing-options transport-class name $$")"; junos:must-message "Referenced transport class is not defined"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Transport class this LSP belongs to"; } } // list label-switched-path container deselect-on-bandwidth-failure { presence "enable deselect-on-bandwidth-failure"; description "Deselect active path if it cannot meet the bandwidth constraint"; uses apply-advanced; leaf tear-lsp { type empty; description "Bring down active path when all paths fail to reserve required bandwidth"; } } // container deselect-on-bandwidth-failure container track-igp-metric { description "Track IGP metric for LSP install prefixes"; uses apply-advanced; leaf install-v4-prefixes { type empty; description "Track IGP metric for IPV4 prefixes"; } leaf install-v6-prefixes { type empty; description "Track IGP metric for IPV6 prefixes"; } } // container track-igp-metric list container-label-switched-path { key "name"; ordered-by user; leaf name { junos:must "(!(".. .. label-switched-path $$"))"; junos:must-message "The Container LSP name is the same as an existing LSP name"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of container-lsp"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MPLS container-label-switched path"; } } // choice enable-disable leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } container label-switched-path-template { description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(!("protocols mpls label-switched-path $$ egress-protection"))"; junos:must-message "Referenced point-to-point LSP template cannot have egress-protection"; junos:must "(!("protocols mpls label-switched-path $$ p2mp"))"; junos:must-message "Referenced point-to-point LSP template cannot be p2mp sub LSP"; junos:must "(!("protocols mpls label-switched-path $$ bandwidth"))"; junos:must-message "Referenced point-to-point LSP template cannot have static bandwidth"; junos:must "(!("protocols mpls label-swithced-path $$ policing"))"; junos:must-message "Referenced point-to-point LSP template cannot have policing"; junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ no-cspf"))))"; junos:must-message "Referenced point-to-point LSP template cannot have no-cspf"; junos:must "(("protocols mpls label-switched-path $$" && "protocols mpls label-switched-path $$ template"))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "![*<>]"; junos:pattern-message "Template name should not contain '*' and angle brackets"; length "1 .. 64"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template leaf to { type jt:ipv4addr; description "Address of egress router"; } leaf suffix { type string { length "1 .. 64"; } description "Suffix to generate names of members of container LSP"; } container splitting-merging { description "Do splitting and merging"; uses apply-advanced; leaf maximum-member-lsps { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 64"; } } description "Maximum number of LSPs"; } leaf minimum-member-lsps { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 64"; } } description "Minimum number of LSPs"; } leaf splitting-bandwidth { type string; units "bps"; description "Maximum bandwidth threshold for splitting"; } leaf merging-bandwidth { type string; units "bps"; description "Minimum bandwidth threshold for merging"; } leaf maximum-signaling-bandwidth { type string; units "bps"; description "Maximum bandwidth for signaling during normalization"; } leaf minimum-signaling-bandwidth { type string; units "bps"; description "Minimum bandwidth for signaling during normalization"; } leaf splitting-merging-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "10"; description "Change in aggregate LSP utilization to trigger splitting or merging"; } container normalization { description "Do normalization"; uses apply-advanced; leaf normalize-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "300 .. 315360000"; } } units "seconds"; default "86400"; description "Time to normalize container LSP"; } leaf failover-normalization { type empty; description "Do pre-mature normalization in case some LSPs go down before next normalization"; } leaf no-incremental-normalize { type empty; description "Do not normalize unless all LSPs are successfully signaled"; } leaf normalization-retry-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 86400"; } } units "seconds"; description "Time before retrying the container LSP normalization"; } leaf normalization-retry-limits { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } description "Maximum number of times to retry container LSP normalization"; } } // container normalization container sampling { description "Sampling information"; uses apply-advanced; leaf cut-off-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } default "0"; description "Cut-off percentile to remove outliers from aggregate samples"; } choice sampling-mode { leaf use-average-aggregate { type empty; description "Use average of the samples"; } leaf use-percentile { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } default "100"; description "Use a percentile of the samples"; } } // choice sampling-mode } // container sampling } // container splitting-merging leaf lsp-external-controller { junos:must "("protocols mpls lsp-external-controller $$")"; junos:must-message "Referenced lsp-external-controller is not defined"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Name of the external path computing entity"; } } // list container-label-switched-path list transit-lsp-association { key "name"; ordered-by user; description "Transit label switch path assoication"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of transit assocation LSP group"; } uses apply-advanced; leaf lsp-name-1 { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of assocation LSP 1"; } leaf from-1 { type jt:ipv4addr; description "Address of associated LSP 1"; } leaf lsp-name-2 { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of assocation LSP 2"; } leaf from-2 { type jt:ipv4addr; description "Address of associated LSP 2"; } } // list transit-lsp-association list path { key "name"; ordered-by user; description "Route of a label-switched path"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Name of label-switched path"; } uses apply-advanced; list path-list { key "name"; ordered-by user; description "List of routers in the label-switched path"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of less than 64 characters"; } description "Address of next system in path"; } leaf abstract { junos:must "(".. .. .. abstract-hop ${path-list}")"; junos:must-message "Referenced abstart hop must be configured"; type empty; description "Next system in path is abstract"; } choice loose_strict_none { leaf loose { type empty; description "Next hop might not be adjacent"; } leaf loose-link { type empty; description "Next hop link might not be adjacent"; } leaf strict { type empty; description "Next hop must be adjacent"; } } // choice loose_strict_none } // list path-list } // list path list constituent-list { key "name"; ordered-by user; description "MPLS constituent list for abstract hops"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Constituent list name"; } uses apply-advanced; leaf-list srlg { type string; max-elements 16; ordered-by user; description "SRLG Name"; } leaf-list admin-group { type string; max-elements 16; ordered-by user; description "Administrative groups"; } leaf-list admin-group-extended { type string; max-elements 16; ordered-by user; description "Extended administrative groups"; } } // list constituent-list list abstract-hop { key "name"; ordered-by user; description "MPLS abstract hop"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Abstract hop name"; } uses apply-advanced; leaf operator { type enumeration { enum "AND" { value 0; description "AND"; } enum "OR" { value 1; description "OR"; } } description "Operation among constituent lists"; } list constituent-list { key "name"; ordered-by user; description "Building abstract hop using constituent lists"; leaf name { junos:must "("protocols mpls constituent-list $$")"; junos:must-message "Referenced constituent list does not exist"; type string { length "1 .. 64"; } description "Constituent list name"; } uses apply-advanced; choice list-type { leaf include-any-list { type empty; description "Include any"; } leaf include-all-list { type empty; description "Include all"; } leaf exclude-any-list { type empty; description "Exclude any"; } leaf exclude-all-list { type empty; description "Exclude all"; } } // choice list-type } // list constituent-list } // list abstract-hop container egress-protection { description "Egress router protection"; uses apply-advanced; list context-identifier { key "name"; description "Context identifier"; leaf name { type jt:ipv4addr; description "IP address"; } uses apply-advanced; choice context-type { leaf primary { type empty; description "Primary"; } leaf protector { type empty; description "Protector"; } } // choice context-type leaf metric { junos:must "(!(" .. advertise-mode stub-alias"))"; junos:must-message "Metric configuration is not supported with stub-alias mode"; junos:must "(".. protector")"; junos:must-message "Configurable only for protector context identifiers"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 16777215"; } } description "IGP metric"; } leaf advertise-mode { type enumeration { enum "stub-proxy" { value 0; description "Proxy"; } enum "stub-alias" { value 1; description "Alias"; } } description "Advertise mode"; } leaf-list admin-group { junos:must "((".. protector" && ".. advertise-mode stub-proxy"))"; junos:must-message "Configurable only for protector with proxy mode"; type string; ordered-by user; description "Administrative groups"; } } // list context-identifier container traceoptions { description "Trace options for egress-protection"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "state" { value 0; description "Trace state transitions"; } enum "route" { value 1; description "Trace route transitions"; } enum "error" { value 2; description "Trace error conditions"; } enum "all" { value 3; description "Trace everything"; } } } } // list flag } // container traceoptions } // container egress-protection container label-range { description "MPLS labels ranges"; uses apply-advanced; list lsi-label-range { key "name"; ordered-by user; description "LSI-label-range"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_start"; } leaf range-end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_end"; } } // list lsi-label-range list dynamic-label-range { key "name"; ordered-by user; description "Dynamic-label-range"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_start"; } leaf range-end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_end"; } } // list dynamic-label-range list block-label-range { key "name"; ordered-by user; description "Block-label-range"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_start"; } leaf range-end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_end"; } } // list block-label-range list srgb-label-range { key "name"; max-elements 1; ordered-by user; description "SRGB-label-range"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_start"; } leaf range-end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_end"; } } // list srgb-label-range leaf label-limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Limit for the number of concurrent active labels"; } list static-label-range { key "name"; ordered-by user; description "Static-label-range"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_start"; } leaf range-end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Label_range_end"; } } // list static-label-range } // container label-range choice enable-disable { leaf disable { type empty; description "Disable MPLS"; } } // choice enable-disable container label-history { presence "enable label-history"; description "MPLS label history recording"; uses apply-advanced; leaf max-entries { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Limit for the number of history entry per label"; } } // container label-history container traceoptions { description "Trace options for MPLS"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "connection" { value 0; description "Trace CCC activity"; } enum "connection-detail" { value 1; description "Trace CCC activity in detail"; } enum "cspf" { value 2; description "Trace CSPF computation"; } enum "cspf-node" { value 3; description "Trace nodes visited during CSPF"; } enum "cspf-link" { value 4; description "Trace links visited during CSPF"; } enum "cspf-abstract" { value 5; description "Trace abstract hop based CSPF details"; } enum "state" { value 6; description "Trace state transitions"; } enum "error" { value 7; description "Trace error conditions"; } enum "lsping" { value 8; description "Trace LSP ping packets received"; } enum "graceful-restart" { value 9; description "Trace graceful-restart-related events"; } enum "nsr-synchronization" { value 10; description "Trace NSR synchronization events"; } enum "nsr-synchronization-detail" { value 11; description "Trace NSR synchronization events in detail"; } enum "static" { value 12; description "Trace static label-switched path"; } enum "egress-protection" { value 13; description "Trace egress protection events"; } enum "all" { value 14; description "Trace everything"; } enum "autobw-state" { value 15; description "Trace autobandwidth events in mpls trace"; } enum "externally-controlled-lsp" { value 16; description "Trace externally controlled LSP events in mpls trace"; } enum "ted-import" { value 17; description "Trace leaking TED entries into lsdist.0 table"; } enum "ted-export" { value 18; description "Trace leaking of entries from lsdist.0 table into TED"; } enum "lsp-history" { value 19; description "Trace LSP history events"; } enum "abstract-hop" { value 20; description "Trace abstract hop related events"; } } } } // list flag } // container traceoptions leaf ipv6-tunneling { type empty; description "Allow MPLS LSPs to be used for tunneling IPv6 traffic"; } list interface { key "name"; ordered-by user; description "MPLS interface options"; uses juniper-protocols-mpls-interface; } // list interface list static-label-switched-path { key "name"; ordered-by user; description "Static label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of path"; } uses apply-advanced; choice lsp-type { container bypass { description "Bypass ingress label-switched path"; uses apply-advanced; leaf bandwidth { type string; units "bps"; description "Bandwidth to reserve"; } leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } leaf next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } description "IPv4 or IPv6 address or interface of next-hop router"; } leaf next-table { type string; description "Next-table for lookup"; } leaf push { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label to push"; } leaf to { type jt:ipaddr; description "Address of egress router"; } } // container bypass list transit { key "name"; ordered-by user; description "Transit label-switched path"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Incoming label value"; } uses apply-advanced; leaf bandwidth { type string; units "bps"; description "Bandwidth to reserve"; } leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } container link-protection { description "Bypass link protection"; leaf bypass-name { type string { length "1 .. 64"; } description "Bypass label-switched path name"; } } // container link-protection leaf next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } description "IPv4 or IPv6 address or interface of next-hop router"; } leaf member-interface { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "AE member interface name"; } container node-protection { description "Bypass node protection"; leaf bypass-name { type string { length "1 .. 64"; } description "Bypass label-switched path name"; } leaf next-next-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label expected by next-next-hop"; } } // container node-protection choice label-action { leaf swap { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Swap top label with this label"; } leaf pop { type empty; description "Pop the top label"; } leaf stitch { junos:must "(!((".. link-protection" || ".. node-protection")))"; junos:must-message "Link-protection and node-protection are invalid for LSP stitching"; type empty; description "Swap top label with the resolved LSP"; } } // choice label-action } // list transit container ingress { description "Ingress LSR configuration for a static LSP"; uses apply-advanced; leaf bandwidth { type string; units "bps"; description "Bandwidth to reserve"; } leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class-of-service value"; } leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } list install { key "name"; ordered-by user; description "Install prefix"; leaf name { type jt:ipv4prefix; description "Destination prefix"; } leaf active { type empty; description "Install prefix into forwarding table"; } } // list install leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric value"; } leaf next-hop { type union { type jt:ipv4addr-or-interface; type string { pattern "<.*>|$.*"; } } description "IPv4 address or interface of next-hop router"; } container link-protection { description "Bypass link protection"; leaf bypass-name { type string { length "1 .. 64"; } description "Bypass label-switched path name"; } } // container link-protection container node-protection { description "Bypass node protection"; leaf bypass-name { type string { length "1 .. 64"; } description "Bypass label-switched path name"; } leaf next-next-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label expected by next-next-hop"; } } // container node-protection leaf no-install-to-address { type empty; description "Don't install host route 'to' address into routing tables"; } container policing { description "Traffic policing for this LSP"; leaf filter { junos:must "(!("firewall family any filter $$ interface-specific"))"; junos:must-message "LSP policing filter must not be interface-specific"; junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. .. .. firewall family any filter $$")))"; junos:must-message "referenced filter must be defined under firewall family any"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of filter to use for policing LSP traffic"; } leaf no-auto-policing { type empty; description "Turn off automatic policing for this LSP"; } } // container policing leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf to { type jt:ipv4addr; description "Address of egress router"; } leaf push { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label to push"; } leaf entropy-label { type empty; description "Enable entropy label"; } } // container ingress container segment { description "Segment for segment routing"; uses apply-advanced; leaf sid-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Segment identifier (SID) label"; } leaf description { type string { length "1 .. 80"; } description "Text description of label-switched path"; } leaf next-hop { type union { type jt:ipv4addr-or-interface; type string { pattern "<.*>|$.*"; } } description "IPv4 address or interface of next-hop router"; } choice label-action { leaf swap { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Swap the SID label to this label"; } leaf pop { type empty; description "Pop the SID label"; } } // choice label-action } // container segment } // choice lsp-type } // list static-label-switched-path } // grouping juniper-protocols-mpls grouping admin_group_include_exclude { uses apply-advanced; choice include-any-choice { leaf-list include-any { type string; ordered-by user; description "Groups, one or more of which must be present"; } } // choice include-any-choice choice include-all-choice { leaf-list include-all { type string; ordered-by user; description "Groups, all of which must be present"; } } // choice include-all-choice choice exclude-choice { leaf-list exclude { type string; ordered-by user; description "Groups, all of which must be absent"; } } // choice exclude-choice } // grouping admin_group_include_exclude grouping bandwidth-type { uses apply-advanced; leaf per-traffic-class-bandwidth { type string; units "bps"; description "Bandwidth to reserve"; } leaf ct0 { type string; units "bps"; description "Bandwidth from traffic class 0"; } leaf ct1 { type string; units "bps"; description "Bandwidth from traffic class 1"; } leaf ct2 { type string; units "bps"; description "Bandwidth from traffic class 2"; } leaf ct3 { type string; units "bps"; description "Bandwidth from traffic class 3"; } } // grouping bandwidth-type grouping juniper-protocols-mpls-interface { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MPLS on this interface"; } } // choice enable-disable leaf-list srlg { type string; max-elements 64; ordered-by user; description "SRLG Name"; } leaf always-mark-connection-protection-tlv { type empty; description "Mark connection protection tlv on this interface"; } leaf switch-away-lsps { type empty; description "Switch away protected LSPs to their bypass LSPs"; } leaf-list admin-group { type string; ordered-by user; description "Administrative groups"; } leaf-list admin-group-extended { type string; ordered-by user; description "Extended administrative groups"; } container static { description "Static label-switch path related configurations"; uses apply-advanced; leaf protection-revert-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; description "FRR revert wait time, 0 means disable"; } } // container static } // grouping juniper-protocols-mpls-interface grouping juniper-protocols-msdp { uses apply-advanced; leaf data-encapsulation { type enumeration { enum "disable" { value 0; description "Disable data encapsulation"; } enum "enable" { value 1; description "Enable data encapsulation"; } } description "Set encapsulation of data packets"; } container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group container active-source-limit { description "Limit the number of active sources accepted"; uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "25000"; description "Maximum number of active sources accepted"; } leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "24000"; description "RED threshold for active source acceptance"; } leaf log-warning { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-warning"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } default "100"; description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-interval"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between log messages"; } } // container active-source-limit choice enable-disable { leaf disable { type empty; description "Disable MSDP"; } } // choice enable-disable leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf local-address { type jt:ipv4addr; description "Local address"; } container traceoptions { description "Trace options for MSDP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MSDP packets"; } enum "route" { value 1; description "Trace routing information"; } enum "nsr-synchronization" { value 2; description "Trace NSR synchronization events"; } enum "source-active" { value 3; description "Trace source-active messages"; } enum "source-active-request" { value 4; description "Trace source-active request messages"; } enum "source-active-response" { value 5; description "Trace source-active response messages"; } enum "keepalive" { value 6; description "Trace keepalive messages"; } enum "normal" { value 7; description "Trace normal events"; } enum "general" { value 8; description "Trace general events"; } enum "state" { value 9; description "Trace state transitions"; } enum "policy" { value 10; description "Trace policy processing"; } enum "task" { value 11; description "Trace routing protocol task processing"; } enum "timer" { value 12; description "Trace routing protocol timer processing"; } enum "all" { value 13; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions list peer { key "name"; ordered-by user; description "Configure an MSDP peer"; leaf name { type jt:ipv4addr; description "Peer address"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MSDP"; } } // choice enable-disable leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf local-address { type jt:ipv4addr; description "Local address"; } container traceoptions { description "Trace options for MSDP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MSDP packets"; } enum "route" { value 1; description "Trace routing information"; } enum "nsr-synchronization" { value 2; description "Trace NSR synchronization events"; } enum "source-active" { value 3; description "Trace source-active messages"; } enum "source-active-request" { value 4; description "Trace source-active request messages"; } enum "source-active-response" { value 5; description "Trace source-active response messages"; } enum "keepalive" { value 6; description "Trace keepalive messages"; } enum "normal" { value 7; description "Trace normal events"; } enum "general" { value 8; description "Trace general events"; } enum "state" { value 9; description "Trace state transitions"; } enum "policy" { value 10; description "Trace policy processing"; } enum "task" { value 11; description "Trace routing protocol task processing"; } enum "timer" { value 12; description "Trace routing protocol timer processing"; } enum "all" { value 13; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container active-source-limit { description "Limit the number of active sources accepted"; uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "25000"; description "Maximum number of active sources accepted"; } leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "24000"; description "RED threshold for active source acceptance"; } leaf log-warning { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-warning"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } default "100"; description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-interval"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between log messages"; } } // container active-source-limit leaf keep-alive { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Time limit for sending out periodic keep alive to peer"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 150"; } } units "seconds"; description "Max time to terminating a peer for having not received any message from "; } leaf sa-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "75 .. 300"; } } units "seconds"; description "Max time for holding a sa message before timing out"; } leaf default-peer { type empty; description "Default RPF peer"; } leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } } // list peer leaf keep-alive { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Time limit for sending out periodic keep alive to peer"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 150"; } } units "seconds"; description "Max time to terminating a peer for having not received any message from "; } leaf sa-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "75 .. 300"; } } units "seconds"; description "Max time for holding a sa message before timing out"; } list source { key "name"; ordered-by user; description "Configure parameters for each source"; leaf name { type jt:ipprefix; description "Source address or prefix"; } uses apply-advanced; container active-source-limit { description "Limit the number of active sources accepted"; uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "25000"; description "Maximum number of active sources accepted"; } leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "24000"; description "RED threshold for active source acceptance"; } leaf log-warning { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-warning"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } default "100"; description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-interval"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between log messages"; } } // container active-source-limit } // list source list group { key "name"; ordered-by user; description "Configure MSDP peer groups"; leaf name { type string; description "MSDP peer group name"; } uses apply-advanced; leaf mode { type enumeration { enum "standard" { value 0; description "Use standard MSDP source-active flooding rules"; } enum "mesh-group" { value 1; description "Group peers are mesh group members"; } } default "standard"; description "MSDP group source-active flooding mode"; } choice enable-disable { leaf disable { type empty; description "Disable MSDP"; } } // choice enable-disable leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf local-address { type jt:ipv4addr; description "Local address"; } container traceoptions { description "Trace options for MSDP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MSDP packets"; } enum "route" { value 1; description "Trace routing information"; } enum "nsr-synchronization" { value 2; description "Trace NSR synchronization events"; } enum "source-active" { value 3; description "Trace source-active messages"; } enum "source-active-request" { value 4; description "Trace source-active request messages"; } enum "source-active-response" { value 5; description "Trace source-active response messages"; } enum "keepalive" { value 6; description "Trace keepalive messages"; } enum "normal" { value 7; description "Trace normal events"; } enum "general" { value 8; description "Trace general events"; } enum "state" { value 9; description "Trace state transitions"; } enum "policy" { value 10; description "Trace policy processing"; } enum "task" { value 11; description "Trace routing protocol task processing"; } enum "timer" { value 12; description "Trace routing protocol timer processing"; } enum "all" { value 13; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions list peer { key "name"; ordered-by user; description "Configure an MSDP peer"; leaf name { type jt:ipv4addr; description "Peer address"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MSDP"; } } // choice enable-disable leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf local-address { type jt:ipv4addr; description "Local address"; } container traceoptions { description "Trace options for MSDP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MSDP packets"; } enum "route" { value 1; description "Trace routing information"; } enum "nsr-synchronization" { value 2; description "Trace NSR synchronization events"; } enum "source-active" { value 3; description "Trace source-active messages"; } enum "source-active-request" { value 4; description "Trace source-active request messages"; } enum "source-active-response" { value 5; description "Trace source-active response messages"; } enum "keepalive" { value 6; description "Trace keepalive messages"; } enum "normal" { value 7; description "Trace normal events"; } enum "general" { value 8; description "Trace general events"; } enum "state" { value 9; description "Trace state transitions"; } enum "policy" { value 10; description "Trace policy processing"; } enum "task" { value 11; description "Trace routing protocol task processing"; } enum "timer" { value 12; description "Trace routing protocol timer processing"; } enum "all" { value 13; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container active-source-limit { description "Limit the number of active sources accepted"; uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "25000"; description "Maximum number of active sources accepted"; } leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } default "24000"; description "RED threshold for active source acceptance"; } leaf log-warning { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-warning"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } default "100"; description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "Maximum must be configured to configure log-interval"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between log messages"; } } // container active-source-limit leaf keep-alive { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Time limit for sending out periodic keep alive to peer"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 150"; } } units "seconds"; description "Max time to terminating a peer for having not received any message from "; } leaf sa-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "75 .. 300"; } } units "seconds"; description "Max time for holding a sa message before timing out"; } leaf default-peer { type empty; description "Default RPF peer"; } leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } } // list peer } // list group } // grouping juniper-protocols-msdp grouping juniper-protocols-mstp { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MSTP"; } } // choice enable-disable leaf bpdu-destination-mac-address { type enumeration { enum "provider-bridge-group" { value 0; description "802.1ad provider bridge group address"; } } description "Destination MAC address in the spanning tree BPDUs"; } leaf configuration-name { type string { length "1 .. 32"; } description "Configuration name (part of MST configuration identifier)"; } leaf revision-level { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Revision level (part of MST configuration identifier)"; } leaf max-hops { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Maximum number of hops"; } leaf max-age { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "6 .. 40"; } } units "seconds"; description "Maximum age of received protocol bpdu"; } leaf hello-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 10"; } } units "seconds"; description "Time interval between configuration BPDUs"; } leaf forward-delay { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "4 .. 30"; } } units "seconds"; description "Time spent in listening or learning state"; } leaf system-identifier { type jt:mac-unicast; description "Sytem identifier to represent this node"; } container traceoptions { description "Tracing options for debugging protocol operation"; uses stp-trace-options; } // container traceoptions leaf bridge-priority { type string { junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)"; } leaf backup-bridge-priority { type string { junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 4k,8k,..60k)"; } leaf bpdu-block-on-edge { type empty; description "Block BPDU on all interfaces configured as edge (BPDU Protect)"; } leaf vpls-flush-on-topology-change { type empty; description "Enable VPLS MAC flush on root protected CE interface receving topology change"; } leaf priority-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } units "seconds"; description "Hold time before switching to primary priority when core domain becomes up"; } list system-id { key "name"; ordered-by user; description "System ID to IP mapping"; uses system-id-ip-map; } // list system-id list interface { key "name"; description "Interface options"; uses mstp-interface; } // list interface list msti { key "name"; description "Per-MSTI options"; leaf name { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 4094"; } } } uses apply-advanced; leaf bridge-priority { type string { junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)"; } leaf backup-bridge-priority { type string { junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 4k,8k,..60k)"; } leaf-list vlan { type string; ordered-by user; description "VLAN ID or VLAN ID range [1..4094]"; } list interface { key "name"; description "Interface options"; uses mstp-interface; } // list interface } // list msti } // grouping juniper-protocols-mstp grouping juniper-protocols-mvpn { description "BGP-MVPN configuration"; uses apply-advanced; container traceoptions { description "Trace options for BGP-MVPN"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errors"; } enum "nlri" { value 1; description "Trace MVPN advertisements"; } enum "topology" { value 2; description "Trace MVPN topology changes"; } enum "tunnel" { value 3; description "Trace provider tunnel events"; } enum "umh" { value 4; description "Trace Upstream Multicast Hop (UMH) events"; } enum "intra-as-ad" { value 5; description "Trace MVPN intra-AS auto discovery routes"; } enum "inter-as-ad" { value 6; description "Trace MVPN inter-AS auto discovery routes"; } enum "spmsi-ad" { value 7; description "Trace MVPN SPMSI auto discovery routes"; } enum "leaf-ad" { value 8; description "Trace MVPN leaf auto discovery routes"; } enum "source-active" { value 9; description "Trace MVPN source active routes"; } enum "cmcast-join" { value 10; description "Trace MVPN c-multicast join routes"; } enum "mdt-safi-ad" { value 11; description "Trace MVPN MDT SAFI auto discovery routes"; } enum "mvpn-limit" { value 12; description "Trace MVPN spmsi and cmcast limit events"; } enum "nsr-synchronization" { value 13; description "Trace NSR synchronization events"; } enum "route" { value 14; description "Trace routing information"; } enum "normal" { value 15; description "Trace normal events"; } enum "general" { value 16; description "Trace general events"; } enum "state" { value 17; description "Trace state transitions"; } enum "policy" { value 18; description "Trace policy processing"; } enum "task" { value 19; description "Trace routing protocol task processing"; } enum "timer" { value 20; description "Trace routing protocol timer processing"; } enum "all" { value 21; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container autodiscovery-only { junos:must "(!(".. route-target"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target"; junos:must "(!(".. sender-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site"; junos:must "(!(".. receiver-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site"; junos:must "(".. .. .. protocols pim mvpn")"; junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance."; junos:must "(!(".. .. .. provider-tunnel family inet pim-asm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; junos:must "((".. .. .. provider-tunnel pim-ssm" || ".. .. .. provider-tunnel family inet pim-ssm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; status deprecated; description "Use MVPN exclusively for PE router autodiscovery"; uses apply-advanced; container intra-as { description "Intra-AS autodiscovery options"; uses apply-advanced; leaf inclusive { type empty; description "Inclusive provider tunnel autodiscovery"; } } // container intra-as } // container autodiscovery-only container family { description "BGP-MVPN address family"; uses apply-advanced; container any { presence "enable any"; description "BGP-MVPN properties for all families"; uses apply-advanced; leaf disable { type empty; description "Disable all families"; } } // container any container inet { description "IPv4 BGP-MVPN properties"; uses apply-advanced; container autodiscovery-only { junos:must "(!(".. .. .. route-target"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target"; junos:must "(!(".. .. .. sender-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site"; junos:must "(!(".. .. .. receiver-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site"; junos:must "(".. .. .. .. .. protocols pim mvpn")"; junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance."; junos:must "(!(".. .. .. .. .. provider-tunnel family inet pim-asm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; junos:must "((".. .. .. .. .. provider-tunnel pim-ssm" || ".. .. .. .. .. provider-tunnel family inet pim-ssm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; description "Use MVPN exclusively for PE router autodiscovery"; uses apply-advanced; container intra-as { description "Intra-AS autodiscovery options"; uses apply-advanced; leaf inclusive { type empty; description "Inclusive provider tunnel autodiscovery"; } } // container intra-as } // container autodiscovery-only leaf disable { type empty; description "Disable family IPv4"; } } // container inet container inet6 { presence "enable inet6"; description "IPv6 BGP-MVPN properties"; uses apply-advanced; container autodiscovery-only { junos:must "(!(".. .. .. route-target"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with route-target"; junos:must "(!(".. .. .. sender-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with sender-site"; junos:must "(!(".. .. .. receiver-site"))"; junos:must-message "MVPN autodiscovery-only mode cannot be used with receiver-site"; junos:must "(".. .. .. .. .. protocols pim mvpn")"; junos:must-message "MVPN autodiscovery-only mode requires protocols pim mvpn configuration for the instance."; junos:must "(!(".. .. .. .. .. provider-tunnel family inet pim-asm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; junos:must "((".. .. .. .. .. provider-tunnel pim-ssm" || ".. .. .. .. .. provider-tunnel family inet pim-ssm"))"; junos:must-message "MVPN autodiscovery-only mode requires a PIM-SSM provider-tunnel root address."; description "Use MVPN exclusively for PE router autodiscovery"; uses apply-advanced; container intra-as { description "Intra-AS autodiscovery options"; uses apply-advanced; leaf inclusive { type empty; description "Inclusive provider tunnel autodiscovery"; } } // container intra-as } // container autodiscovery-only leaf disable { type empty; description "Disable family IPv6"; } } // container inet6 } // container family choice sender-receiver-site-choice { leaf receiver-site { junos:must "(!(".. .. .. provider-tunnel"))"; junos:must-message "MVPN instance with only receiver sites cannot be the root of a provider-tunnel"; type empty; description "MVPN instance has sites only with multicast receivers"; } leaf sender-site { junos:must "(".. .. .. provider-tunnel")"; junos:must-message "MVPN instance with sources must be the root of a provider-tunnel"; type empty; description "MVPN instance has sites only with multicast sources"; } } // choice sender-receiver-site-choice leaf unicast-umh-election { junos:must "(!(".. mvpn-join-load-balance"))"; junos:must-message "UMH election based on unicast route cannot be configured with mvpn-join-load-balance"; junos:must "(!(".. .. .. .. .. protocols bgp path-selection cisco-non-deterministic"))"; junos:must-message "Upstream Multicast Hop election cannot be used with 'protocols bgp path-selection cisco-non-deterministic'"; type empty; description "Upstream Multicast Hop election based on unicast route preference"; } container static-umh { description "Upstream Multicast Hop election based on static configuration"; uses apply-advanced; leaf primary { type jt:ipv4addr; description "Primary Upstream Multicast Hop"; } leaf backup { type jt:ipv4addr; description "Secondary Upstream Multicast Hop"; } choice source-tree_choice { leaf source-tree { type empty; description "Mandatory attribute - static-umh applies only to MVPN source-tree c-multicast joins"; } } // choice source-tree_choice } // container static-umh leaf cmcast-joins-limit-inet { junos:must "(".. mvpn-mode rpt-spt")"; junos:must-message "Cmcast limit can only be configured for MVPN rpt-spt mode"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15000"; } } description "Maximum number of cmcast entries for v4"; } leaf cmcast-joins-limit-inet6 { junos:must "(".. mvpn-mode rpt-spt")"; junos:must-message "Cmcastv6 limit can only be configured for MVPN rpt-spt mode"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15000"; } } description "Maximum number of cmcast entries for v6"; } container mvpn-mode { description "MVPN mode of operation"; uses apply-advanced; choice mode { container rpt-spt { presence "enable rpt-spt"; description "MVPN works in multicast RPT and SPT mode"; uses apply-advanced; leaf spt-switch-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 60"; } } units "seconds"; description "Timeout before a PE router switches between RPT and SPT"; } } // container rpt-spt container spt-only { presence "enable spt-only"; description "MVPN works in multicast SPT only mode (default mode)"; uses apply-advanced; container source-active-advertisement { description "Attributes associated with advertising Source-Active A-D routes"; uses apply-advanced; leaf dampen { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30"; } } units "minutes"; description "Time to wait before re-advertising source-active route"; } leaf min-rate { type string; units "bits per second"; description "Minimum traffic rate required to advertise Source-Active route"; } } // container source-active-advertisement leaf convert-sa-to-msdp { type empty; description "Turn on MVPN SA route to MSDP SA conversion"; } } // container spt-only } // choice mode } // container mvpn-mode container route-target { description "Configure route-targets for MVPN routes"; uses apply-advanced; container import-target { description "Target communities used when importing routes"; uses apply-advanced; container unicast { presence "enable unicast"; description "Use the same target community as configured for unicast"; choice receiver-sender-target-choice { leaf receiver { junos:must "(!(".. .. .. .. receiver-site"))"; junos:must-message "MVPN instance with only receivers must not import routes from other receiver only sites"; type empty; description "Target community used when importing receiver site routes"; } leaf sender { junos:must "(!(".. .. .. .. sender-site"))"; junos:must-message "MVPN instance with only sources must not import routes from other sender only sites"; type empty; description "Target community used when importing sender site routes"; } } // choice receiver-sender-target-choice } // container unicast container target { presence "enable target"; description "Target community"; leaf target-value { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } } choice receiver-sender-target-choice { leaf receiver { junos:must "(!(".. .. .. .. receiver-site"))"; junos:must-message "MVPN instance with only receivers must not import routes from other receiver only sites"; type empty; description "Target community used when importing receiver site routes"; } leaf sender { junos:must "(!(".. .. .. .. sender-site"))"; junos:must-message "MVPN instance with only sources must not import routes from other sender only sites"; type empty; description "Target community used when importing sender site routes"; } } // choice receiver-sender-target-choice } // container target } // container import-target container export-target { description "Target communities used when exporting routes"; uses apply-advanced; leaf unicast { type empty; description "Use the same target community as configured for unicast"; } leaf target { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Target community"; } } // container export-target } // container route-target container mvpn-join-load-balance { junos:must "(!(".. unicast-umh-election"))"; junos:must-message "MVPN join load balancing cannot be configured with unicast-umh-election"; description "MVPN Join Load Balancing Algorithm"; uses apply-advanced; choice algorithm { container bytewise-xor-hash { presence "enable bytewise-xor-hash"; description "Upstream selection using bytewise XOR hash"; } // container bytewise-xor-hash } // choice algorithm } // container mvpn-join-load-balance container hot-root-standby { junos:must "(!(".. .. .. instance-type mpls-internet-multicast"))"; junos:must-message "MVPN live-live - hot-root-standby cannot be configured in mpls-internet-multicast vrf"; junos:must "(".. sender-based-rpf")"; junos:must-message "MVPN live-live - hot-root-standby configuration needs sender-based-rpf configuration"; description "MVPN live-live - hot root standby"; uses apply-advanced; choice tree { container source-tree { presence "enable source-tree"; description "MVPN live-live - hot root standby for source tree"; } // container source-tree } // choice tree container min-rate { junos:must "(".. .. hot-root-standby source-tree")"; junos:must-message "MVPN live-live - min-rate can be configured only if hot-root-standby source-tree is configured"; description "Minimum traffic rate for the provider tunnel below which switchover is initiated (in bps)"; uses apply-advanced; leaf rate { type string; units "bits per second"; description "Minium traffic rate for the provider tunnel below which switchover is initiated (in bps)"; } leaf revert-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } units "seconds"; description "Time to delay updating of multicast routes to allow for multicast convergence"; } } // container min-rate } // container hot-root-standby container inter-region-template { description "MVPN inter-region tunnel mapping template"; uses apply-advanced; list template { key "name"; ordered-by user; description "Define a inter-region template"; leaf name { type string; description "MVPN Template Name"; } uses apply-advanced; list region { key "name"; ordered-by user; description "BGP peer group names used as region"; leaf name { junos:must "("protocols bgp group $$")"; junos:must-message "BGP group must be present"; type string; description "Region name"; } uses apply-advanced; choice tunnel-type { container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container ingress-replication { description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication leaf incoming { type empty; description "Same as incoming provider tunnel"; } } // choice tunnel-type } // list region container all-regions { description "Used for all regions not specified"; uses apply-advanced; choice tunnel-type { container rsvp-te { junos:must "("protocols rsvp")"; junos:must-message "RSVP must be configured in the master instance"; description "RSVP-TE point-to-multipoint LSP for flooding"; uses apply-advanced; choice static-or-dynamic { leaf static-lsp { type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP"; } container label-switched-path-template { description "Template for dynamic point-to-multipoint LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && "protocols mpls label-switched-path $$ p2mp")))"; junos:must-message "Referenced point-to-multipoint LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-multipoint LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // choice static-or-dynamic } // container rsvp-te container ldp-p2mp { junos:must "("protocols ldp p2mp")"; junos:must-message "LDP P2MP must be configured in the master instance"; presence "enable ldp-p2mp"; description "LDP point-to-multipoint LSP for flooding"; } // container ldp-p2mp container ingress-replication { description "Ingress replication tunnel"; uses apply-advanced; leaf create-new-ucast-tunnel { junos:must "(".. label-switched-path label-switched-path-template")"; junos:must-message "label-switched-path-template must be defined"; type empty; description "Create new unicast tunnel for ingress replication"; } container label-switched-path { presence "enable label-switched-path"; description "Point-to-point LSP unicast tunnel"; uses apply-advanced; container label-switched-path-template { junos:must "(".. .. create-new-ucast-tunnel")"; junos:must-message "Templates must be specified when and only when create-new-ucast-tunnel is defined"; description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && ("protocols mpls label-switched-path $$ template" && !("protocols mpls label-switched-path $$ p2mp"))))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template } // container label-switched-path } // container ingress-replication leaf incoming { type empty; description "Same as incoming provider tunnel"; } } // choice tunnel-type } // container all-regions } // list template } // container inter-region-template leaf source-redundancy { type empty; description "Assume all the sources for a particular group is sending same data"; } container umh-selection-additional-input { description "Additional parameters to consider during UMH"; uses apply-advanced; leaf source-active-preference { junos:must "(!(".. .. mvpn-mode rpt-spt"))"; junos:must-message "Source active preference can be configured only for spt only mode"; type empty; description "Use the preference set in the source active route"; } leaf tunnel-status { type empty; description "Use the RSVP tunnel status"; } } // container umh-selection-additional-input } // grouping juniper-protocols-mvpn grouping juniper-protocols-mvrp { description "MVRP Configuration"; uses apply-advanced; container traceoptions { description "Tracing options for MVRP"; uses mrp-trace-options; } // container traceoptions leaf join-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "100 .. 500"; } } units "milliseconds"; default "200"; description "Join timer interval"; } leaf leave-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "300 .. 1000"; } } units "milliseconds"; default "800"; description "Leave timer interval"; } leaf leaveall-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "10 .. 60"; } } units "seconds"; default "10"; description "Leaveall timer interval"; } leaf no-dynamic-vlan { type empty; description "Disable dynamic VLAN creation"; } leaf no-attribute-length-in-pdu { type empty; description "No attribute length while sending pdu "; } leaf bpdu-destination-mac-address { type enumeration { enum "provider-bridge-group" { value 0; description "802.1ad provider bridge group address"; } } description "Destination MAC address in the MVRP BPDUs"; } list interface { key "name"; ordered-by user; description "Configure interface options"; leaf name { junos:must "((((".. .. .. rstp interface $$" || ".. .. .. rstp interface all") && !(".. .. .. rstp interface $$ disable")) || ((".. .. .. mstp interface $$" || ".. .. .. mstp interface all") && !(".. .. .. mstp interface $$ disable"))))"; junos:must-message "rstp/mstp is not enabled on the interface, mvrp is not allowed"; junos:must "((!("interfaces $$ flexible-vlan-tagging") && (!("interfaces $$ vlan-tagging") && !("interfaces $$ stacked-vlan-tagging"))))"; junos:must-message "mvrp is not supported on interfaces if flexible-vlan-tagging/vlan-tagging/stacked-vlan-tagging enabled"; junos:must "(("interfaces $$ unit $$={0} family ethernet-switching interface-mode trunk" || "interfaces $$ unit $$={0} family bridge interface-mode trunk"))"; junos:must-message "mvrp can be enabled only on interfaces with interface-mode trunk"; type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf join-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "100 .. 500"; } } units "milliseconds"; description "Join timer interval"; } leaf leave-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "300 .. 1000"; } } units "milliseconds"; description "Leave timer interval"; } leaf leaveall-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "10 .. 60"; } } units "seconds"; description "Leaveall timer interval"; } leaf point-to-point { type empty; description "Port is point to point"; } leaf registration { type enumeration { enum "normal" { value 0; description "Normal registration mode"; } enum "restricted" { value 1; description "Restricted registration mode"; } enum "forbidden" { value 2; description "Forbidden registration mode"; } } default "normal"; description "Registration mode"; } } // list interface } // grouping juniper-protocols-mvrp grouping juniper-protocols-ospf { uses apply-advanced; list topology { key "name"; ordered-by user; description "Topology parameters"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf topology-id { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "32 .. 127"; } } description "Topology identifier"; } leaf overload { type empty; description "Set the overload mode (repel transit traffic)"; } leaf rib-group { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-group must be defined"; type string; description "Routing table group for importing routes"; } container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } } // list topology container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options container traffic-engineering { presence "enable traffic-engineering"; description "Configure traffic engineering attributes"; uses apply-advanced; leaf no-topology { type empty; description "Disable dissemination of TE link-state topology information"; } leaf multicast-rpf-routes { junos:must "(!(".. .. topology $$={ipv4-multicast}"))"; junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast"; junos:must "(".. shortcuts")"; junos:must-message "multicast-rpf-routes cannot be used without shortcuts"; type empty; description "Install routes for multicast RPF checks into inet.2"; } leaf l3-unicast-topology { type empty; description "Download IGP topology into TED"; } container ignore-lsp-metrics { presence "enable ignore-lsp-metrics"; description "Ignore label-switched path metrics when doing shortcuts"; uses apply-advanced; leaf unconfigured-only { type empty; description "Ignore lsp metrics for unconfigured only"; } } // container ignore-lsp-metrics container shortcuts { presence "enable shortcuts"; description "Use label-switched paths as next hops, if possible"; uses apply-advanced; leaf ignore-lsp-metrics { type empty; status deprecated; description "Ignore label-switched path metrics when doing shortcuts"; } leaf lsp-metric-into-summary { type empty; description "Advertise LSP metric into summary LSAs"; } list family { key "name"; ordered-by user; description "Address family specific traffic-engineering attributes"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-mpls" { value 1; description "IPv4-MPLS family"; } } } uses apply-advanced; } // list family } // container shortcuts leaf advertise-unnumbered-interfaces { type empty; description "Advertise unnumbered interfaces"; } leaf credibility-protocol-preference { type empty; description "TED protocol credibility follows protocol preference"; } container advertisement { description "Advertise TE parameters even if RSVP is not turned on"; uses apply-advanced; leaf always { type empty; description "Advertise TE parameters in TE LSAs"; } } // container advertisement } // container traffic-engineering container source-packet-routing { junos:must "(!(".. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; junos:must "(".. .. .. protocols mpls ")"; junos:must-message "SPRING configuration is not allowed without 'protocols mpls'"; presence "enable source-packet-routing"; description "Enable source packet routing (SPRING)"; uses apply-advanced; container adjacency-segment { description "Attributes for adjacency segments in spring"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "180000 .. 900000"; } } description "Retain time of Adjacency segment after isolating from an interface"; } } // container adjacency-segment leaf-list prefix-segment { type jt:policy-algebra; ordered-by user; description "Prefix Segment policy"; } leaf explicit-null { type empty; description "Set E and P bits in all Prefix SID advertisements"; } container node-segment { presence "enable node-segment"; description "Enable support for Node segments in SPRING"; uses apply-advanced; leaf ipv4-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set ipv4 node segment index"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 16385"; } } description "Set range of node segment indices allowed"; } } // container node-segment container srgb { junos:must "(!(".. node-segment index-range"))"; junos:must-message "Can not be configured with node-segment index-range"; description "Set the SRGB global block in SPRING"; leaf start-label { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Start range for SRGB label block"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Index to the SRGB start label block"; } } // container srgb leaf mapping-server { junos:must "(".. node-segment")"; junos:must-message "protocols ospf source-packet-routing node-segment must be defined"; junos:must "("routing-options source-packet-routing mapping-server-entry $$")"; junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined"; type string; description "Mapping server name"; } leaf install-prefix-sid-for-best-route { type empty; description "For best route install a exact prefix sid route"; } leaf ldp-stitching { type empty; description "Enable SR to LDP stitching"; } leaf-list flex-algorithm { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 255"; } } max-elements 16; description "Flex-algorithms we would like to participate in"; } } // container source-packet-routing list area { key "name"; ordered-by user; description "Configure an OSPF area"; leaf name { type jt:areaid; description "Area ID"; } uses apply-advanced; choice stub-option { container stub { presence "enable stub"; description "Configure a stub area"; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this stub area"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this stub area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this stub area"; } } // choice summaries-choice } // container stub container nssa { presence "enable nssa"; description "Configure a not-so-stubby area"; uses apply-advanced; container default-lsa { presence "enable default-lsa"; description "Configure a default LSA"; uses apply-advanced; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "External metric type for the default type 7 LSA"; } leaf type-7 { type empty; description "Flood type 7 default LSA if no-summaries is configured"; } } // container default-lsa leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } status deprecated; description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } status deprecated; description "External metric type for the default type 7 LSA"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this NSSA area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this NSSA area"; } } // choice summaries-choice list area-range { key "name"; ordered-by user; description "Configure NSSA area ranges"; leaf name { type jt:ipprefix; description "Range to summarize NSSA routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } container override-metric { presence "enable override-metric"; description "Override the dynamic metric for this area-range"; uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric value"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } default "1"; description "Set the metric type for the override metric"; } } // container override-metric } // list area-range } // container nssa } // choice stub-option list area-range { key "name"; ordered-by user; description "Configure area ranges"; leaf name { type jt:ipprefix; description "Range to summarize routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } leaf override-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Override the dynamic metric for this area-range"; } } // list area-range leaf-list network-summary-export { type jt:policy-algebra; ordered-by user; description "Export policy for Type 3 Summary LSAs"; } leaf-list network-summary-import { type jt:policy-algebra; ordered-by user; description "Import policy for Type 3 Summary LSAs"; } leaf-list inter-area-prefix-export { type jt:policy-algebra; ordered-by user; description "Export policy for Inter Area Prefix LSAs"; } leaf-list inter-area-prefix-import { type jt:policy-algebra; ordered-by user; description "Import policy for Inter Area Prefix LSAs"; } leaf authentication-type { type enumeration { enum "none" { value 0; status deprecated; description "No authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } enum "md5" { value 2; status deprecated; description "MD5 authentication"; } } status deprecated; description "Authentication type"; } list virtual-link { junos:must "(".. .. area $$={0.0.0.0}")"; junos:must-message "virtual link can be configured only under backbone area"; key "neighbor-id transit-area"; ordered-by user; description "Configure virtual links"; leaf neighbor-id { type jt:ipv4addr; description "Router ID of a virtual neighbor"; } leaf transit-area { type jt:areaid; description "Transit area in common with virtual neighbor"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable this virtual link"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list virtual-link list sham-link-remote { key "name"; ordered-by user; description "Configure parameters for remote sham link endpoint"; leaf name { junos:must "(!(".. .. .. sham-link local $$"))"; junos:must-message "Local and remote sham link endpoint addresses must be different"; junos:must "(".. .. .. sham-link local")"; junos:must-message "Local sham link endpoint must be configured"; type jt:ipaddr; description "Remote sham link endpoint address"; } uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Sham link metric"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list sham-link-remote list interface { key "name"; ordered-by user; description "Include an interface in this area"; leaf name { junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))"; junos:must-message "IPv4 address must be configured on the interface for nbma mode"; type union { type jt:ipv4addr-or-interface; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this interface"; } } // choice enable-disable leaf interface-type { type enumeration { enum "nbma" { value 0; description "Nonbroadcast multiaccess"; } enum "p2mp" { value 1; description "Point-to-multipoint NBMA"; } enum "p2p" { value 2; description "Point-to-point"; } enum "p2mp-over-lan" { value 3; description "Point-to-multipoint over LAN mode"; } } description "Type of interface"; } choice protection-type { leaf link-protection { type empty; description "Protect interface from link faults only"; } leaf node-link-protection { type empty; description "Protect interface from both link and node faults"; } } // choice protection-type leaf no-eligible-backup { type empty; description "Not eligible to backup traffic from protected interfaces"; } leaf no-eligible-remote-backup { type empty; description "Not eligible for Remote-LFA backup traffic from protected interfaces"; } container passive { presence "enable passive"; description "Do not run OSPF, but advertise it"; uses apply-advanced; container traffic-engineering { description "Advertise TE link information"; uses apply-advanced; leaf remote-node-id { type jt:ipaddr; description "Remote address of the link"; } leaf remote-node-router-id { junos:must "(".. remote-node-id")"; junos:must-message "remote-node-id must be configured"; type jt:ipv4addr; description "TE Router-ID of the remote node"; } } // container traffic-engineering } // container passive leaf secondary { junos:must "(!(" .. ipsec-sa"))"; junos:must-message "secondary interface cannot have ipsec-sa configured"; junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "secondary interface cannot have dynamic-neighbors configured"; junos:must "(!(" .. neighbor"))"; junos:must-message "secondary interface cannot have configured neighbors"; junos:must "(!(" .. interface-type p2mp"))"; junos:must-message "secondary interface cannot be set as type p2mp"; junos:must "(!(" .. interface-type nbma"))"; junos:must-message "secondary interface cannot be set as type nbma"; junos:must "(!(" .. passive"))"; junos:must-message "secondary interface cannot be configured passive"; type empty; description "Treat interface as secondary"; } leaf own-router-lsa { type empty; description "Generate a separate router LSA for this interface"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Designated router priority"; } leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology leaf transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } status deprecated; description "OSPF packet transmit interval (milliseconds)"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf full-neighbors-only { type empty; description "Setup BFD sessions only to Full neighbors"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection leaf dynamic-neighbors { junos:must "(" .. interface-type p2mp")"; junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp"; type empty; description "Learn neighbors dynamically on a p2mp interface"; } leaf no-advertise-adjacency-segment { type empty; description "Do not advertise an adjacency segment for this interface"; } list neighbor { junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set"; key "name"; ordered-by user; description "NBMA neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } leaf eligible { type empty; description "Eligible to be DR on an NBMA network"; } } // list neighbor leaf poll-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Poll interval for NBMA interfaces"; } leaf no-interface-state-traps { type empty; description "Do not send interface state change traps"; } leaf strict-bfd { junos:must "(" .. bfd-liveness-detection")"; junos:must-message "strict bfd cannot be configured without bfd."; junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))"; junos:must-message "full-neighbors-only and strict-bfd cannot be configured together"; type empty; description "Enable strict bfd over this interface"; } container post-convergence-lfa { junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")"; junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable post-convergence-lfa"; description "Protect interface using post-convergence backup path"; uses apply-advanced; container node-protection { presence "enable node-protection"; description "Compute backup path assuming node failure"; uses apply-advanced; leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Cost for node protection"; } } // container node-protection leaf srlg-protection { type empty; description "Compute backup path assuming SRLG failure"; } leaf fate-sharing-protection { type empty; description "Compute backup path assuming fate-sharing group failure"; } } // container post-convergence-lfa leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Traffic engineering metric"; } container ldp-synchronization { presence "enable ldp-synchronization"; description "Advertise maximum metric until LDP is operational"; uses ldp-sync-obj; } // container ldp-synchronization container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment list lan-neighbor { junos:must "(!(".. ipv4-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface"; junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface "; junos:must "(!(".. interface-type p2p"))"; junos:must-message "lan-neighbor can't be configured for point-to-point interfaces"; key "name"; ordered-by user; description "Configuration specific to a LAN neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } uses apply-advanced; container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment } // list lan-neighbor } // list interface leaf no-context-identifier-advertisement { junos:must "(!(".. context-identifier"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; type empty; description "Disable context identifier advertisments in this area"; } list peer-interface { key "name"; ordered-by user; description "Configuration for peer interface"; leaf name { type string; description "Name of peer interface"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this control peer"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } } // list peer-interface leaf no-source-packet-routing { type empty; description "Disable SPRING in this area"; } list context-identifier { junos:must "(!(".. no-context-identifier-advertisement"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; key "name"; ordered-by user; description "Configure context identifier in support of edge protection"; leaf name { type jt:ipv4addr; description "Context identifier"; } uses apply-advanced; } // list context-identifier list label-switched-path { junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))"; junos:must-message "cannot advertise LSPs when using multicast-rpf-routes"; key "name"; ordered-by user; description "Configuration for advertisement of a label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of label-switched path to be advertised"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this label-switched path"; } } // choice enable-disable leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list label-switched-path } // list area choice enable-disable { leaf disable { type empty; description "Disable OSPF"; } } // choice enable-disable container traceoptions { description "Trace options for OSPF"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "spf" { value 0; description "Trace SPF calculations"; } enum "error" { value 1; description "Trace errored packets"; } enum "event" { value 2; description "Trace OSPF state machine events"; } enum "packet-dump" { value 3; description "Dump the contents of selected packet types"; } enum "flooding" { value 4; description "Trace LSA flooding"; } enum "lsa-analysis" { value 5; description "Trace LSA analysis"; } enum "packets" { value 6; description "Trace all OSPF packets"; } enum "hello" { value 7; description "Trace hello packets"; } enum "database-description" { value 8; description "Trace database description packets"; } enum "lsa-request" { value 9; description "Trace LSA request packets"; } enum "lsa-update" { value 10; description "Trace LSA update packets"; } enum "lsa-ack" { value 11; description "Trace LSA acknowledgment packets"; } enum "ldp-synchronization" { value 12; description "Trace synchronization between OSPF and LDP"; } enum "on-demand" { value 13; description "Trace demand circuit extensions"; } enum "nsr-synchronization" { value 14; description "Trace NSR synchronization events"; } enum "graceful-restart" { value 15; description "Trace graceful restart"; } enum "restart-signaling" { value 16; description "Trace restart signaling"; } enum "backup-spf" { value 17; description "Trace backup SPF (LFA) specific events"; } enum "source-packet-routing" { value 18; description "Trace source packet routing (SPRING) events"; } enum "post-convergence-lfa" { value 19; description "Trace post-convergence-lfa related events"; } enum "flex-algorithm" { value 20; description "Trace flex-algorithm related events"; } enum "route" { value 21; description "Trace routing information"; } enum "normal" { value 22; description "Trace normal events"; } enum "general" { value 23; description "Trace general events"; } enum "state" { value 24; description "Trace state transitions"; } enum "policy" { value 25; description "Trace policy processing"; } enum "task" { value 26; description "Trace routing protocol task processing"; } enum "timer" { value 27; description "Trace routing protocol timer processing"; } enum "all" { value 28; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } container rib-groups { description "Routing table groups for importing OSPF routes"; uses apply-advanced; leaf inet { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 routing table group"; } leaf inet3 { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 inet.3 routing table group"; } } // container rib-groups leaf job-stats { type empty; description "Collect job statistics"; } container overload { presence "enable overload"; description "Set the overload mode (repel transit traffic)"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 3600"; } } units "seconds"; description "Time after which overload mode is reset"; } leaf allow-route-leaking { type empty; description "Allow routes to be leaked when overload is configured"; } leaf stub-network { type empty; description "Advertise Stub Network with maximum metric"; } leaf intra-area-prefix { type empty; description "Advertise Intra Area Prefix with maximum metric"; } leaf as-external { type empty; description "Advertise As External with maximum usable metric"; } } // container overload container database-protection { presence "enable database-protection"; description "Configure database protection attributes"; uses apply-advanced; leaf maximum-lsa { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } description "Maximum allowed non self-generated LSAs"; } leaf warning-only { type empty; description "Emit only a warning when LSA maximum limit is exceeded"; } leaf warning-threshold { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "30 .. 100"; } } units "percent"; description "Percentage of LSA maximum above which to trigger warning"; } leaf ignore-count { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 32"; } } description "Maximum number of times to go into ignore state"; } leaf ignore-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; description "Time to stay in ignore state and ignore all neighbors"; } leaf reset-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 86400"; } } units "seconds"; description "Time after which the ignore count gets reset to zero"; } } // container database-protection container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF graceful restart capability"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time for all neighbors to become full"; } leaf notify-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to send all max-aged grace LSAs"; } container helper-disable { presence "enable helper-disable"; description "Disable graceful restart helper capability"; uses apply-advanced; choice disable-choices { leaf standard { type empty; description "Disable helper-mode for rfc3623 based GR"; } leaf restart-signaling { type empty; description "Disable helper mode for restart-signaling "; } leaf both { type empty; description "Disable helper mode for both the types of GR"; } } // choice disable-choices } // container helper-disable leaf no-strict-lsa-checking { junos:must "(!(".. helper-disable"))"; junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set"; type empty; description "Do not abort graceful helper mode upon LSA changes"; } } // container graceful-restart leaf route-type-community { type enumeration { enum "iana" { value 0; description "BGP extended community value used is 0x0306"; } enum "vendor" { value 1; description "Vendor BGP extended community value used is 0x8000"; } } description "Specify BGP extended community value to encode OSPF route type"; } container domain-id { description "Configure domain ID"; choice domain_id_or_disable { leaf domain-id { type string; description "Domain ID"; } leaf disable { type empty; description "Disable domain ID"; } } // choice domain_id_or_disable } // container domain-id choice domain_vpn_tag_or_disable { leaf domain-vpn-tag { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Domain VPN tag for external LSA"; } leaf no-domain-vpn-tag { type empty; description "Disable domain VPN tag"; } } // choice domain_vpn_tag_or_disable leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of internal routes"; } leaf external-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of external routes"; } leaf labeled-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of labeled routes"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy (for external routes or setting priority)"; } leaf reference-bandwidth { type string; description "Bandwidth for calculating metric defaults"; } leaf lsa-refresh-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "25 .. 50"; } } default "50"; description "LSA refresh interval (minutes)"; } leaf spf-delay { junos:must "(!(".. spf-options delay"))"; junos:must-message "You can only configure either spf-delay or delay under spf-options"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; status deprecated; description "Time to wait before running an SPF"; } leaf no-rfc-1583 { type empty; description "Disable RFC1583 compatibility"; } leaf forwarding-address-to-broadcast { type empty; description "Set forwarding address in Type 5 LSA in broadcast network"; } choice nssa-abr-option { leaf no-nssa-abr { type empty; description "Disable full NSSA functionality at ABR"; } } // choice nssa-abr-option container sham-link { presence "enable sham-link"; description "Configure parameters for sham links"; uses apply-advanced; leaf local { type jt:ipaddr; description "Local sham link endpoint address"; } leaf no-advertise-local { type empty; status deprecated; description "Don't advertise local sham link endpoint as stub in router LSA"; } } // container sham-link } // grouping juniper-protocols-ospf grouping juniper-ospf-authentication { description "Authentication information"; uses apply-advanced; choice authentication-type { leaf simple-password { type jt:unreadable; description "Authentication key"; } list md5 { key "name"; ordered-by user; description "MD5 authentication key"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } leaf key { type jt:unreadable; description "MD5 authentication key value"; } leaf start-time { type jt:time; description "Start time for key transmission (YYYY-MM-DD.HH:MM)"; } } // list md5 } // choice authentication-type } // grouping juniper-ospf-authentication grouping juniper-protocols-ospf3 { list realm { key "name"; ordered-by user; description "OSPFv3 realm configuration"; leaf name { type enumeration { enum "ipv6-unicast" { value 0; description "IPv6 unicast realm"; } enum "ipv6-multicast" { value 1; description "IPv6 multicast realm"; } enum "ipv4-unicast" { value 2; description "IPv4 unicast realm"; } enum "ipv4-multicast" { value 3; description "IPv4 multicast realm"; } } description "OSPFv3 realm name"; } uses apply-advanced; list topology { key "name"; ordered-by user; description "Topology parameters"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf topology-id { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "32 .. 127"; } } description "Topology identifier"; } leaf overload { type empty; description "Set the overload mode (repel transit traffic)"; } leaf rib-group { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-group must be defined"; type string; description "Routing table group for importing routes"; } container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } } // list topology container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options container traffic-engineering { presence "enable traffic-engineering"; description "Configure traffic engineering attributes"; uses apply-advanced; leaf no-topology { type empty; description "Disable dissemination of TE link-state topology information"; } leaf multicast-rpf-routes { junos:must "(!(".. .. topology $$={ipv4-multicast}"))"; junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast"; junos:must "(".. shortcuts")"; junos:must-message "multicast-rpf-routes cannot be used without shortcuts"; type empty; description "Install routes for multicast RPF checks into inet.2"; } leaf l3-unicast-topology { type empty; description "Download IGP topology into TED"; } container ignore-lsp-metrics { presence "enable ignore-lsp-metrics"; description "Ignore label-switched path metrics when doing shortcuts"; uses apply-advanced; leaf unconfigured-only { type empty; description "Ignore lsp metrics for unconfigured only"; } } // container ignore-lsp-metrics container shortcuts { presence "enable shortcuts"; description "Use label-switched paths as next hops, if possible"; uses apply-advanced; leaf ignore-lsp-metrics { type empty; status deprecated; description "Ignore label-switched path metrics when doing shortcuts"; } leaf lsp-metric-into-summary { type empty; description "Advertise LSP metric into summary LSAs"; } list family { key "name"; ordered-by user; description "Address family specific traffic-engineering attributes"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-mpls" { value 1; description "IPv4-MPLS family"; } } } uses apply-advanced; } // list family } // container shortcuts leaf advertise-unnumbered-interfaces { type empty; description "Advertise unnumbered interfaces"; } leaf credibility-protocol-preference { type empty; description "TED protocol credibility follows protocol preference"; } container advertisement { description "Advertise TE parameters even if RSVP is not turned on"; uses apply-advanced; leaf always { type empty; description "Advertise TE parameters in TE LSAs"; } } // container advertisement } // container traffic-engineering container source-packet-routing { junos:must "(!(".. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; junos:must "(".. .. .. protocols mpls ")"; junos:must-message "SPRING configuration is not allowed without 'protocols mpls'"; presence "enable source-packet-routing"; description "Enable source packet routing (SPRING)"; uses apply-advanced; container adjacency-segment { description "Attributes for adjacency segments in spring"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "180000 .. 900000"; } } description "Retain time of Adjacency segment after isolating from an interface"; } } // container adjacency-segment leaf-list prefix-segment { type jt:policy-algebra; ordered-by user; description "Prefix Segment policy"; } leaf explicit-null { type empty; description "Set E and P bits in all Prefix SID advertisements"; } container node-segment { presence "enable node-segment"; description "Enable support for Node segments in SPRING"; uses apply-advanced; leaf ipv4-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set ipv4 node segment index"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 16385"; } } description "Set range of node segment indices allowed"; } } // container node-segment container srgb { junos:must "(!(".. node-segment index-range"))"; junos:must-message "Can not be configured with node-segment index-range"; description "Set the SRGB global block in SPRING"; leaf start-label { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Start range for SRGB label block"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Index to the SRGB start label block"; } } // container srgb leaf mapping-server { junos:must "(".. node-segment")"; junos:must-message "protocols ospf source-packet-routing node-segment must be defined"; junos:must "("routing-options source-packet-routing mapping-server-entry $$")"; junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined"; type string; description "Mapping server name"; } leaf install-prefix-sid-for-best-route { type empty; description "For best route install a exact prefix sid route"; } leaf ldp-stitching { type empty; description "Enable SR to LDP stitching"; } leaf-list flex-algorithm { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 255"; } } max-elements 16; description "Flex-algorithms we would like to participate in"; } } // container source-packet-routing list area { key "name"; ordered-by user; description "Configure an OSPF area"; leaf name { type jt:areaid; description "Area ID"; } uses apply-advanced; choice stub-option { container stub { presence "enable stub"; description "Configure a stub area"; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this stub area"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this stub area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this stub area"; } } // choice summaries-choice } // container stub container nssa { presence "enable nssa"; description "Configure a not-so-stubby area"; uses apply-advanced; container default-lsa { presence "enable default-lsa"; description "Configure a default LSA"; uses apply-advanced; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "External metric type for the default type 7 LSA"; } leaf type-7 { type empty; description "Flood type 7 default LSA if no-summaries is configured"; } } // container default-lsa leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } status deprecated; description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } status deprecated; description "External metric type for the default type 7 LSA"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this NSSA area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this NSSA area"; } } // choice summaries-choice list area-range { key "name"; ordered-by user; description "Configure NSSA area ranges"; leaf name { type jt:ipprefix; description "Range to summarize NSSA routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } container override-metric { presence "enable override-metric"; description "Override the dynamic metric for this area-range"; uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric value"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } default "1"; description "Set the metric type for the override metric"; } } // container override-metric } // list area-range } // container nssa } // choice stub-option list area-range { key "name"; ordered-by user; description "Configure area ranges"; leaf name { type jt:ipprefix; description "Range to summarize routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } leaf override-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Override the dynamic metric for this area-range"; } } // list area-range leaf-list network-summary-export { type jt:policy-algebra; ordered-by user; description "Export policy for Type 3 Summary LSAs"; } leaf-list network-summary-import { type jt:policy-algebra; ordered-by user; description "Import policy for Type 3 Summary LSAs"; } leaf-list inter-area-prefix-export { type jt:policy-algebra; ordered-by user; description "Export policy for Inter Area Prefix LSAs"; } leaf-list inter-area-prefix-import { type jt:policy-algebra; ordered-by user; description "Import policy for Inter Area Prefix LSAs"; } leaf authentication-type { type enumeration { enum "none" { value 0; status deprecated; description "No authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } enum "md5" { value 2; status deprecated; description "MD5 authentication"; } } status deprecated; description "Authentication type"; } list virtual-link { junos:must "(".. .. area $$={0.0.0.0}")"; junos:must-message "virtual link can be configured only under backbone area"; key "neighbor-id transit-area"; ordered-by user; description "Configure virtual links"; leaf neighbor-id { type jt:ipv4addr; description "Router ID of a virtual neighbor"; } leaf transit-area { type jt:areaid; description "Transit area in common with virtual neighbor"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable this virtual link"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list virtual-link list sham-link-remote { key "name"; ordered-by user; description "Configure parameters for remote sham link endpoint"; leaf name { junos:must "(!(".. .. .. sham-link local $$"))"; junos:must-message "Local and remote sham link endpoint addresses must be different"; junos:must "(".. .. .. sham-link local")"; junos:must-message "Local sham link endpoint must be configured"; type jt:ipaddr; description "Remote sham link endpoint address"; } uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Sham link metric"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list sham-link-remote list interface { key "name"; ordered-by user; description "Include an interface in this area"; leaf name { junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))"; junos:must-message "IPv4 address must be configured on the interface for nbma mode"; type union { type jt:ipv4addr-or-interface; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this interface"; } } // choice enable-disable leaf interface-type { type enumeration { enum "nbma" { value 0; description "Nonbroadcast multiaccess"; } enum "p2mp" { value 1; description "Point-to-multipoint NBMA"; } enum "p2p" { value 2; description "Point-to-point"; } enum "p2mp-over-lan" { value 3; description "Point-to-multipoint over LAN mode"; } } description "Type of interface"; } choice protection-type { leaf link-protection { type empty; description "Protect interface from link faults only"; } leaf node-link-protection { type empty; description "Protect interface from both link and node faults"; } } // choice protection-type leaf no-eligible-backup { type empty; description "Not eligible to backup traffic from protected interfaces"; } leaf no-eligible-remote-backup { type empty; description "Not eligible for Remote-LFA backup traffic from protected interfaces"; } container passive { presence "enable passive"; description "Do not run OSPF, but advertise it"; uses apply-advanced; container traffic-engineering { description "Advertise TE link information"; uses apply-advanced; leaf remote-node-id { type jt:ipaddr; description "Remote address of the link"; } leaf remote-node-router-id { junos:must "(".. remote-node-id")"; junos:must-message "remote-node-id must be configured"; type jt:ipv4addr; description "TE Router-ID of the remote node"; } } // container traffic-engineering } // container passive leaf secondary { junos:must "(!(" .. ipsec-sa"))"; junos:must-message "secondary interface cannot have ipsec-sa configured"; junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "secondary interface cannot have dynamic-neighbors configured"; junos:must "(!(" .. neighbor"))"; junos:must-message "secondary interface cannot have configured neighbors"; junos:must "(!(" .. interface-type p2mp"))"; junos:must-message "secondary interface cannot be set as type p2mp"; junos:must "(!(" .. interface-type nbma"))"; junos:must-message "secondary interface cannot be set as type nbma"; junos:must "(!(" .. passive"))"; junos:must-message "secondary interface cannot be configured passive"; type empty; description "Treat interface as secondary"; } leaf own-router-lsa { type empty; description "Generate a separate router LSA for this interface"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Designated router priority"; } leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology leaf transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } status deprecated; description "OSPF packet transmit interval (milliseconds)"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf full-neighbors-only { type empty; description "Setup BFD sessions only to Full neighbors"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection leaf dynamic-neighbors { junos:must "(" .. interface-type p2mp")"; junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp"; type empty; description "Learn neighbors dynamically on a p2mp interface"; } leaf no-advertise-adjacency-segment { type empty; description "Do not advertise an adjacency segment for this interface"; } list neighbor { junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set"; key "name"; ordered-by user; description "NBMA neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } leaf eligible { type empty; description "Eligible to be DR on an NBMA network"; } } // list neighbor leaf poll-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Poll interval for NBMA interfaces"; } leaf no-interface-state-traps { type empty; description "Do not send interface state change traps"; } leaf strict-bfd { junos:must "(" .. bfd-liveness-detection")"; junos:must-message "strict bfd cannot be configured without bfd."; junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))"; junos:must-message "full-neighbors-only and strict-bfd cannot be configured together"; type empty; description "Enable strict bfd over this interface"; } container post-convergence-lfa { junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")"; junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable post-convergence-lfa"; description "Protect interface using post-convergence backup path"; uses apply-advanced; container node-protection { presence "enable node-protection"; description "Compute backup path assuming node failure"; uses apply-advanced; leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Cost for node protection"; } } // container node-protection leaf srlg-protection { type empty; description "Compute backup path assuming SRLG failure"; } leaf fate-sharing-protection { type empty; description "Compute backup path assuming fate-sharing group failure"; } } // container post-convergence-lfa leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Traffic engineering metric"; } container ldp-synchronization { presence "enable ldp-synchronization"; description "Advertise maximum metric until LDP is operational"; uses ldp-sync-obj; } // container ldp-synchronization container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment list lan-neighbor { junos:must "(!(".. ipv4-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface"; junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface "; junos:must "(!(".. interface-type p2p"))"; junos:must-message "lan-neighbor can't be configured for point-to-point interfaces"; key "name"; ordered-by user; description "Configuration specific to a LAN neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } uses apply-advanced; container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment } // list lan-neighbor } // list interface leaf no-context-identifier-advertisement { junos:must "(!(".. context-identifier"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; type empty; description "Disable context identifier advertisments in this area"; } list peer-interface { key "name"; ordered-by user; description "Configuration for peer interface"; leaf name { type string; description "Name of peer interface"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this control peer"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } } // list peer-interface leaf no-source-packet-routing { type empty; description "Disable SPRING in this area"; } list context-identifier { junos:must "(!(".. no-context-identifier-advertisement"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; key "name"; ordered-by user; description "Configure context identifier in support of edge protection"; leaf name { type jt:ipv4addr; description "Context identifier"; } uses apply-advanced; } // list context-identifier list label-switched-path { junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))"; junos:must-message "cannot advertise LSPs when using multicast-rpf-routes"; key "name"; ordered-by user; description "Configuration for advertisement of a label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of label-switched path to be advertised"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this label-switched path"; } } // choice enable-disable leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list label-switched-path } // list area choice enable-disable { leaf disable { type empty; description "Disable OSPF"; } } // choice enable-disable container traceoptions { description "Trace options for OSPF"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "spf" { value 0; description "Trace SPF calculations"; } enum "error" { value 1; description "Trace errored packets"; } enum "event" { value 2; description "Trace OSPF state machine events"; } enum "packet-dump" { value 3; description "Dump the contents of selected packet types"; } enum "flooding" { value 4; description "Trace LSA flooding"; } enum "lsa-analysis" { value 5; description "Trace LSA analysis"; } enum "packets" { value 6; description "Trace all OSPF packets"; } enum "hello" { value 7; description "Trace hello packets"; } enum "database-description" { value 8; description "Trace database description packets"; } enum "lsa-request" { value 9; description "Trace LSA request packets"; } enum "lsa-update" { value 10; description "Trace LSA update packets"; } enum "lsa-ack" { value 11; description "Trace LSA acknowledgment packets"; } enum "ldp-synchronization" { value 12; description "Trace synchronization between OSPF and LDP"; } enum "on-demand" { value 13; description "Trace demand circuit extensions"; } enum "nsr-synchronization" { value 14; description "Trace NSR synchronization events"; } enum "graceful-restart" { value 15; description "Trace graceful restart"; } enum "restart-signaling" { value 16; description "Trace restart signaling"; } enum "backup-spf" { value 17; description "Trace backup SPF (LFA) specific events"; } enum "source-packet-routing" { value 18; description "Trace source packet routing (SPRING) events"; } enum "post-convergence-lfa" { value 19; description "Trace post-convergence-lfa related events"; } enum "flex-algorithm" { value 20; description "Trace flex-algorithm related events"; } enum "route" { value 21; description "Trace routing information"; } enum "normal" { value 22; description "Trace normal events"; } enum "general" { value 23; description "Trace general events"; } enum "state" { value 24; description "Trace state transitions"; } enum "policy" { value 25; description "Trace policy processing"; } enum "task" { value 26; description "Trace routing protocol task processing"; } enum "timer" { value 27; description "Trace routing protocol timer processing"; } enum "all" { value 28; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } container rib-groups { description "Routing table groups for importing OSPF routes"; uses apply-advanced; leaf inet { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 routing table group"; } leaf inet3 { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 inet.3 routing table group"; } } // container rib-groups leaf job-stats { type empty; description "Collect job statistics"; } container overload { presence "enable overload"; description "Set the overload mode (repel transit traffic)"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 3600"; } } units "seconds"; description "Time after which overload mode is reset"; } leaf allow-route-leaking { type empty; description "Allow routes to be leaked when overload is configured"; } leaf stub-network { type empty; description "Advertise Stub Network with maximum metric"; } leaf intra-area-prefix { type empty; description "Advertise Intra Area Prefix with maximum metric"; } leaf as-external { type empty; description "Advertise As External with maximum usable metric"; } } // container overload container database-protection { presence "enable database-protection"; description "Configure database protection attributes"; uses apply-advanced; leaf maximum-lsa { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } description "Maximum allowed non self-generated LSAs"; } leaf warning-only { type empty; description "Emit only a warning when LSA maximum limit is exceeded"; } leaf warning-threshold { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "30 .. 100"; } } units "percent"; description "Percentage of LSA maximum above which to trigger warning"; } leaf ignore-count { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 32"; } } description "Maximum number of times to go into ignore state"; } leaf ignore-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; description "Time to stay in ignore state and ignore all neighbors"; } leaf reset-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 86400"; } } units "seconds"; description "Time after which the ignore count gets reset to zero"; } } // container database-protection container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF graceful restart capability"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time for all neighbors to become full"; } leaf notify-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to send all max-aged grace LSAs"; } container helper-disable { presence "enable helper-disable"; description "Disable graceful restart helper capability"; uses apply-advanced; choice disable-choices { leaf standard { type empty; description "Disable helper-mode for rfc3623 based GR"; } leaf restart-signaling { type empty; description "Disable helper mode for restart-signaling "; } leaf both { type empty; description "Disable helper mode for both the types of GR"; } } // choice disable-choices } // container helper-disable leaf no-strict-lsa-checking { junos:must "(!(".. helper-disable"))"; junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set"; type empty; description "Do not abort graceful helper mode upon LSA changes"; } } // container graceful-restart leaf route-type-community { type enumeration { enum "iana" { value 0; description "BGP extended community value used is 0x0306"; } enum "vendor" { value 1; description "Vendor BGP extended community value used is 0x8000"; } } description "Specify BGP extended community value to encode OSPF route type"; } container domain-id { description "Configure domain ID"; choice domain_id_or_disable { leaf domain-id { type string; description "Domain ID"; } leaf disable { type empty; description "Disable domain ID"; } } // choice domain_id_or_disable } // container domain-id choice domain_vpn_tag_or_disable { leaf domain-vpn-tag { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Domain VPN tag for external LSA"; } leaf no-domain-vpn-tag { type empty; description "Disable domain VPN tag"; } } // choice domain_vpn_tag_or_disable leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of internal routes"; } leaf external-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of external routes"; } leaf labeled-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of labeled routes"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy (for external routes or setting priority)"; } leaf reference-bandwidth { type string; description "Bandwidth for calculating metric defaults"; } leaf lsa-refresh-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "25 .. 50"; } } default "50"; description "LSA refresh interval (minutes)"; } leaf spf-delay { junos:must "(!(".. spf-options delay"))"; junos:must-message "You can only configure either spf-delay or delay under spf-options"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; status deprecated; description "Time to wait before running an SPF"; } leaf no-rfc-1583 { type empty; description "Disable RFC1583 compatibility"; } leaf forwarding-address-to-broadcast { type empty; description "Set forwarding address in Type 5 LSA in broadcast network"; } choice nssa-abr-option { leaf no-nssa-abr { type empty; description "Disable full NSSA functionality at ABR"; } } // choice nssa-abr-option container sham-link { presence "enable sham-link"; description "Configure parameters for sham links"; uses apply-advanced; leaf local { type jt:ipaddr; description "Local sham link endpoint address"; } leaf no-advertise-local { type empty; status deprecated; description "Don't advertise local sham link endpoint as stub in router LSA"; } } // container sham-link } // list realm uses apply-advanced; list topology { key "name"; ordered-by user; description "Topology parameters"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf topology-id { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "32 .. 127"; } } description "Topology identifier"; } leaf overload { type empty; description "Set the overload mode (repel transit traffic)"; } leaf rib-group { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-group must be defined"; type string; description "Routing table group for importing routes"; } container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } } // list topology container backup-spf-options { description "Configure options for backup SPF"; uses apply-advanced; container remote-backup-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable remote-backup-calculation"; description "Calculate Remote LFA backup nexthops"; uses apply-advanced; container pq-nodes-nearest-to-source { description "PQ nodes selection based upon nearest to source"; uses apply-advanced; leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 100"; } } description "Selection percentage for nearest to source"; } } // container pq-nodes-nearest-to-source } // container remote-backup-calculation container use-post-convergence-lfa { junos:must "("protocols ospf source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; presence "enable use-post-convergence-lfa"; description "Calculate post-convergence backup paths"; uses apply-advanced; leaf maximum-labels { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 8"; } } description "Maximum number of labels installed for post-convergence paths"; } leaf maximum-backup-paths { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Maximum number of equal-cost post-convergence paths installed"; } } // container use-post-convergence-lfa leaf use-source-packet-routing { junos:must "(".. .. source-packet-routing")"; junos:must-message "Configuration of 'protocols ospf source-packet-routing' is required"; junos:must "(!(".. remote-backup-calculation"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options remote-backup-calculation'"; type empty; description "Use spring backup paths for inet.0 routes"; } leaf disable { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Do not run backup SPF"; } leaf no-install { type empty; description "Do not install backup nexthops into the RIB"; } leaf downstream-paths-only { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Use only downstream backup paths"; } container per-prefix-calculation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; description "Calculate backup nexthops for non-best prefix originators"; uses apply-advanced; leaf stubs { type empty; description "Per prefix calculation for stubs only"; } leaf summary { type empty; description "Per prefix calculation for summary originators only"; } leaf externals { type empty; description "Per prefix calculation for externals"; } leaf all { type empty; description "Per prefix calculation for all"; } } // container per-prefix-calculation leaf node-link-degradation { junos:must "(!("protocols ospf backup-spf-options use-post-convergence-lfa"))"; junos:must-message "Not allowed with 'protocols ospf backup-spf-options use-post-convergence-lfa'"; type empty; description "Degrade to link protection when nodelink protection not available"; } } // container backup-spf-options container traffic-engineering { presence "enable traffic-engineering"; description "Configure traffic engineering attributes"; uses apply-advanced; leaf no-topology { type empty; description "Disable dissemination of TE link-state topology information"; } leaf multicast-rpf-routes { junos:must "(!(".. .. topology $$={ipv4-multicast}"))"; junos:must-message "multicast-rpf-routes cannot be used with topology ipv4-multicast"; junos:must "(".. shortcuts")"; junos:must-message "multicast-rpf-routes cannot be used without shortcuts"; type empty; description "Install routes for multicast RPF checks into inet.2"; } leaf l3-unicast-topology { type empty; description "Download IGP topology into TED"; } container ignore-lsp-metrics { presence "enable ignore-lsp-metrics"; description "Ignore label-switched path metrics when doing shortcuts"; uses apply-advanced; leaf unconfigured-only { type empty; description "Ignore lsp metrics for unconfigured only"; } } // container ignore-lsp-metrics container shortcuts { presence "enable shortcuts"; description "Use label-switched paths as next hops, if possible"; uses apply-advanced; leaf ignore-lsp-metrics { type empty; status deprecated; description "Ignore label-switched path metrics when doing shortcuts"; } leaf lsp-metric-into-summary { type empty; description "Advertise LSP metric into summary LSAs"; } list family { key "name"; ordered-by user; description "Address family specific traffic-engineering attributes"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-mpls" { value 1; description "IPv4-MPLS family"; } } } uses apply-advanced; } // list family } // container shortcuts leaf advertise-unnumbered-interfaces { type empty; description "Advertise unnumbered interfaces"; } leaf credibility-protocol-preference { type empty; description "TED protocol credibility follows protocol preference"; } container advertisement { description "Advertise TE parameters even if RSVP is not turned on"; uses apply-advanced; leaf always { type empty; description "Advertise TE parameters in TE LSAs"; } } // container advertisement } // container traffic-engineering container source-packet-routing { junos:must "(!(".. .. .. protocols mpls disable"))"; junos:must-message "SPRING configuration is not allowed with 'protocols mpls disable'"; junos:must "(".. .. .. protocols mpls ")"; junos:must-message "SPRING configuration is not allowed without 'protocols mpls'"; presence "enable source-packet-routing"; description "Enable source packet routing (SPRING)"; uses apply-advanced; container adjacency-segment { description "Attributes for adjacency segments in spring"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "180000 .. 900000"; } } description "Retain time of Adjacency segment after isolating from an interface"; } } // container adjacency-segment leaf-list prefix-segment { type jt:policy-algebra; ordered-by user; description "Prefix Segment policy"; } leaf explicit-null { type empty; description "Set E and P bits in all Prefix SID advertisements"; } container node-segment { presence "enable node-segment"; description "Enable support for Node segments in SPRING"; uses apply-advanced; leaf ipv4-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set ipv4 node segment index"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 16385"; } } description "Set range of node segment indices allowed"; } } // container node-segment container srgb { junos:must "(!(".. node-segment index-range"))"; junos:must-message "Can not be configured with node-segment index-range"; description "Set the SRGB global block in SPRING"; leaf start-label { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Start range for SRGB label block"; } leaf index-range { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Index to the SRGB start label block"; } } // container srgb leaf mapping-server { junos:must "(".. node-segment")"; junos:must-message "protocols ospf source-packet-routing node-segment must be defined"; junos:must "("routing-options source-packet-routing mapping-server-entry $$")"; junos:must-message "Referenced source-packet-routing mapping-server-entry must be defined"; type string; description "Mapping server name"; } leaf install-prefix-sid-for-best-route { type empty; description "For best route install a exact prefix sid route"; } leaf ldp-stitching { type empty; description "Enable SR to LDP stitching"; } leaf-list flex-algorithm { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 255"; } } max-elements 16; description "Flex-algorithms we would like to participate in"; } } // container source-packet-routing list area { key "name"; ordered-by user; description "Configure an OSPF area"; leaf name { type jt:areaid; description "Area ID"; } uses apply-advanced; choice stub-option { container stub { presence "enable stub"; description "Configure a stub area"; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this stub area"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this stub area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this stub area"; } } // choice summaries-choice } // container stub container nssa { presence "enable nssa"; description "Configure a not-so-stubby area"; uses apply-advanced; container default-lsa { presence "enable default-lsa"; description "Configure a default LSA"; uses apply-advanced; leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } description "External metric type for the default type 7 LSA"; } leaf type-7 { type empty; description "Flood type 7 default LSA if no-summaries is configured"; } } // container default-lsa leaf default-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } status deprecated; description "Metric for the default route in this area"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } status deprecated; description "External metric type for the default type 7 LSA"; } choice summaries-choice { leaf summaries { type empty; description "Flood summary LSAs into this NSSA area"; } leaf no-summaries { type empty; description "Don't flood summary LSAs into this NSSA area"; } } // choice summaries-choice list area-range { key "name"; ordered-by user; description "Configure NSSA area ranges"; leaf name { type jt:ipprefix; description "Range to summarize NSSA routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } container override-metric { presence "enable override-metric"; description "Override the dynamic metric for this area-range"; uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric value"; } leaf metric-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } default "1"; description "Set the metric type for the override metric"; } } // container override-metric } // list area-range } // container nssa } // choice stub-option list area-range { key "name"; ordered-by user; description "Configure area ranges"; leaf name { type jt:ipprefix; description "Range to summarize routes in this area"; } uses apply-advanced; leaf restrict { type empty; description "Restrict advertisement of this area range"; } leaf exact { type empty; description "Enforce exact match for advertisement of this area range"; } leaf override-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Override the dynamic metric for this area-range"; } } // list area-range leaf-list network-summary-export { type jt:policy-algebra; ordered-by user; description "Export policy for Type 3 Summary LSAs"; } leaf-list network-summary-import { type jt:policy-algebra; ordered-by user; description "Import policy for Type 3 Summary LSAs"; } leaf-list inter-area-prefix-export { type jt:policy-algebra; ordered-by user; description "Export policy for Inter Area Prefix LSAs"; } leaf-list inter-area-prefix-import { type jt:policy-algebra; ordered-by user; description "Import policy for Inter Area Prefix LSAs"; } leaf authentication-type { type enumeration { enum "none" { value 0; status deprecated; description "No authentication"; } enum "simple" { value 1; status deprecated; description "Simple password authentication"; } enum "md5" { value 2; status deprecated; description "MD5 authentication"; } } status deprecated; description "Authentication type"; } list virtual-link { junos:must "(".. .. area $$={0.0.0.0}")"; junos:must-message "virtual link can be configured only under backbone area"; key "neighbor-id transit-area"; ordered-by user; description "Configure virtual links"; leaf neighbor-id { type jt:ipv4addr; description "Router ID of a virtual neighbor"; } leaf transit-area { type jt:areaid; description "Transit area in common with virtual neighbor"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable this virtual link"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list virtual-link list sham-link-remote { key "name"; ordered-by user; description "Configure parameters for remote sham link endpoint"; leaf name { junos:must "(!(".. .. .. sham-link local $$"))"; junos:must-message "Local and remote sham link endpoint addresses must be different"; junos:must "(".. .. .. sham-link local")"; junos:must-message "Local sham link endpoint must be configured"; type jt:ipaddr; description "Remote sham link endpoint address"; } uses apply-advanced; leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Sham link metric"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list sham-link-remote list interface { key "name"; ordered-by user; description "Include an interface in this area"; leaf name { junos:must "((!(".. interface-type nbma") || (!(("interfaces $$" || any "logical-systems <*> interfaces $$")) || (any "interfaces $$-IFL family inet address <*>" || any "logical-systems <*> interfaces $$-IFL family inet address <*>"))))"; junos:must-message "IPv4 address must be configured on the interface for nbma mode"; type union { type jt:ipv4addr-or-interface; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this interface"; } } // choice enable-disable leaf interface-type { type enumeration { enum "nbma" { value 0; description "Nonbroadcast multiaccess"; } enum "p2mp" { value 1; description "Point-to-multipoint NBMA"; } enum "p2p" { value 2; description "Point-to-point"; } enum "p2mp-over-lan" { value 3; description "Point-to-multipoint over LAN mode"; } } description "Type of interface"; } choice protection-type { leaf link-protection { type empty; description "Protect interface from link faults only"; } leaf node-link-protection { type empty; description "Protect interface from both link and node faults"; } } // choice protection-type leaf no-eligible-backup { type empty; description "Not eligible to backup traffic from protected interfaces"; } leaf no-eligible-remote-backup { type empty; description "Not eligible for Remote-LFA backup traffic from protected interfaces"; } container passive { presence "enable passive"; description "Do not run OSPF, but advertise it"; uses apply-advanced; container traffic-engineering { description "Advertise TE link information"; uses apply-advanced; leaf remote-node-id { type jt:ipaddr; description "Remote address of the link"; } leaf remote-node-router-id { junos:must "(".. remote-node-id")"; junos:must-message "remote-node-id must be configured"; type jt:ipv4addr; description "TE Router-ID of the remote node"; } } // container traffic-engineering } // container passive leaf secondary { junos:must "(!(" .. ipsec-sa"))"; junos:must-message "secondary interface cannot have ipsec-sa configured"; junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "secondary interface cannot have dynamic-neighbors configured"; junos:must "(!(" .. neighbor"))"; junos:must-message "secondary interface cannot have configured neighbors"; junos:must "(!(" .. interface-type p2mp"))"; junos:must-message "secondary interface cannot be set as type p2mp"; junos:must "(!(" .. interface-type nbma"))"; junos:must-message "secondary interface cannot be set as type nbma"; junos:must "(!(" .. passive"))"; junos:must-message "secondary interface cannot be configured passive"; type empty; description "Treat interface as secondary"; } leaf own-router-lsa { type empty; description "Generate a separate router LSA for this interface"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Designated router priority"; } leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } leaf ipsec-sa { junos:must "(!(any ".. .. interface <st*> ipsec-sa $$"))"; junos:must-message "Must not configure ipsec-sa for st0 interface"; junos:must "("security ipsec security-association $$ manual")"; junos:must-message "Referenced IPSec security association must be a manual SA"; junos:must "("security ipsec security-association $$ mode transport")"; junos:must-message "Referenced IPSec security association must be in transport mode"; junos:must "("security ipsec security-association $$")"; junos:must-message "Referenced IPSec security association must be defined"; type string { length "1 .. 32"; } description "IPSec security association name"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology leaf transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } status deprecated; description "OSPF packet transmit interval (milliseconds)"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf full-neighbors-only { type empty; description "Setup BFD sessions only to Full neighbors"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } } // container bfd-liveness-detection leaf dynamic-neighbors { junos:must "(" .. interface-type p2mp")"; junos:must-message "dynamic-neighbors option can be set only if the interface type is p2mp"; type empty; description "Learn neighbors dynamically on a p2mp interface"; } leaf no-advertise-adjacency-segment { type empty; description "Do not advertise an adjacency segment for this interface"; } list neighbor { junos:must "(!(" .. dynamic-neighbors"))"; junos:must-message "Neighbors cannot be specified manually if dynamic-neighbors is set"; key "name"; ordered-by user; description "NBMA neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } leaf eligible { type empty; description "Eligible to be DR on an NBMA network"; } } // list neighbor leaf poll-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Poll interval for NBMA interfaces"; } leaf no-interface-state-traps { type empty; description "Do not send interface state change traps"; } leaf strict-bfd { junos:must "(" .. bfd-liveness-detection")"; junos:must-message "strict bfd cannot be configured without bfd."; junos:must "(!(" .. bfd-liveness-detection full-neighbors-only"))"; junos:must-message "full-neighbors-only and strict-bfd cannot be configured together"; type empty; description "Enable strict bfd over this interface"; } container post-convergence-lfa { junos:must "("protocols ospf backup-spf-options use-post-convergence-lfa")"; junos:must-message "Not allowed without 'protocols ospf backup-spf-options use-post-convergence-lfa'"; presence "enable post-convergence-lfa"; description "Protect interface using post-convergence backup path"; uses apply-advanced; container node-protection { presence "enable node-protection"; description "Compute backup path assuming node failure"; uses apply-advanced; leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Cost for node protection"; } } // container node-protection leaf srlg-protection { type empty; description "Compute backup path assuming SRLG failure"; } leaf fate-sharing-protection { type empty; description "Compute backup path assuming fate-sharing group failure"; } } // container post-convergence-lfa leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Traffic engineering metric"; } container ldp-synchronization { presence "enable ldp-synchronization"; description "Advertise maximum metric until LDP is operational"; uses ldp-sync-obj; } // container ldp-synchronization container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment list lan-neighbor { junos:must "(!(".. ipv4-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if ipv4-adjacency-segment is configured in the same interface"; junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "lan-neighbor can't be configured if no-advertise-adjacency-segment is configured in the same interface "; junos:must "(!(".. interface-type p2p"))"; junos:must-message "lan-neighbor can't be configured for point-to-point interfaces"; key "name"; ordered-by user; description "Configuration specific to a LAN neighbor"; leaf name { type jt:ipaddr; description "Address of neighbor"; } uses apply-advanced; container ipv4-adjacency-segment { junos:must "(!(".. no-advertise-adjacency-segment"))"; junos:must-message "ipv4-adjacency-segment can't be configured if no-advertise-adjacency-segment is configured in the same interface"; description "Configure ipv4 adjacency segment"; uses apply-advanced; container protected { description "Adjacency SID is eligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container protected container unprotected { description "Adjacency SID uneligible for protection"; choice adjsid-type { container index { description "Adjacency SID indexed from SRGB"; leaf index-number { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } } } // container index leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Adjacency SID from static label pool"; } leaf dynamic { type empty; description "Dynamically allocate an adjacency segment"; } } // choice adjsid-type } // container unprotected } // container ipv4-adjacency-segment } // list lan-neighbor } // list interface leaf no-context-identifier-advertisement { junos:must "(!(".. context-identifier"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; type empty; description "Disable context identifier advertisments in this area"; } list peer-interface { key "name"; ordered-by user; description "Configuration for peer interface"; leaf name { type string; description "Name of peer interface"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this control peer"; } } // choice enable-disable leaf retransmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Retransmission interval (seconds)"; } leaf transit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Transit delay (seconds)"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Hello interval (seconds)"; } leaf dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Dead interval (seconds)"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 65535"; } } description "Maximum OSPF packet size"; } choice auth { container authentication { uses juniper-ospf-authentication; } // container authentication container authentication-key { status deprecated; description "Authentication key"; leaf keyname { type jt:unreadable; description "Authentication key value"; } leaf key-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } } // container authentication-key } // choice auth leaf demand-circuit { type empty; description "Interface functions as a demand circuit"; } leaf flood-reduction { type empty; description "Enable flood reduction"; } leaf no-neighbor-down-notification { type empty; description "Don't inform other protocols about neighbor down events"; } } // list peer-interface leaf no-source-packet-routing { type empty; description "Disable SPRING in this area"; } list context-identifier { junos:must "(!(".. no-context-identifier-advertisement"))"; junos:must-message "no-context-identifier-advertisement and context-identifier attributes are mutually exclusive"; key "name"; ordered-by user; description "Configure context identifier in support of edge protection"; leaf name { type jt:ipv4addr; description "Context identifier"; } uses apply-advanced; } // list context-identifier list label-switched-path { junos:must "(!(".. .. traffic-engineering multicast-rpf-routes"))"; junos:must-message "cannot advertise LSPs when using multicast-rpf-routes"; key "name"; ordered-by user; description "Configuration for advertisement of a label-switched path"; leaf name { type string { length "1 .. 64"; } description "Name of label-switched path to be advertised"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF on this label-switched path"; } } // choice enable-disable leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Interface metric"; } list topology { key "name"; ordered-by user; description "Topology specific attributes"; leaf name { type string; description "Topology name"; } uses apply-advanced; leaf disable { type empty; description "Disable this topology"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Topology metric"; } container bandwidth-based-metrics { junos:must "(".. metric")"; junos:must-message "Metric must be configured"; description "Configure bandwidth based metrics"; uses apply-advanced; list bandwidth { key "name"; description "Bandwidth threshold"; leaf name { type string; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Metric associated with specified bandwidth"; } } // list bandwidth } // container bandwidth-based-metrics } // list topology } // list label-switched-path } // list area choice enable-disable { leaf disable { type empty; description "Disable OSPF"; } } // choice enable-disable container traceoptions { description "Trace options for OSPF"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "spf" { value 0; description "Trace SPF calculations"; } enum "error" { value 1; description "Trace errored packets"; } enum "event" { value 2; description "Trace OSPF state machine events"; } enum "packet-dump" { value 3; description "Dump the contents of selected packet types"; } enum "flooding" { value 4; description "Trace LSA flooding"; } enum "lsa-analysis" { value 5; description "Trace LSA analysis"; } enum "packets" { value 6; description "Trace all OSPF packets"; } enum "hello" { value 7; description "Trace hello packets"; } enum "database-description" { value 8; description "Trace database description packets"; } enum "lsa-request" { value 9; description "Trace LSA request packets"; } enum "lsa-update" { value 10; description "Trace LSA update packets"; } enum "lsa-ack" { value 11; description "Trace LSA acknowledgment packets"; } enum "ldp-synchronization" { value 12; description "Trace synchronization between OSPF and LDP"; } enum "on-demand" { value 13; description "Trace demand circuit extensions"; } enum "nsr-synchronization" { value 14; description "Trace NSR synchronization events"; } enum "graceful-restart" { value 15; description "Trace graceful restart"; } enum "restart-signaling" { value 16; description "Trace restart signaling"; } enum "backup-spf" { value 17; description "Trace backup SPF (LFA) specific events"; } enum "source-packet-routing" { value 18; description "Trace source packet routing (SPRING) events"; } enum "post-convergence-lfa" { value 19; description "Trace post-convergence-lfa related events"; } enum "flex-algorithm" { value 20; description "Trace flex-algorithm related events"; } enum "route" { value 21; description "Trace routing information"; } enum "normal" { value 22; description "Trace normal events"; } enum "general" { value 23; description "Trace general events"; } enum "state" { value 24; description "Trace state transitions"; } enum "policy" { value 25; description "Trace policy processing"; } enum "task" { value 26; description "Trace routing protocol task processing"; } enum "timer" { value 27; description "Trace routing protocol timer processing"; } enum "all" { value 28; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container spf-options { description "Configure options for SPF"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; description "Time to wait before running an SPF"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2000 .. 20000"; } } units "milliseconds"; description "Time to hold down before running an SPF"; } leaf rapid-runs { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of maximum rapid SPF runs before holddown"; } leaf no-ignore-our-externals { type empty; description "Do not ignore self-generated external and NSSA LSAs"; } } // container spf-options leaf prefix-export-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Maximum number of prefixes that can be exported"; } container rib-groups { description "Routing table groups for importing OSPF routes"; uses apply-advanced; leaf inet { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 routing table group"; } leaf inet3 { junos:must "("routing-options rib-groups $$")"; junos:must-message "Referenced rib-groups must be defined"; junos:must "(!(".. topology $$={default} rib-group"))"; junos:must-message "rib-group cannot be used with topology default rib-group"; type string; description "Name of the IPv4/v6 inet.3 routing table group"; } } // container rib-groups leaf job-stats { type empty; description "Collect job statistics"; } container overload { presence "enable overload"; description "Set the overload mode (repel transit traffic)"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 3600"; } } units "seconds"; description "Time after which overload mode is reset"; } leaf allow-route-leaking { type empty; description "Allow routes to be leaked when overload is configured"; } leaf stub-network { type empty; description "Advertise Stub Network with maximum metric"; } leaf intra-area-prefix { type empty; description "Advertise Intra Area Prefix with maximum metric"; } leaf as-external { type empty; description "Advertise As External with maximum usable metric"; } } // container overload container database-protection { presence "enable database-protection"; description "Configure database protection attributes"; uses apply-advanced; leaf maximum-lsa { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000000"; } } description "Maximum allowed non self-generated LSAs"; } leaf warning-only { type empty; description "Emit only a warning when LSA maximum limit is exceeded"; } leaf warning-threshold { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "30 .. 100"; } } units "percent"; description "Percentage of LSA maximum above which to trigger warning"; } leaf ignore-count { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 32"; } } description "Maximum number of times to go into ignore state"; } leaf ignore-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; description "Time to stay in ignore state and ignore all neighbors"; } leaf reset-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 86400"; } } units "seconds"; description "Time after which the ignore count gets reset to zero"; } } // container database-protection container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable OSPF graceful restart capability"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time for all neighbors to become full"; } leaf notify-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; description "Time to send all max-aged grace LSAs"; } container helper-disable { presence "enable helper-disable"; description "Disable graceful restart helper capability"; uses apply-advanced; choice disable-choices { leaf standard { type empty; description "Disable helper-mode for rfc3623 based GR"; } leaf restart-signaling { type empty; description "Disable helper mode for restart-signaling "; } leaf both { type empty; description "Disable helper mode for both the types of GR"; } } // choice disable-choices } // container helper-disable leaf no-strict-lsa-checking { junos:must "(!(".. helper-disable"))"; junos:must-message "To configure no-strict-lsa-checking, helper-disable must not be set"; type empty; description "Do not abort graceful helper mode upon LSA changes"; } } // container graceful-restart leaf route-type-community { type enumeration { enum "iana" { value 0; description "BGP extended community value used is 0x0306"; } enum "vendor" { value 1; description "Vendor BGP extended community value used is 0x8000"; } } description "Specify BGP extended community value to encode OSPF route type"; } container domain-id { description "Configure domain ID"; choice domain_id_or_disable { leaf domain-id { type string; description "Domain ID"; } leaf disable { type empty; description "Disable domain ID"; } } // choice domain_id_or_disable } // container domain-id choice domain_vpn_tag_or_disable { leaf domain-vpn-tag { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Domain VPN tag for external LSA"; } leaf no-domain-vpn-tag { type empty; description "Disable domain VPN tag"; } } // choice domain_vpn_tag_or_disable leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of internal routes"; } leaf external-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of external routes"; } leaf labeled-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of labeled routes"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy (for external routes or setting priority)"; } leaf reference-bandwidth { type string; description "Bandwidth for calculating metric defaults"; } leaf lsa-refresh-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "25 .. 50"; } } default "50"; description "LSA refresh interval (minutes)"; } leaf spf-delay { junos:must "(!(".. spf-options delay"))"; junos:must-message "You can only configure either spf-delay or delay under spf-options"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 8000"; } } units "milliseconds"; status deprecated; description "Time to wait before running an SPF"; } leaf no-rfc-1583 { type empty; description "Disable RFC1583 compatibility"; } leaf forwarding-address-to-broadcast { type empty; description "Set forwarding address in Type 5 LSA in broadcast network"; } choice nssa-abr-option { leaf no-nssa-abr { type empty; description "Disable full NSSA functionality at ABR"; } } // choice nssa-abr-option container sham-link { presence "enable sham-link"; description "Configure parameters for sham links"; uses apply-advanced; leaf local { type jt:ipaddr; description "Local sham link endpoint address"; } leaf no-advertise-local { type empty; status deprecated; description "Don't advertise local sham link endpoint as stub in router LSA"; } } // container sham-link } // grouping juniper-protocols-ospf3 grouping juniper-protocols-pim { uses apply-advanced; container family { description "Local address family"; container any { presence "enable any"; description "Default properties for all address families"; uses apply-advanced; leaf disable { type empty; description "Disable all families"; } } // container any container inet { presence "enable inet"; description "IPv4 specific properties"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable PIMv4 on all interfaces"; } } // choice enable-disable } // container inet container inet6 { presence "enable inet6"; description "IPv6 specific properties"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable PIMv6 on all interfaces"; } } // choice enable-disable } // container inet6 } // container family choice enable-disable { leaf disable { type empty; description "Disable PIM"; } } // choice enable-disable container nonstop-routing { junos:must "("routing-options nonstop-routing")"; junos:must-message "To disable PIM nonstop-routing, non-stop routing must be globally enabled."; description "Configure PIM nonstop-routing attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable non-stop routing for PIM"; } } // choice enable-disable } // container nonstop-routing container traceoptions { description "Trace options for PIM"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Trace routing information"; } enum "packets" { value 1; description "Trace all PIM packets"; } enum "hello" { value 2; description "Trace hello packets"; } enum "register" { value 3; description "Trace register/register-stop messages"; } enum "join" { value 4; description "Trace join/prune/graft/graft-ack messages"; } enum "prune" { value 5; description "Trace join/prune/graft/graft-ack messages"; } enum "graft" { value 6; description "Trace join/prune/graft/graft-ack messages"; } enum "bootstrap" { value 7; description "Trace bootstrap/RP/auto-RP messages"; } enum "rp" { value 8; description "Trace bootstrap/RP/auto-RP messages"; } enum "autorp" { value 9; description "Trace bootstrap/RP/auto-RP messages"; } enum "assert" { value 10; description "Trace assert messages"; } enum "mdt" { value 11; description "Trace messages related to multicast data tunnels"; } enum "nsr-synchronization" { value 12; description "Trace NSR synchronization events"; } enum "bidirectional-df-election" { value 13; description "Trace bidirectional PIM DF election events"; } enum "mofrr" { value 14; description "Trace Multicast only Fast Re-Route messages"; } enum "normal" { value 15; description "Trace normal events"; } enum "general" { value 16; description "Trace general events"; } enum "state" { value 17; description "Trace state transitions"; } enum "policy" { value 18; description "Trace policy processing"; } enum "task" { value 19; description "Trace routing protocol task processing"; } enum "timer" { value 20; description "Trace routing protocol timer processing"; } enum "all" { value 21; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses pim_filter_obj; } // container filter } // list flag } // container traceoptions container dense-groups { description "Dense mode groups for sparse-dense mode"; uses apply-advanced; leaf dynamic-reject { type empty; description "Reject dynamic autorp negative dense-mode prefixes learnt from network"; } list pim-dense-group-type { key "name"; ordered-by user; leaf name { type jt:ipprefix; description "Group address or range to forward in dense mode"; } choice dense-group-flags { leaf reject { type empty; description "Do not include prefix as dense mode; force sparse mode"; } leaf announce { type empty; description "Advertise as negative prefix in auto-RP announce messages"; } } // choice dense-group-flags } // list pim-dense-group-type } // container dense-groups leaf vpn-tunnel-source { type jt:ipv4addr; status deprecated; description "Source address for the provider space mGRE tunnel"; } leaf vpn-group-address { junos:must "(!(".. .. .. provider-tunnel pim-ssm"))"; junos:must-message "'provider-tunnel pim-ssm' can not be configured with 'pim vpn-group-address'. Please disable one of them."; junos:must "((!(".. .. .. provider-tunnel pim-asm") || ".. .. .. provider-tunnel pim-asm group-address $$"))"; junos:must-message "MVPN inclusive provider-tunnel group-address must be same as 'vpn-group-address'"; type jt:ipv4addr; status deprecated; description "Group address for the VPN in provider space"; } leaf-list tunnel-devices { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tunnel devices to be used for creating mt interfaces"; } container rpf-selection { description "Select RPF neighbor"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; container wildcard-source { presence "enable wildcard-source"; description "Select RPF for (*,g) and unspecified (s,g) joins"; uses apply-advanced; leaf next-hop { type jt:ipaddr; description "Next-hop address"; } } // container wildcard-source list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources"; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf next-hop { type jt:ipaddr; description "Next-hop address"; } } // list source } // list group list prefix-list { key "name"; ordered-by user; description "Multicast group prefix list"; leaf name { junos:must "("policy-options prefix-list $$")"; junos:must-message "This prefix-list must be configured in policy-options."; type string; description "Name of prefix list to match against"; } uses apply-advanced; container wildcard-source { presence "enable wildcard-source"; description "Select RPF for (*,g) and unspecified (s,g) joins"; uses apply-advanced; leaf next-hop { type jt:ipaddr; description "Next-hop address"; } } // container wildcard-source list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources"; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf next-hop { type jt:ipaddr; description "Next-hop address"; } } // list source } // list prefix-list } // container rpf-selection container mvpn { presence "enable mvpn"; description "PIM MVPN control-plane options"; uses apply-advanced; container autodiscovery { junos:must "(!(".. .. vpn-group-address"))"; junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'"; junos:must "(".. .. .. mvpn")"; junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'"; junos:must "(!(".. .. mdt"))"; junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'"; status deprecated; description "PE router autodiscovery options for SSM MDTs"; uses apply-advanced; leaf inet-mdt { type empty; description "MDT-SAFI PE autodiscovery for SSM MDTs"; } } // container autodiscovery container family { description "PIM MVPN address family"; uses apply-advanced; container inet { description "IPv4 PIM MVPN specific properties"; uses apply-advanced; leaf rosen-mvpn { type empty; status deprecated; } leaf ngen-mvpn { junos:must "(".. .. .. .. .. mvpn")"; junos:must-message "Requires 'protocols mvpn'"; type empty; status deprecated; } container autodiscovery { junos:must "(!(".. .. .. .. vpn-group-address"))"; junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'"; junos:must "(".. .. .. .. .. mvpn")"; junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'"; junos:must "(!(".. .. .. .. mdt"))"; junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'"; description "PE router autodiscovery options for SSM MDTs"; uses apply-advanced; leaf inet-mdt { type empty; description "MDT-SAFI PE autodiscovery for SSM MDTs"; } } // container autodiscovery leaf disable { type empty; description "Disable family IPv4"; } } // container inet container inet6 { description "IPv6 PIM MVPN specific properties"; uses apply-advanced; leaf rosen-mvpn { type empty; status deprecated; } leaf ngen-mvpn { junos:must "(".. .. .. .. .. mvpn")"; junos:must-message "Requires 'protocols mvpn'"; type empty; status deprecated; } container autodiscovery { junos:must "(!(".. .. .. .. vpn-group-address"))"; junos:must-message "PIM MVPN autodiscovery options cannot be configured with 'vpn-group-address'"; junos:must "(".. .. .. .. .. mvpn")"; junos:must-message "Autodiscovery for PIM MVPNs requires 'protocols mvpn'"; junos:must "(!(".. .. .. .. mdt"))"; junos:must-message "PIM MVPN auto-discovery cannot be configured with 'pim mdt'"; description "PE router autodiscovery options for SSM MDTs"; uses apply-advanced; leaf inet-mdt { type empty; description "MDT-SAFI PE autodiscovery for SSM MDTs"; } } // container autodiscovery leaf disable { type empty; description "Disable family IPv6"; } } // container inet6 } // container family } // container mvpn container rib-group { description "Routing table group"; uses rib_group_type; } // container rib-group leaf-list import { type jt:policy-algebra; ordered-by user; description "PIM sparse import join policy"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "PIM sparse export join policy"; } container mldp-inband-signalling { junos:must "(!("system processes routing bgp rib-sharding"))"; junos:must-message "Can't be configured together with rib-sharding"; presence "enable mldp-inband-signalling"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "PIM MLDP join translation filter policy"; } } // container mldp-inband-signalling container rpf-vector { description "RPF vector TLV"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "RPF vector TLV include policy"; } } // container rpf-vector leaf assert-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 210"; } } default "180"; description "Set assert timeout"; } leaf assert-robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 5"; } } default "2"; description "Number of assert messages an assert winner sends in one cycle"; } leaf join-prune-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "210 .. 420"; } } default "210"; description "Set join/prune timeout"; } container spt-threshold { description "Set shortest-path-tree threshold policy"; uses apply-advanced; leaf-list infinity { type jt:policy-algebra; ordered-by user; description "Apply policy to always remain on shared tree"; } } // container spt-threshold container sglimit { description "Set limit on number of (S,G) states "; uses apply-advanced; list family { junos:must "(!(".. maximum"))"; junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured"; key "name"; ordered-by user; description "Protocol family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // list family leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // container sglimit container rp { junos:must "(!(" .. passive"))"; junos:must-message "pim rp cannot be configured with pim passive"; description "Router's rendezvous point properties"; uses apply-advanced; leaf bootstrap-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Eligibility to be the bootstrap router (IPv4 only)"; } leaf-list bootstrap-import { type jt:policy-algebra; ordered-by user; description "Bootstrap import policy (IPv4 only)"; } leaf-list bootstrap-export { type jt:policy-algebra; ordered-by user; description "Bootstrap export policy (IPv4 only)"; } container bootstrap { description "Bootstrap properties"; uses apply-advanced; container family { description "Bootstrap address family"; container inet { junos:must "(!((".. .. .. bootstrap-priority" || (".. .. .. bootstrap-import" || ".. .. .. bootstrap-export"))))"; junos:must-message "Duplicate IPv4 bootstrap configuration"; description "IPv4 bootstrap properties"; uses pim_bootstrap_options_type; } // container inet container inet6 { description "IPv6 bootstrap properties"; uses pim_bootstrap_options_type; } // container inet6 } // container family } // container bootstrap container register-limit { description "Set limit on incoming registers that create (S,G) state"; uses apply-advanced; list family { junos:must "(!(".. maximum"))"; junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured"; key "name"; ordered-by user; description "Protocol family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // list family leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // container register-limit container group-rp-mapping { description "Group-rp-mapping"; uses apply-advanced; list family { junos:must "(!(".. maximum"))"; junos:must-message "Family wise threshold cannot be configuredif global threshold is already configured"; key "name"; ordered-by user; description "Protocol family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // list family leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Maximum limit above which additional entries are not accepted"; } leaf threshold { junos:must "(".. maximum")"; junos:must-message "To configure threshold, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of maximum at which to start generating warnings"; } leaf log-interval { junos:must "(".. maximum")"; junos:must-message "To configure log-interval, maximum must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time between successive log messages"; } } // container group-rp-mapping leaf-list rp-register-policy { type jt:policy-algebra; ordered-by user; description "RP policy applied to incoming register messages"; } leaf-list dr-register-policy { type jt:policy-algebra; ordered-by user; description "DR policy applied to outgoing register messages"; } container local { description "Router's local RP properties"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Local RP address (IPv4 only)"; } choice enable-disable { leaf disable { type empty; description "Disable this RP (IPv4 only)"; } } // choice enable-disable leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Router's priority for becoming an RP (IPv4 only)"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "How long neighbor considers this router to be up, in seconds (IPv4 only)"; } list group-ranges { key "name"; ordered-by user; description "Group address range for which this router can be an RP (IPv4 only)"; leaf name { type jt:ipv4prefix; } uses apply-advanced; } // list group-ranges leaf override { type empty; description "Static RP mapping will take precedence over dynamic"; } leaf process-non-null-as-null-register { type empty; description "Process incoming non null registers as null registers"; } container family { description "Local RP address family"; container inet { description "IPv4 local RP properties"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Local RP address"; } choice enable-disable { leaf disable { type empty; description "Disable this RP"; } } // choice enable-disable leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Router's priority for becoming an RP"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "How long neighbor considers this router to be up, in seconds"; } list group-ranges { key "name"; ordered-by user; description "Group address range for which this router can be an RP"; leaf name { type jt:ipv4prefix; } uses apply-advanced; } // list group-ranges leaf override { type empty; description "Static RP mapping will take precedence over dynamic"; } container anycast-pim { description "Attributes for IPv4 anycast PIM"; uses apply-advanced; container rp-set { description "Rendezvous points belonging to anycast RP set"; uses apply-advanced; list address { key "name"; ordered-by user; description "IPv4 address of one or more remote anycast RPs"; leaf name { type jt:ipaddr; description "IPv4 address of remote anycast RP"; } uses apply-advanced; leaf forward-msdp-sa { type empty; description "Forward SAs learned from MSDP to this RP"; } } // list address } // container rp-set leaf local-address { type jt:ipaddr; description "Local address for replicating register messages to other RPs"; } } // container anycast-pim } // container inet container inet6 { description "IPv6 local RP properties"; uses apply-advanced; leaf address { type jt:ipv6addr; description "Local RP address"; } choice enable-disable { leaf disable { type empty; description "Disable this RP"; } } // choice enable-disable leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Router's priority for becoming an RP"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "How long neighbor considers this router to be up, in seconds"; } list group-ranges { key "name"; ordered-by user; description "Group address range for which this router can be an RP"; leaf name { type jt:ipv6prefix; } uses apply-advanced; } // list group-ranges leaf override { type empty; description "Static RP mapping will take precedence over dynamic"; } container anycast-pim { description "Attributes for IPv6 anycast PIM"; uses apply-advanced; container rp-set { description "Rendezvous points belonging to anycast RP set"; uses apply-advanced; list address { key "name"; ordered-by user; description "IPv6 address of one or more remote anycast RPs"; leaf name { type jt:ipv6addr; description "IPv6 address of remote anycast RP"; } uses apply-advanced; } // list address } // container rp-set leaf local-address { type jt:ipv6addr; description "Local address for replicating register messages to other RPs"; } } // container anycast-pim } // container inet6 } // container family } // container local container embedded-rp { presence "enable embedded-rp"; description "Set embedded-RP mode (IPv6 only)"; uses apply-advanced; list group-ranges { key "name"; ordered-by user; description "Group address range of RP"; uses pim_rp_group_range_type; } // list group-ranges leaf maximum-rps { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500"; } } default "100"; description "Maximum number of embedded RPs"; } } // container embedded-rp container auto-rp { description "Set auto-RP mode (IPv4 only)"; uses apply-advanced; choice autorp-mode { leaf discovery { type empty; description "Listen for auto-RP discovery messages"; } leaf announce { type empty; description "Transmit auto-RP announcement messages"; } leaf mapping { type empty; description "Transmit auto-RP mapping messages"; } } // choice autorp-mode choice mapping-agent-election-choice { leaf mapping-agent-election { type empty; description "Consider higher-addressed mapping agents as authoritative"; } leaf no-mapping-agent-election { type empty; description "Don't consider higher-addressed mapping agents as authoritative"; } } // choice mapping-agent-election-choice } // container auto-rp container static { description "Configure static PIM RPs"; uses apply-advanced; list address { key "name"; ordered-by user; description "RP address"; leaf name { type jt:ipaddr; description "IP address of RP"; } uses apply-advanced; leaf version { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } status deprecated; description "PIM version of RP"; } list group-ranges { key "name"; ordered-by user; description "Group address range of RP"; uses pim_rp_group_range_type; } // list group-ranges leaf override { type empty; description "Static RP mapping will take precedence over dynamic"; } } // list address } // container static leaf register-probe-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 60"; } } units "seconds"; default "5"; description "Register probe time"; } } // container rp leaf passive { junos:must "(!(any ".. interface <*> distributed-dr"))"; junos:must-message "pim passive cannot be configured with pim distributed-dr"; junos:must "(!(" .. rp"))"; junos:must-message "pim passive cannot be configured with pim rp"; type empty; description "Configure PIM protocol in passive mode"; } list interface { key "name"; ordered-by user; description "PIM interface options"; leaf name { junos:must "(((("routing-options multicast interface $$ disable" || ("routing-options multicast interface $$ maximum-bandwidth" || ("routing-options multicast interface $$ nexthop-unicast-address" || ("routing-options multicast interface $$ reverse-oif-mapping" || ("routing-options multicast interface $$ subscriber-leave-timer" || "routing-options multicast interface $$ no-qos-adjust"))))) && !("routing-options multicast interface $$ enable")) || ("protocols pim interface $$ disable" || !(("routing-options multicast interface $$" || "routing-options multicast interface $$ enable")))))"; junos:must-message "Multicast cannot be enabled on the same interface in the [edit routing-options] hierarchy"; type string; description "Interface name"; } uses apply-advanced; container family { description "Local address family"; container any { presence "enable any"; description "Default properties for all families"; uses apply-advanced; leaf disable { type empty; description "Disable all families"; } } // container any container inet { presence "enable inet"; description "IPv4 specific properties"; uses apply-advanced; container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection leaf mcae-mac-synchronize { type empty; description "Mclag mac synchronization"; } choice enable-disable { leaf disable { type empty; description "Disable PIMv4 on this interface"; } } // choice enable-disable } // container inet container inet6 { presence "enable inet6"; description "IPv6 specific properties"; uses apply-advanced; container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection choice enable-disable { leaf disable { type empty; description "Disable PIMv6 on this interface"; } } // choice enable-disable } // container inet6 } // container family choice enable-disable { leaf disable { type empty; description "Disable PIM on this interface"; } } // choice enable-disable leaf mode { type enumeration { enum "dense" { value 0; description "Dense mode"; } enum "sparse" { value 1; description "Sparse mode"; } enum "sparse-dense" { value 2; description "Sparse-dense mode"; } enum "bidirectional-sparse" { junos:must "((!(".. .. .. .. .. .. routing-instances") || any ".. .. .. .. .. .. routing-instances <*> instance-type virtual-router"))"; junos:must-message "Only master instance and routing-instances of type virtual-router support PIM-BIDIR."; junos:must "(!(".. version $$={1}"))"; junos:must-message "PIM Bidirectional is not supported by PIMv1."; value 3; description "Bidirectional-sparse mode"; } enum "bidirectional-sparse-dense" { junos:must "((!(".. .. .. .. .. .. routing-instances") || any ".. .. .. .. .. .. routing-instances <*> instance-type virtual-router"))"; junos:must-message "Only master instance and routing-instances of type virtual-router support PIM-BIDIR."; junos:must "(!(".. version $$={1}"))"; junos:must-message "PIM Bidirectional is not supported by PIMv1."; value 4; description "Bidirectional-sparse-dense mode"; } } description "Mode of interface"; } leaf priority { junos:must "((!(".. mode dense") || (".. mode dense" && "protocols igmp interface ${interface} version 1")))"; junos:must-message "PIM DR Priority cannot be configured in Dense Mode unless IGMP V1 is configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Hello option DR priority"; } container stickydr { presence "enable stickydr"; description "Make DR sticky"; uses apply-advanced; } // container stickydr container multiple-triggered-joins { presence "enable multiple-triggered-joins"; description "Send multiple pim triggered joins in quick intervals"; uses apply-advanced; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "2 .. 15"; } } default "2"; description "Set number of triggered joins to be sent"; } leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "100 .. 1000"; } } default "100"; description "Set interval between multiple triggered joins to be sent in milliseconds"; } } // container multiple-triggered-joins leaf version { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } status deprecated; description "Force PIM version"; } leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } units "seconds"; description "Hello interval"; } leaf-list neighbor-policy { type jt:policy-algebra; ordered-by user; description "PIM neighbor policy applied to incoming hello messages"; } leaf-list accept-join-always-from { type jt:policy-algebra; ordered-by user; description "Accept pim join/prune messages based on the policy configured"; } leaf accept-remote-source { type empty; description "Accept traffic from remote source"; } container dual-dr { junos:must "(!(" .. distributed-dr"))"; junos:must-message "pim dual-dr cannot be configured with pim distributed-dr"; presence "enable dual-dr"; description "Configure PIM Dual DR"; uses apply-advanced; leaf enhanced { type empty; description "Enable enhanced PIM Dual DR"; } } // container dual-dr leaf distributed-dr { junos:must "(!(".. .. .. passive"))"; junos:must-message "pim distributed-dr cannot be configured with pim passive"; junos:must "(!(" .. dual-dr"))"; junos:must-message "pim distributed-dr cannot be configured with pim dual-dr"; type empty; description "PIM Distributed DR"; } leaf reset-tracking-bit { type empty; description "Clear tracking-bit in PIM Hello LAN Prune Delay Option"; } leaf propagation-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "250 .. 2000"; } } units "milliseconds"; default "500"; description "Propagation delay value"; } leaf override-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "500 .. 6000"; } } units "milliseconds"; default "2000"; description "Override interval value"; } container bfd-liveness-detection { status deprecated; description "Bidirectional Forwarding Detection options (ipv4 only)"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection } // list interface container mdt { junos:must "((!(" .. .. mvpn") || ".. mvpn family inet rosen-mvpn"))"; junos:must-message "Data tunnels cannot be configured with 'protocols mvpn'"; status deprecated; description "Configure multicast data tunnel parameters"; uses apply-advanced; container threshold { description "Threshold for creation of multicast tunnels"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP prefix of multicast group"; leaf name { type jt:ipprefix; description "IP prefix of group"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP prefix of one or more multicast sources "; leaf name { type jt:ipprefix; description "IP prefix of source"; } uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 1000000"; } } units "kilobits"; description "Data threshold to create new tunnel"; } } // list source } // list group } // container threshold leaf data-mdt-reuse { type empty; description "Allow multiple customer streams to be transmitted over one data tunnel "; } leaf tunnel-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Maximum multicast data tunnels"; } leaf group-range { type jt:ipprefix; description "Group address range for multicast data tunnels"; } } // container mdt container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable PIM graceful restart capability"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 300"; } } units "seconds"; description "Maximum time for graceful restart to finish (seconds)"; } leaf no-bidirectional-mode { type empty; description "Disable PIM graceful restart for bidirectional mode"; } leaf restart-complete-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 300"; } } units "seconds"; description "Maximum time for graceful restart to complete (seconds)"; } } // container graceful-restart container join-load-balance { presence "enable join-load-balance"; description "Configure PIM join load balancing"; uses apply-advanced; leaf automatic { type empty; description "Enable automatic PIM join load balancing"; } } // container join-load-balance leaf standby-path-creation-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; description "Amount of time to wait before creating standby path"; } leaf idle-standby-path-switchover-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; description "Amount of time to wait before switching over to idle standby path"; } leaf dr-election-on-p2p { type empty; description "Enable DR election on Point-to-Point Interfaces"; } leaf no-wildcard-register-stop { type empty; description "Disable sending of wildcard register stop message"; } leaf nexthop-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } units "milliseconds"; description "Nexthop hold time in milliseconds"; } leaf mpls-internet-multicast { junos:must "(any "routing-instances <*> instance-type mpls-internet-multicast")"; junos:must-message "The mpls-internet-multicast instance must be configured to support multicast over MPLS"; type empty; description "Enable support for Internet Multicast over MPLS"; } container join-make-before-break { description "Enable PIM Join Make-Before-Break during RPF neighbor change"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable Make-Before-Break for PIM RPF neighbor change"; } } // choice enable-disable } // container join-make-before-break leaf reset-tracking-bit { type empty; description "Clear tracking-bit in PIM Hello LAN Prune Delay Option"; } leaf propagation-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "250 .. 2000"; } } units "milliseconds"; default "500"; description "Propagation delay value"; } leaf override-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "500 .. 6000"; } } units "milliseconds"; default "2000"; description "Override interval value"; } container default-vpn-source { presence "enable default-vpn-source"; description "Let all VRFs use master loopback address for mt interfaces"; uses apply-advanced; leaf interface-name { junos:must "("interfaces $$-IFL family inet address")"; junos:must-message "Family inet address should be configured on this loopback interface"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Master loopback interface name"; } } // container default-vpn-source } // grouping juniper-protocols-pim grouping juniper-protocols-pim-snooping { description "PIM snooping options"; uses apply-advanced; container traceoptions { description "Trace options for PIM Snooping"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all PIM packets"; } enum "hello" { value 1; description "Trace hello packets"; } enum "join" { value 2; description "Trace join messages"; } enum "prune" { value 3; description "Trace prune messages"; } enum "route" { value 4; description "Trace routing information"; } enum "normal" { value 5; description "Trace normal events"; } enum "general" { value 6; description "Trace general events"; } enum "state" { value 7; description "Trace state transitions"; } enum "policy" { value 8; description "Trace policy processing"; } enum "task" { value 9; description "Trace routing protocol task processing"; } enum "timer" { value 10; description "Trace routing protocol timer processing"; } enum "all" { value 11; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf no-dr-flood { type empty; description "Disable default flooding of multicast data on the PIM designated router port"; } list vlan { key "name"; ordered-by user; description "Vlan options"; leaf name { junos:must "(".. .. .. .. vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "Vlan_id of the learning-domain"; } uses apply-advanced; leaf no-dr-flood { type empty; description "Disable default flooding of multicast data on the PIM DR port"; } } // list vlan } // grouping juniper-protocols-pim-snooping grouping juniper-protocols-rip { uses apply-advanced; container traceoptions { description "Trace options for RIP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "auth" { value 0; description "Trace RIP authentication"; } enum "error" { value 1; description "Trace RIP errors"; } enum "expiration" { value 2; description "Trace RIP route expiration processing"; } enum "holddown" { value 3; description "Trace RIP hold-down processing"; } enum "packets" { value 4; description "Trace all RIP packets"; } enum "request" { value 5; description "Trace RIP information packets"; } enum "trigger" { value 6; description "Trace RIP triggered updates"; } enum "update" { value 7; description "Trace RIP update packets"; } enum "nsr-synchronization" { value 8; description "Trace NSR synchronization events"; } enum "route" { value 9; description "Trace routing information"; } enum "normal" { value 10; description "Trace normal events"; } enum "general" { value 11; description "Trace general events"; } enum "state" { value 12; description "Trace state transitions"; } enum "policy" { value 13; description "Trace policy processing"; } enum "task" { value 14; description "Trace routing protocol task processing"; } enum "timer" { value 15; description "Trace routing protocol timer processing"; } enum "all" { value 16; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to this flag"; uses rip_filter_obj; } // container filter } // list flag } // container traceoptions container rib-group { description "Routing table group for importing RIP routes"; uses rib_group_inet_type; } // container rib-group leaf metric-in { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Metric value to add to incoming routes"; } container send { description "Configure RIP send options"; choice send-opts { leaf broadcast { type empty; description "Broadcast RIPv2 packets (RIPv1 compatible)"; } leaf multicast { type empty; description "Multicast RIPv2 packets"; } leaf none { type empty; description "Do not send RIP updates"; } leaf version-1 { type empty; description "Broadcast RIPv1 packets"; } } // choice send-opts } // container send container receive { description "Configure RIP receive options"; choice receive-opts { leaf both { type empty; description "Accept both RIPv1 and RIPv2 packets"; } leaf none { type empty; description "Do not receive RIP packets"; } leaf version-1 { type empty; description "Accept RIPv1 packets only"; } leaf version-2 { type empty; description "Accept only RIPv2 packets"; } } // choice receive-opts } // container receive choice check-zero-choice { leaf check-zero { type empty; description "Check reserved fields on incoming RIPv2 packets"; } leaf no-check-zero { type empty; description "Don't check reserved fields on incoming RIPv2 packets"; } } // choice check-zero-choice leaf message-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "25 .. 255"; } } description "Number of route entries per update message"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 180"; } } units "seconds"; description "Hold-down time"; } leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } choice authentication { leaf authentication-type { type enumeration { enum "none" { value 0; description "No authentication"; } enum "simple" { value 1; description "Simple password authentication"; } enum "md5" { value 2; description "MD5 authentication"; } } } list authentication-selective-md5 { key "name"; ordered-by user; description "MD5 authentication with one or more keys"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } leaf key { type jt:unreadable; description "MD5 authentication key value"; } leaf start-time { type jt:time; description "Start time for key transmission (YYYY-MM-DD.HH:MM)"; } } // list authentication-selective-md5 } // choice authentication leaf authentication-key { junos:must "(!(".. authentication-selective-md5"))"; junos:must-message "Key already provided for selective-md5"; type jt:unreadable; description "Authentication key (password)"; } list group { key "name"; ordered-by user; description "Instance configuration"; leaf name { type string { junos:posix-pattern "^.{1,48}$"; junos:pattern-message "Must be a string of at most 48 characters"; } description "Group name"; } uses apply-advanced; leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of routes learned by this group"; } leaf metric-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Default metric of exported routes"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf demand-circuit { junos:must "(!(".. .. authentication-selective-md5"))"; junos:must-message "selective-md5 isn't supported with demand-circuit,opt for 'authentication-type md5' instead"; type empty; description "Enable demand circuit on this interface"; } leaf max-retrans-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 180"; } } description "Maximum time to re-transmit a message in demand-circuit"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection list neighbor { key "name"; ordered-by user; description "Neighbor configuration"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } leaf interface-type { type enumeration { enum "p2mp" { junos:must "(!(".. .. .. authentication-selective-md5"))"; junos:must-message "selective-md5 isn't supported with 'interface-type p2mp', opt for 'authentication-type md5' instead"; value 0; description "Point-to-multipoint link"; } } description "Interface type for the neighbor"; } leaf dynamic-peers { junos:must "(" .. interface-type p2mp")"; junos:must-message "dynamic-peers option can be set only if the interface type is p2mp"; type empty; description "Learn peers dynamically on a p2mp interface"; } list peer { junos:must "(" .. interface-type p2mp")"; junos:must-message "Peer address can be set only if the interface type is p2mp"; key "name"; ordered-by user; description "P2MP peer"; leaf name { type jt:ipaddr; description "Address of peer"; } } // list peer leaf metric-in { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Metric value to add to incoming routes"; } container send { description "Configure RIP send options"; choice send-opts { leaf broadcast { type empty; description "Broadcast RIPv2 packets (RIPv1 compatible)"; } leaf multicast { type empty; description "Multicast RIPv2 packets"; } leaf none { type empty; description "Do not send RIP updates"; } leaf version-1 { type empty; description "Broadcast RIPv1 packets"; } } // choice send-opts } // container send container receive { description "Configure RIP receive options"; choice receive-opts { leaf both { type empty; description "Accept both RIPv1 and RIPv2 packets"; } leaf none { type empty; description "Do not receive RIP packets"; } leaf version-1 { type empty; description "Accept RIPv1 packets only"; } leaf version-2 { type empty; description "Accept only RIPv2 packets"; } } // choice receive-opts } // container receive leaf demand-circuit { junos:must "(!(".. .. .. authentication-selective-md5"))"; junos:must-message "selective-md5 isn't supported with demand-circuit, opt for 'authentication-type md5' instead"; type empty; description "Enable demand circuit on this interface"; } leaf max-retrans-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 180"; } } description "Maximum time to re-transmit a msg in demand-circuit"; } choice check-zero-choice { leaf check-zero { type empty; description "Check reserved fields on incoming RIPv1 packets"; } leaf no-check-zero { type empty; description "Don't check reserved fields on incoming RIPv1 packets"; } } // choice check-zero-choice leaf any-sender { type empty; description "Disable strict checks on sender address"; } leaf message-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "25 .. 255"; } } description "Number of route entries per update message"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } choice authentication { leaf authentication-type { type enumeration { enum "none" { value 0; description "No authentication"; } enum "simple" { value 1; description "Simple password authentication"; } enum "md5" { value 2; description "MD5 authentication"; } } } list authentication-selective-md5 { junos:must "(!(".. interface-type p2mp"))"; junos:must-message "selective-md5 isn't supported with '.. neighbor <> interface-type p2mp', opt for 'authentication-type md5' instead"; junos:must "(!(".. demand-circuit"))"; junos:must-message "selective-md5 isn't supported with '.. neighbor <> demand-circuit', opt for 'authentication-type md5' instead"; junos:must "(!(".. .. demand-circuit"))"; junos:must-message "selective-md5 isn't supported with '.. group <> demand-circuit', opt for 'authentication-type md5' instead"; key "name"; ordered-by user; description "MD5 authentication with one or more keys"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Key ID for MD5 authentication"; } leaf key { type jt:unreadable; description "MD5 authentication key value"; } leaf start-time { type jt:time; description "Start time for key transmission (YYYY-MM-DD.HH:MM)"; } } // list authentication-selective-md5 } // choice authentication leaf authentication-key { junos:must "(!(".. authentication-selective-md5"))"; junos:must-message "Key already provided for selective-md5"; type jt:unreadable; description "Authentication key (password)"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication } // container bfd-liveness-detection } // list neighbor } // list group container graceful-restart { presence "enable graceful-restart"; description "RIP graceful restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } description "Time after which RIP is declared out of restart"; } } // container graceful-restart } // grouping juniper-protocols-rip grouping juniper-protocols-ripng { uses apply-advanced; container traceoptions { description "Trace options for RIPng"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace RIPng errors"; } enum "expiration" { value 1; description "Trace RIPng route expiration processing"; } enum "holddown" { value 2; description "Trace RIPng hold-down processing"; } enum "packets" { value 3; description "Trace all RIPng packets"; } enum "request" { value 4; description "Trace RIPng information packets"; } enum "trigger" { value 5; description "Trace RIPng triggered updates"; } enum "update" { value 6; description "Trace RIPng update packets"; } enum "nsr-synchronization" { value 7; description "Trace NSR synchronization events"; } enum "route" { value 8; description "Trace routing information"; } enum "normal" { value 9; description "Trace normal events"; } enum "general" { value 10; description "Trace general events"; } enum "state" { value 11; description "Trace state transitions"; } enum "policy" { value 12; description "Trace policy processing"; } enum "task" { value 13; description "Trace routing protocol task processing"; } enum "timer" { value 14; description "Trace routing protocol timer processing"; } enum "all" { value 15; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf metric-in { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Metric value to add to incoming routes"; } container send { description "Configure RIPng send options"; choice send-opts { leaf none { type empty; description "Do not send RIPng updates"; } } // choice send-opts } // container send container receive { description "Configure RIPng receive options"; choice receive-opts { leaf none { type empty; description "Do not receive RIPng packets"; } } // choice receive-opts } // container receive leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 180"; } } units "seconds"; description "Hold-down time"; } leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } list group { key "name"; ordered-by user; description "Instance configuration"; leaf name { type string { junos:posix-pattern "^.{1,48}$"; junos:pattern-message "Must be a string of at most 48 characters"; } description "Group name"; } uses apply-advanced; leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of routes learned by this group"; } leaf metric-out { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Default metric of exported routes"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } list neighbor { key "name"; ordered-by user; description "Neighbor configuration"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf route-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 360"; } } units "seconds"; description "Delay before routes time out"; } leaf update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 60"; } } units "seconds"; description "Interval between regular route updates"; } leaf metric-in { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Metric value to add to incoming routes"; } container send { description "Configure RIPng send options"; choice send-opts { leaf none { type empty; description "Do not send RIPng updates"; } } // choice send-opts } // container send container receive { description "Configure RIPng receive options"; choice receive-opts { leaf none { type empty; description "Do not receive RIPng packets"; } } // choice receive-opts } // container receive leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } } // list neighbor } // list group container graceful-restart { presence "enable graceful-restart"; description "RIPng graceful restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } description "Time after which RIPng is declared out of restart"; } } // container graceful-restart } // grouping juniper-protocols-ripng grouping juniper-protocols-router-discovery { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable router discovery"; } } // choice enable-disable container traceoptions { description "Trace options for router discovery"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Trace routing information"; } enum "normal" { value 1; description "Trace normal events"; } enum "general" { value 2; description "Trace general events"; } enum "state" { value 3; description "Trace state transitions"; } enum "policy" { value 4; description "Trace policy processing"; } enum "task" { value 5; description "Trace routing protocol task processing"; } enum "timer" { value 6; description "Trace routing protocol timer processing"; } enum "all" { value 7; description "Trace everything"; } } } } // list flag } // container traceoptions list interface { key "name"; ordered-by user; description "Interfaces on which to configure router discovery"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf max-advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "4 .. 1800"; } } units "seconds"; description "Maximum time before sending advertisements"; } leaf min-advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 1800"; } } units "seconds"; description "Minimum time before sending advertisements"; } leaf lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 9000"; } } units "seconds"; description "How long addresses in advertisements are valid"; } } // list interface list address { key "name"; ordered-by user; description "IP addresses to include in advertisements"; leaf name { type jt:ipv4addr; description "IP addresses to include in router advertisements"; } uses apply-advanced; leaf advertise { type empty; description "Advertise the IP address in advertisements"; } leaf ignore { type empty; description "Do not advertise the IP address in advertisements"; } leaf broadcast { type empty; description "Include IP address only in broadcast advertisements"; } leaf multicast { type empty; description "Include IP address only in multicast advertisements"; } leaf ineligible { type empty; description "IP address can never become a default router"; } leaf priority { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Preference of the address to become a default router"; } } // list address } // grouping juniper-protocols-router-discovery grouping juniper-protocols-rsvp { description "RSVP options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable RSVP"; } } // choice enable-disable container graceful-restart { description "Configure graceful restart attributes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable RSVP graceful restart capability"; } } // choice enable-disable leaf helper-disable { type empty; description "Disable graceful restart helper capability"; } leaf maximum-helper-restart-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } units "seconds"; default "20"; description "Maximum wait time from down event to neighbor dead"; } leaf maximum-helper-recovery-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3600"; } } units "seconds"; default "180"; description "Maximum time restarting neighbor states are kept"; } } // container graceful-restart container tunnel-services { presence "enable tunnel-services"; description "Use tunnel services for P2MP LSP ultimate-hop popping"; uses apply-advanced; leaf-list devices { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tunnel services devices to use for P2MP LSPs"; } } // container tunnel-services leaf no-p2mp-sublsp { type empty; description "Disable P2MP sub-LSP object generation"; } leaf no-node-id-subobject { type empty; description "Do not include the node-id sub-object in the RRO"; } leaf no-interface-hello { type empty; description "Disble interface Hellos on all RSVP interfaces"; } container pop-and-forward { description "RSVP pop-and-forward specific global parameters"; uses apply-advanced; container application-label { description "Number of application labels under the RSVP transport"; uses apply-advanced; leaf depth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3"; } } default "1"; description "Application label depth"; } } // container application-label } // container pop-and-forward leaf hello-acknowledgements { type empty; description "Acknowledge Hellos on RSVP interfaces not having sessions"; } leaf no-hello-acknowledgements { junos:must "(!("protocols rsvp hello-acknowledgements"))"; junos:must-message "Config hello-acknowledgements should be removed"; type empty; description "Do not ack Hellos on RSVP interfaces not having sessions"; } container node-hello { presence "enable node-hello"; description "Enable node-ID based Hellos on all RSVP interfaces"; leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 60"; } } units "seconds"; default "9"; description "Hello interval"; } } // container node-hello leaf no-node-hello { junos:must "(!("protocols rsvp node-hello"))"; junos:must-message "Config node-hello should be removed"; type empty; description "Disable node-ID based Hellos on the router"; } leaf allow-bidirectional { type empty; status deprecated; description "Enable bidirectional support in RSVP"; } leaf local-reversion { junos:must "(!("protocols rsvp no-local-reversion"))"; junos:must-message "Config no-local-reversion should be removed"; type empty; description "Enable local reversion at this Point of Local Repair"; } leaf no-local-reversion { type empty; description "Disable local reversion at this Point of Local Repair"; } leaf rfc6510-lsp-attributes { type empty; description "Use RFC6510 compliant LSP_ATTRIBUTES"; } container fast-reroute { description "One-to-one fast-reroute protection mechanism"; uses apply-advanced; leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 65535"; } } units "seconds"; description "Frequency of reoptimization for fast-reroute detour"; } } // container fast-reroute container load-balance { description "Per-packet load-balancing algorithm"; uses apply-advanced; leaf bandwidth { type empty; description "Per-packet load balancing proportional to LSP bandwidth"; } } // container load-balance container traceoptions { description "Trace options for RSVP"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "io-event" { value 0; description "Trace RSVP IO task related events"; } enum "io-packets" { value 1; description "Trace all RSVP periodic refresh activity"; } enum "packets" { value 2; description "Trace all RSVP trigger packets"; } enum "path" { value 3; description "Trace RSVP trigger path messages"; } enum "resv" { value 4; description "Trace RSVP trigger Resv messages"; } enum "pathtear" { value 5; description "Trace RSVP PathTear messages"; } enum "resvtear" { value 6; description "Trace RSVP ResvTear messages"; } enum "state" { value 7; description "Trace state transitions"; } enum "error" { value 8; description "Trace error conditions"; } enum "route" { value 9; description "Trace routing information"; } enum "lmp" { value 10; description "Trace RSVP-LMP related interactions"; } enum "event" { value 11; description "Trace RSVP related events"; } enum "nsr-synchronization" { value 12; description "Trace NSR synchronization events"; } enum "lsp-prefix" { value 13; description "Prefix the trace messages with LSP information"; } enum "enhanced-frr" { value 14; description "Enhanced FRR related information"; } enum "all" { value 15; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf refresh-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } default "1200"; description "Refresh time in seconds"; } leaf keep-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Keep multiplier"; } leaf graceful-deletion-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 300"; } } units "seconds"; default "30"; description "Time to complete graceful deletion signaling"; } leaf setup-protection { type empty; description "Enable setup protection"; } leaf no-p2mp-re-merge { type empty; description "Enable p2mp remerge"; } leaf cross-credibility-cspf { type empty; description "Compute CSPF paths spanning protocols for bypass LSP, detour LSP and loose hop expansion"; } container preemption { description "Set RSVP session preemption attributes"; uses apply-advanced; choice preemption-type { leaf disabled { type empty; description "No RSVP session preemption"; } leaf normal { type empty; description "Run RSVP session preemption to accommodate new sessions"; } leaf aggressive { type empty; description "Run RSVP session preemption whenever necessary"; } } // choice preemption-type container soft-preemption { description "Options for establishing new path before tearing down a preempted LSP"; uses apply-advanced; leaf cleanup-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 10800"; } } units "seconds"; description "Time a soft-preempted LSP will be maintained"; } } // container soft-preemption } // container preemption leaf authentication-key { type jt:unreadable; description "Authentication password"; } leaf no-authentication-check { type empty; description "Skip authentication check for received messages"; } container associated-bidirectional-lsp { description "Set associated bidirectional LSP attributes"; uses apply-advanced; leaf single-sided-provisioning { type empty; description "Enable unidirectional reverse LSP setup for single sided provisioned forward LSP"; } } // container associated-bidirectional-lsp leaf no-enhanced-frr-bypass { type empty; description "Disable enhanced facility backup FRR"; } container expand-flood-reflector-hop { presence "enable expand-flood-reflector-hop"; description "Control expansion of flood reflector ERO strict hops"; } // container expand-flood-reflector-hop list interface { key "name"; ordered-by user; description "RSVP interface options"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable RSVP on this interface"; } } // choice enable-disable leaf authentication-key { type jt:unreadable; description "Authentication password"; } choice aggregate-choice { leaf aggregate { type empty; status deprecated; description "Permit refresh reduction extensions on the interface"; } leaf no-aggregate { type empty; status deprecated; description "Don't permit refresh reduction extensions on the interface"; } } // choice aggregate-choice choice reliable-choice { leaf reliable { type empty; description "Permit reliable message delivery on the interface"; } leaf no-reliable { type empty; description "Don't permit reliable message delivery on the interface"; } } // choice reliable-choice leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 60"; } } units "seconds"; default "9"; description "Hello interval"; } container subscription { description "Link bandwidth percentage for RSVP reservation"; uses subscription-type; } // container subscription leaf bandwidth { type string; description "Available bandwidth for the interface units bps"; } container update-threshold { description "Change in reserved bandwidth to trigger IGP update"; uses apply-advanced; leaf threshold-percent { type decimal64 { fraction-digits 9; range "0.001 .. 20"; } units "percent"; default "10.0"; description "Percentage change in reserved bandwidth to trigger IGP update"; } leaf threshold-value { type string; description "Change in reserved bandwidth to trigger IGP update (will be capped at 20% of link BW)"; } } // container update-threshold container update-threshold-max-reservable { description "Change in non-rsvp bandwidth to trigger IGP update "; uses apply-advanced; leaf bandwidth { type string; description "Change in non-rsvp bandwidth to trigger IGP update units bps"; } leaf percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } units "percent"; description "Percentage change in max-reservable bandwidth to trigger IGP update"; } } // container update-threshold-max-reservable container non-rsvp-bandwdith { description "Config knobs relating to non-rsvp bandwidth"; uses apply-advanced; leaf local-bw-override-threshold { type empty; description "Overide threshold and update local bandwidth with non-rsvp bandwidth usage"; } } // container non-rsvp-bandwdith container link-protection { presence "enable link-protection"; description "Protect traffic with a label-stacked LSP"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable link protection on this interface"; } } // choice enable-disable container bandwidth { description "Bandwidth for each bypass"; uses bandwidth-type; } // container bandwidth leaf max-bypasses { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 99"; } } default "1"; description "Max number of bypasses permitted for protecting this interface"; } leaf subscription { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } default "100"; description "Percent of bandwidth guaranteed when admitting protected LSPs into bypasses"; } leaf no-node-protection { type empty; description "Disallow node protection on this interface"; } leaf optimize-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; default "0"; description "Interval between bypass reoptimizations"; } leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class of service for the bypass LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 255"; } } description "Maximum allowed router hops for bypass"; } leaf no-cspf { junos:must "(".. path")"; junos:must-message "The path of the bypass must be configured when using no-cspf"; type empty; description "Disable automatic path computation"; } leaf exclude-srlg { type empty; description "Exclude SRLG links"; } container priority { presence "enable priority"; description "Preemption priorities for the bypass LSP"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } list path { key "name"; ordered-by user; description "Explicit route of bypass path"; leaf name { type jt:ipv4addr; description "Address of next system in path"; } choice loose_strict_none { leaf loose { type empty; description "Next hop might not be adjacent"; } leaf strict { type empty; description "Next hop must be adjacent"; } } // choice loose_strict_none } // list path container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group list bypass { key "name"; ordered-by user; description "Bypass with specific constraints"; leaf name { type string { length "1 .. 64"; } description "Name of bypass"; } uses apply-advanced; leaf to { type jt:ipv4addr; description "Address of egress router"; } container bandwidth { description "Bandwidth for each bypass"; uses bandwidth-type; } // container bandwidth container subscription { presence "enable subscription"; description "Bandwidth percent available on bypass for protected LSPs"; uses bypass-subscription-type; } // container subscription leaf description { type string { length "1 .. 80"; } description "Text description of bypass"; } container priority { presence "enable priority"; description "Preemption priorities for bypass"; } // container priority leaf setup-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Set-up priority"; } leaf reservation-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Reservation priority"; } leaf class-of-service { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 7"; } } description "Class of service for the bypass LSP"; } leaf hop-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 255"; } } description "Maximum allowed router hops for bypass"; } leaf no-cspf { junos:must "(".. path")"; junos:must-message "The path of the bypass must be configured when using no-cspf"; type empty; description "Disable automatic path computation"; } leaf exclude-srlg { type empty; description "Exclude SRLG links"; } list path { key "name"; ordered-by user; description "Explicit route of bypass path"; leaf name { type jt:ipv4addr; description "Address of next system in path"; } choice loose_strict_none { leaf loose { type empty; description "Next hop might not be adjacent"; } leaf strict { type empty; description "Next hop must be adjacent"; } } // choice loose_strict_none } // list path container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group } // list bypass } // container link-protection } // list interface list peer-interface { key "name"; ordered-by user; description "Configuration for peer interface"; leaf name { type string; description "Name of peer interface"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable RSVP on this control peer"; } } // choice enable-disable leaf authentication-key { type jt:unreadable; description "Authentication password"; } choice aggregate-choice { leaf aggregate { type empty; status deprecated; description "Permit refresh reduction extensions on the interface"; } leaf no-aggregate { type empty; status deprecated; description "Don't permit refresh reduction extensions on the interface"; } } // choice aggregate-choice choice reliable-choice { leaf reliable { type empty; description "Permit reliable message delivery on the interface"; } leaf no-reliable { type empty; description "Don't permit reliable message delivery on the interface"; } } // choice reliable-choice leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 60"; } } units "seconds"; default "9"; description "Hello interval"; } container dynamic-bidirectional-transport { presence "enable dynamic-bidirectional-transport"; description "Enable dynamic setup of bidirectional packet LSP for transporting non-packet GMPLS LSP"; uses apply-advanced; leaf template { junos:must "(!("protocols mpls label-switched-path $$ p2mp"))"; junos:must-message "Referenced template cannot be a p2mp template"; junos:must "(("protocols mpls label-switched-path $$" && "protocols mpls label-switched-path $$ template"))"; junos:must-message "Referenced LSP template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Template for the dynamic bidirectional packet LSP"; } } // container dynamic-bidirectional-transport } // list peer-interface list lsp-set { key "name"; ordered-by user; description "Configuration for lsp set"; leaf name { type string; description "Name of lsp set"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable this lsp set"; } } // choice enable-disable container match-criteria { description "Match criteria for this lsp set"; uses lsp-set-match-type; } // container match-criteria container traceoptions { description "Trace options for this lsp set"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "io-event" { value 0; description "Trace RSVP IO task related events"; } enum "io-packets" { value 1; description "Trace all RSVP periodic refresh activity"; } enum "packets" { value 2; description "Trace all RSVP packets"; } enum "path" { value 3; description "Trace RSVP path messages"; } enum "resv" { value 4; description "Trace RSVP Resv messages"; } enum "pathtear" { value 5; description "Trace RSVP PathTear messages"; } enum "resvtear" { value 6; description "Trace RSVP ResvTear messages"; } enum "state" { value 7; description "Trace state transitions"; } enum "error" { value 8; description "Trace error conditions"; } enum "route" { value 9; description "Trace routing information"; } enum "lmp" { value 10; description "Trace RSVP-LMP related interactions"; } enum "event" { value 11; description "Trace RSVP related events"; } enum "nsr-synchronization" { value 12; description "Trace NSR synchronization events"; } enum "lsp-prefix" { value 13; description "Prefix the trace messages with LSP information"; } enum "enhanced-frr" { value 14; description "Enhanced FRR related information"; } enum "all" { value 15; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // list lsp-set } // grouping juniper-protocols-rsvp grouping bypass-subscription-type { uses apply-advanced; leaf subscription { type string; default "100"; description "Subscription percentage for bandwidth protection"; } } // grouping bypass-subscription-type grouping juniper-protocols-stp { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable STP"; } } // choice enable-disable leaf bpdu-destination-mac-address { type enumeration { enum "provider-bridge-group" { value 0; description "802.1ad provider bridge group address"; } } description "Destination MAC address in the spanning tree BPDUs"; } leaf bridge-priority { type string { junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)"; } leaf backup-bridge-priority { type string { junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 4k,8k,..60k)"; } leaf max-age { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "6 .. 40"; } } units "seconds"; description "Maximum age of received protocol bpdu"; } leaf hello-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 10"; } } units "seconds"; description "Time interval between configuration BPDUs"; } leaf forward-delay { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "4 .. 30"; } } units "seconds"; description "Time spent in listening or learning state"; } leaf system-identifier { type jt:mac-unicast; description "Sytem identifier to represent this node"; } container traceoptions { description "Tracing options for debugging protocol operation"; uses stp-trace-options; } // container traceoptions leaf vpls-flush-on-topology-change { type empty; description "Enable VPLS MAC flush on root protected CE interface receving topology change"; } leaf priority-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } units "seconds"; description "Hold time before switching to primary priority when core domain becomes up"; } list system-id { key "name"; ordered-by user; description "System ID to IP mapping"; uses system-id-ip-map; } // list system-id list interface { key "name"; description "Interface options"; uses stp-interface; } // list interface leaf extended-system-id { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 4095"; } } description "Extended system identifier"; } leaf force-version { type enumeration { enum "stp" { value 0; description "Spanning tree protocol"; } } description "Force protocol version"; } leaf bpdu-block-on-edge { type empty; description "Block BPDU on all interfaces configured as edge (BPDU Protect)"; } } // grouping juniper-protocols-stp grouping juniper-protocols-vstp { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable VSTP"; } } // choice enable-disable leaf force-version { type enumeration { enum "stp" { value 0; description "Spanning tree protocol"; } } description "Force protocol version"; } leaf bpdu-block-on-edge { type empty; description "Block BPDU on all interfaces configured as edge (BPDU Protect)"; } leaf vpls-flush-on-topology-change { type empty; description "Enable VPLS MAC flush on root protected CE interface receving topology change"; } leaf priority-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } units "seconds"; description "Hold time before switching to primary priority when core domain becomes up"; } list system-id { key "name"; ordered-by user; description "System ID to IP mapping"; uses system-id-ip-map; } // list system-id list interface { key "name"; description "Interface options"; uses stp-interface; } // list interface list vlan { key "name"; description "VLAN spanning tree options"; leaf name { type string; description "VLAN id or all"; } uses apply-advanced; leaf bridge-priority { type string { junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)"; } leaf backup-bridge-priority { type string { junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 4k,8k,..60k)"; } leaf max-age { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "6 .. 40"; } } units "seconds"; description "Maximum age of received protocol bpdu"; } leaf hello-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 10"; } } units "seconds"; description "Time interval between configuration BPDUs"; } leaf forward-delay { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "4 .. 30"; } } units "seconds"; description "Time spent in listening or learning state"; } leaf system-identifier { type jt:mac-unicast; description "Sytem identifier to represent this node"; } container traceoptions { description "Tracing options for debugging protocol operation"; uses stp-trace-options; } // container traceoptions list interface { key "name"; description "Interface options"; uses stp-interface; } // list interface } // list vlan container vlan-group { presence "enable vlan-group"; description "Spanning tree options for group of VLANs"; uses apply-advanced; list group { key "name"; ordered-by user; description "Name if VLAN group"; leaf name { type string { junos:posix-pattern "^[[:alpha:]][[:alnum:]_-]+$"; junos:pattern-message "Must be a string beginning with a letter and consisting of letters, numbers, dashes, and underscores"; length "1 .. 63"; } description "VLAN group name"; } uses apply-advanced; leaf-list vlan { type string; ordered-by user; description "VLAN ID or VLAN ID range [1..4094]"; } leaf bridge-priority { type string { junos:posix-pattern "^(0|4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 0,4k,8k,..60k)"; } leaf backup-bridge-priority { type string { junos:posix-pattern "^(4k|4096|8k|8192|12k|12288|16k|16384|20k|20480|24k|24576|28k|28672|32k|32768|36k|36864|40k|40960|44k|45056|48k|49512|52k|53248|56k|57344|60k|61440)$"; junos:pattern-message "Must be a multiple of 4096"; } description "Priority of the bridge (in increments of 4k - 4k,8k,..60k)"; } leaf max-age { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "6 .. 40"; } } units "seconds"; description "Maximum age of received protocol bpdu"; } leaf hello-time { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 10"; } } units "seconds"; description "Time interval between configuration BPDUs"; } leaf forward-delay { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "4 .. 30"; } } units "seconds"; description "Time spent in listening or learning state"; } leaf system-identifier { type jt:mac-unicast; description "Sytem identifier to represent this node"; } container traceoptions { description "Tracing options for debugging protocol operation"; uses stp-trace-options; } // container traceoptions list interface { key "name"; description "Interface options"; uses stp-interface; } // list interface } // list group } // container vlan-group } // grouping juniper-protocols-vstp grouping juniper-ri-protocols-bfd { uses apply-advanced; container sbfd { description "Seamless BFD parameters"; uses apply-advanced; leaf-list pool { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "List of seamless BFD endpoints"; } list local-discriminator { key "name"; ordered-by user; description "Local discriminator for seamless BFD responder"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Local discriminator for seamless BFD responder"; } uses apply-advanced; leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 255000"; } } units "milliseconds"; description "Minimum receive interval for seamless BFD responder"; } leaf local-ip-address { type jt:ipv4addr; description "IPv4 source address"; } } // list local-discriminator } // container sbfd } // grouping juniper-ri-protocols-bfd grouping juniper-ri-protocols-igmp-snooping { description "IGMP snooping options"; uses apply-advanced; container traceoptions { description "Trace options for IGMP Snooping"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all IGMP packets"; } enum "query" { value 1; description "Trace IGMP membership query messages"; } enum "report" { value 2; description "Trace membership report messages"; } enum "leave" { value 3; description "Trace leave group messages (IGMPv2 only)"; } enum "group" { value 4; description "Trace group operations"; } enum "client-notification" { value 5; description "Trace notifications"; } enum "host-notification" { value 6; description "Trace host notifications"; } enum "route" { value 7; description "Trace routing information"; } enum "normal" { value 8; description "Trace normal events"; } enum "general" { value 9; description "Trace general events"; } enum "state" { value 10; description "Trace state transitions"; } enum "policy" { value 11; description "Trace policy processing"; } enum "task" { value 12; description "Trace routing protocol task processing"; } enum "timer" { value 13; description "Trace routing protocol timer processing"; } enum "all" { value 14; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; default "125"; description "When to send host query messages"; } container l2-querier { description "Enable L2 querier mode"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Source IP address to use for L2 querier"; } } // container l2-querier leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "10"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "1"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } default "2"; description "Expected packet loss on a subnet"; } leaf learn-pim-router { type empty; description "Learn PIM router interfaces from PIM hellos"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv4addr; description "Source IP address to use for proxy"; } leaf irb { type empty; description "Proxy IGMP reports to IRB"; } } // container proxy list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(".. .. .. .. interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan"; type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan list vlan { key "name"; ordered-by user; description "Vlan options"; leaf name { junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Snooping cannot be enabled on secondary vlan"; type string { length "1 .. 64"; } description "VLAN name"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "((!(".. .. .. .. .. vlans ${vlan} vlan-id all") && !(".. .. .. .. .. vlans ${vlan} vlan-id inner-all")))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv4addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv4addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv4addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. igmp-snooping-options snoop-pseudowires" || " .. .. .. .. igmp-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for IGMP"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan } // list vlan } // grouping juniper-ri-protocols-igmp-snooping grouping juniper-ri-protocols-mld-snooping { description "MLD snooping options"; uses apply-advanced; container traceoptions { description "Trace options for MLD Snooping"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all MLD packets"; } enum "query" { value 1; description "Trace MLD membership query messages"; } enum "report" { value 2; description "Trace membership report messages"; } enum "leave" { value 3; description "Trace leave group messages (MLDv2 only)"; } enum "group" { value 4; description "Trace group operations"; } enum "client-notification" { value 5; description "Trace notifications"; } enum "host-notification" { value 6; description "Trace host notifications"; } enum "route" { value 7; description "Trace routing information"; } enum "normal" { value 8; description "Trace normal events"; } enum "general" { value 9; description "Trace general events"; } enum "state" { value 10; description "Trace state transitions"; } enum "policy" { value 11; description "Trace policy processing"; } enum "task" { value 12; description "Trace routing protocol task processing"; } enum "timer" { value 13; description "Trace routing protocol timer processing"; } enum "all" { value 14; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; default "125"; description "When to send host query messages"; } container l2-querier { description "Enable L2 querier mode"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Source IP address to use for L2 querier"; } } // container l2-querier leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "10"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; default "1"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } default "2"; description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv6addr; description "Source IP address to use for proxy"; } leaf irb { type empty; description "Proxy IGMP reports to IRB"; } } // container proxy list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(".. .. .. .. interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { junos:must "(!(".. .. .. .. vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, pseudowire-remote-address should be configured only under vlan"; type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan list vlan { key "name"; ordered-by user; description "Vlan options"; leaf name { junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Snooping cannot be enabled on secondary vlan"; type string { length "1 .. 64"; } description "Vlan of the bridge-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "((!(".. .. .. .. .. vlans ${vlan} vlan-id all") && !(".. .. .. .. .. vlans ${vlan} vlan-id inner-all")))"; junos:must-message "With qualified-learning source-address should be configured under Vlan options"; type jt:ipv6addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(!("interfaces $$-IFL vlan-tags inner-range"))"; junos:must-message "interface with vlan-tags inner-range should be specified in a learning-domain only"; junos:must "(!("interfaces $$-IFL vlan-id-range"))"; junos:must-message "interface with vlan-id-range should be specified in a learning-domain only"; junos:must "(!(".. .. .. .. .. vlans ${vlan} vlan-id all"))"; junos:must-message "When 'vlan-id all' is configured, interface should be configured only under vlan"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address list qualified-vlan { key "name"; ordered-by user; description "VLAN options for qualified-learning"; leaf name { junos:must "(".. .. .. .. .. vlans ${vlan} vlan-id all")"; junos:must-message "vlan specific configuration is allowed with qualified-learning only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1023"; } } description "VLAN ID of the learning-domain"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } units "seconds"; description "When to send host query messages"; } leaf query-response-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "How long to wait for a host query response"; } leaf query-last-member-interval { type string { junos:posix-pattern "^[0-9]{1,4}(.[0-9])?$"; junos:pattern-message "Up to 1 digit to right of decimal point"; } units "seconds"; description "When to send group query messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Source IP address to use for proxy"; } } // container proxy leaf evpn-ssm-reports-only { type empty; description "Accept and process only <s,g> reports of SSM groups"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { junos:must "(".. .. .. .. .. .. vlans ${vlan} interface $$")"; junos:must-message "interface options can be specified for the interfaces in the routing-instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } leaf host-only-interface { junos:must "(!(".. multicast-router-interface"))"; junos:must-message "interface cannot be both host-only and multicast-router"; type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Maximum number of (source,group) per interface"; } container static { description "Static group or source membership"; uses apply-advanced; list group { key "name"; ordered-by user; description "IP multicast group address"; leaf name { type jt:ipv6addr; description "IP multicast group address"; } uses apply-advanced; list source { key "name"; ordered-by user; description "IP multicast source address"; leaf name { type jt:ipv6addr; description "Source address of IP multicast data"; } uses apply-advanced; } // list source } // list group } // container static } // list interface list pseudowire-remote-address { junos:must "((" .. .. .. mld-snooping-options snoop-pseudowires" || " .. .. .. .. mld-snooping-options snoop-pseudowires"))"; junos:must-message "Configure pseudowire-remote-address only with snoop-pseudowires instance config"; key "name"; ordered-by user; description "Pseudowire interface options for MLD"; leaf name { type jt:ipv4addr; description "Pseudowire endpoint address"; } uses apply-advanced; leaf multicast-router-interface { type empty; description "Enabling multicast-router-interface on the interface"; } leaf immediate-leave { type empty; description "Enable immediate group leave on interfaces"; } } // list pseudowire-remote-address } // list qualified-vlan } // list vlan } // grouping juniper-ri-protocols-mld-snooping grouping juniper-routing-instance-switch-options { description "Bridge options for the routing instance"; uses apply-advanced; container mac-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC address forwarding table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } } description "Action when MAC limit is reached"; } } // container mac-table-size container mac-ip-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC+IP bindings table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings"; } } // container mac-ip-table-size container interface-mac-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC address learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit container interface-mac-ip-limit { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-ip-limit needs to be specified under switch-options for a virtual-switch instance"; description "Maximum MAC+IP bindings learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit container mac-notification { presence "enable mac-notification"; description "MAC notification options"; uses apply-advanced; leaf notification-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; default "30"; description "Interval for sending MAC notifications"; } } // container mac-notification leaf mac-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "seconds"; description "Delay for discarding MAC address if no updates are received"; } leaf no-mac-learning { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Disable dynamic MAC address learning"; } leaf no-normalization { type empty; description "Disable vlan id normalization for interfaces"; } leaf mac-statistics { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance"; type empty; description "Enable MAC address statistics"; } container mib { presence "enable mib"; description "Snmp mib options"; uses apply-advanced; container dot1q-mib { presence "enable dot1q-mib"; description "Dot1q MIB configuration options"; uses apply-advanced; leaf port-list { type enumeration { enum "bit-map" { value 0; description "Port list is represented in bit-map format"; } enum "string" { value 1; description "Port list is represented in string format"; } } description "Port list for staticegressports and staticuntaggedports MIB"; } } // container dot1q-mib } // container mib container static-rvtep-mac { description "Configure Static MAC and remote VxLAN tunnel endpoint entries"; uses apply-advanced; list mac { key "mac_addr remote-vtep"; description "Unicast MAC address"; leaf mac_addr { type jt:mac-unicast; } leaf remote-vtep { type jt:ipaddr; description "Configure static remote VXLAN tunnel endpoints"; } } // list mac } // container static-rvtep-mac leaf service-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Service ID required if multi-chassis AE is part of a bridge-domain"; } leaf ovsdb-managed { junos:must "(!("routing-instances ${instance} protocols evpn encapsulation vxlan"))"; junos:must-message "Not valid with protocols evpn encapsulation vxlan"; type empty; description "All vxlan bridge domains in routing instance are remote managed"; } list interface { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance"; key "name"; ordered-by user; description "Interface that connect this site to the VPN"; leaf name { junos:must "((".. .. .. interface $$" || "FALSE"))"; junos:must-message "Interface must be part of this routing instance"; junos:must "((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Interface must be part of this routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container interface-mac-limit { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; description "Maximum number of MAC addresses learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf disable { type empty; description "Disable interface for interface-mac-limit"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit leaf action-priority { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8"; } } description "Blocking priority of this interface on mac move detection"; } list static-mac { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; key "name"; ordered-by user; description "Static MAC addresses assigned to this interface"; leaf name { junos:must "((!("FALSE") || all ".. vlan-id <*>"))"; junos:must-message " Specify vlan-id for qualified learning "; type jt:mac-addr; description "MAC address"; } uses apply-advanced; list vlan-id { junos:must "("FALSE")"; junos:must-message "'vlan-id all' has to be configured for the bridging domain"; key "name"; ordered-by user; description "VLAN ID of learning VLAN"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Learning VLAN"; } uses apply-advanced; } // list vlan-id } // list static-mac container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf no-mac-learning { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf mac-pinning { type empty; description "Enable MAC pinning"; } leaf persistent-learning { junos:must "(!("switch-options mac-table-aging-time "))"; junos:must-message "Persistent learning can not co-exist with mac-table-aging-time"; type empty; description "Enable persistent MAC learning on this interface"; } } // list interface container traceoptions { description "Layer 2 trace options for this routing instance"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Type of operation or event to include in trace"; leaf name { type enumeration { enum "configuration" { value 0; description "Configuration operations"; } enum "routing-socket" { value 1; description "Routing socket operations"; } enum "interface-device" { value 2; description "Interface device operations"; } enum "interface-logical" { value 3; description "Logical interface operations"; } enum "interface-family" { value 4; description "Interface family operations"; } enum "bridging-domain" { value 5; description "Bridging domain operations"; } enum "bridge-interface" { value 6; description "Interface bridge operations"; } enum "learning-domain" { value 7; description "Learning domain operations"; } enum "ipc" { value 8; description "Inter-process communications operations"; } enum "mac-learning" { value 9; description "MAC address learning operations"; } enum "initialization" { value 10; description "Initialization operations"; } enum "flood-next-hop" { value 11; description "Flood next hop operations"; } enum "irb" { value 12; description "Integrated routing and bridging operations"; } enum "vpls-ping" { value 13; description "VPLS ping operations"; } enum "vpls-loop-prev" { value 14; description "VPLS loop prevention"; } enum "storm-control" { value 15; description "Storm-control"; } enum "unknown-unicast-forwarding" { value 16; description "Trace unknown unicast forwarding events"; } enum "vxlan" { value 17; description "VXLAN"; } enum "all" { value 18; description "All operations"; } } } } // list flag } // container traceoptions container voip { description "Voice-over-IP configuration"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Enable voice over IP on this port"; leaf name { type string; } uses apply-advanced; leaf vlan { junos:must "(!("vlans $$ vlan-range "))"; junos:must-message "Ranged vlan cannot be used by Voice-over-IP"; type string; description "VLAN for voice over IP"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Forwarding class"; } } // list interface } // container voip container unknown-unicast-forwarding { description "Set interface for forwarding of unknown unicast packets"; uses apply-advanced; list vlan { key "name"; description "VLAN for the unknown unicast packets"; leaf name { type string; description "VLAN name or VLAN Tag (1..4095)"; } uses apply-advanced; leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface to send unknown unicast packets for the VLAN"; } } // list vlan } // container unknown-unicast-forwarding } // grouping juniper-routing-instance-switch-options grouping juniper-routing-options { uses apply-advanced; container logical-system-mux { description "Logical system control daemon information"; uses apply-advanced; container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "debug" { value 0; description "Trace debug-level lrmuxd activities"; } enum "parse" { value 1; description "Trace configuration parsing"; } enum "route" { value 2; description "Trace routing information"; } enum "normal" { value 3; description "Trace normal events"; } enum "general" { value 4; description "Trace general events"; } enum "state" { value 5; description "Trace state transitions"; } enum "policy" { value 6; description "Trace policy processing"; } enum "task" { value 7; description "Trace routing protocol task processing"; } enum "timer" { value 8; description "Trace routing protocol timer processing"; } enum "all" { value 9; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container logical-system-mux container auto-bandwidth { presence "enable auto-bandwidth"; description "Auto bandwidth"; uses apply-advanced; list template { key "name"; ordered-by user; description "Auto bandwidth template"; leaf name { type string { length "1 .. 64"; } description "Auto bandwidth template name (Maximum length 64)"; } uses apply-advanced; leaf adjust-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 3600"; } } description "Adjust interval"; } leaf adjust-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } description "Percentage threshhold"; } leaf statistic-collection-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 300"; } } description "Collection interval"; } leaf auto-bandwidth-subscription { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 200"; } } description "Percentage threshhold for subscription"; } } // list template container traceoptions { description "Trace options for sr stats"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "all" { value 0; description "Trace All"; } enum "timer" { value 1; description "Trace traffic recv by periodic timer"; } enum "state" { value 2; description "Trace state of sensor"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container auto-bandwidth container backup-selection { presence "enable backup-selection"; description "Backup selection options"; uses apply-advanced; list destination { key "name"; description "IP/IPv6 prefix for which backup selection policy is configured"; leaf name { type jt:ipprefix-mandatory; description "IP/IPv6 address (and optional prefix length)"; } uses apply-advanced; list interface { key "name"; description "Primary nexthop interface for which backup selection policy is configured"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container admin-group { description "Administrative group policies for backup-selection"; uses apply-advanced; leaf-list exclude { type string; description "Do not use interface if any admin group available"; } leaf-list include-all { type string; description "Use interface if admin groups available entirely"; } leaf-list include-any { type string; description "Use interface if any admin group is available"; } leaf-list preference { type string; ordered-by user; description "Administrative groups in descending preference order"; } } // container admin-group leaf srlg { type enumeration { enum "loose" { value 0; description "Loose SRLG"; } enum "strict" { value 1; description "Strict SRLG"; } } default "loose"; description "Evaluate Shared Risk Link Group(SRLG) characteristics for backup selection"; } leaf protection-type { type enumeration { enum "link" { value 0; description "Protect the primary interface from link faults only"; } enum "node" { value 1; description "Protect the primary interface from node faults only"; } enum "node-link" { value 2; description "Protect the primary interface from either link or node faults; prefer node protection"; } } description "Type of protection to be considered"; } leaf downstream-paths-only { type empty; description "Choose only the downstream nodes for backup"; } leaf bandwidth-greater-equal-primary { type empty; description "Use backup nexthop only if bandwidth is >= bandwidth of primary nexthop"; } container backup-neighbor { description "Backup Neighbor ID based policies for backup selection"; uses apply-advanced; leaf-list exclude { type jt:ipv4addr; description "List of backup neighbors to be excluded"; } leaf-list preference { type jt:ipv4addr; ordered-by user; description "List of backup neighbors in descending order preference"; } } // container backup-neighbor container node { description "Node ID based policies for backup selection"; uses apply-advanced; leaf-list exclude { type jt:ipv4addr; description "List of nodes to be excluded"; } leaf-list preference { type jt:ipv4addr; ordered-by user; description "List of nodes in the descending order of preference"; } } // container node container node-tag { description "Node tag policies"; uses apply-advanced; leaf-list exclude { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "The set of node tags to be excluded"; } leaf-list preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "The set of node tags in the descending order of preference"; } } // container node-tag leaf root-metric { type enumeration { enum "lowest" { value 0; description "Choose lowest root metric"; } enum "highest" { value 1; description "Choose highest root metric"; } } description "Root metric"; } leaf dest-metric { type enumeration { enum "lowest" { value 0; description "Choose lowest destination metric"; } enum "highest" { value 1; description "Choose highest destination metric"; } } description "Destination metric"; } leaf-list metric-order { type enumeration { enum "root" { value 0; } enum "dest" { value 1; } } max-elements 2; ordered-by user; description "Metric evaluation order"; } leaf-list evaluation-order { type enumeration { enum "admin-group" { value 0; description "Administrative Group/Link Color"; } enum "srlg" { value 1; description "SRLG"; } enum "bandwidth" { value 2; description "Bandwidth"; } enum "protection-type" { value 3; description "Type of protection"; } enum "backup-neighbor" { value 4; description "Backup Neighbor"; } enum "node" { value 5; description "Node"; } enum "node-tag" { value 6; description "Node tag"; } enum "metric" { value 7; description "Metric related parameters"; } } ordered-by user; description "Interface policy criteria evaluation order"; } } // list interface } // list destination } // container backup-selection list flex-algorithm { key "name"; description "Configure flex-algorithms supported by this node."; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "128 .. 255"; } } description "Algorithm id"; } uses apply-advanced; container definition { description "Configure flex-algorithm definition."; uses apply-advanced; leaf metric-type { type enumeration { enum "igp-metric" { value 0; description "Metric configured to be used for IGP"; } enum "te-metric" { value 1; description "Traffic-engineering metric"; } enum "delay-metric" { value 2; description "Min unidirectional link delay metric"; } } } choice calculation-type { leaf spf { type empty; description "Normal SPF of type 0"; } leaf strict-spf { type empty; description "Strict SPF"; } } // choice calculation-type leaf use-flex-algorithm-prefix-metric { type empty; description "Set M flag in the flex-algorithm definition flags"; } leaf priority { junos:must "(!(".. no-advertise"))"; junos:must-message "Priority is relevant only if fad is advertised."; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Priority of the flex-algorithm advertisement."; } container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group } // container definition leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color to be associated with this flex-algorithm"; } leaf use-transport-class { junos:must "("routing-options transport-class auto-create")"; junos:must-message "Please enable auto-create under routing-options transport-class hierarchy"; type empty; description "Install ingress routes via transport class RIBs"; } } // list flex-algorithm container source-packet-routing { description "Source packet routing (SPRING)"; uses apply-advanced; list mapping-server-entry { key "name"; ordered-by user; description "Mapping server entry"; leaf name { type string { length "1 .. 64"; } description "Mapping server entry name"; } uses apply-advanced; list prefix-segment { key "name"; max-elements 64; ordered-by user; description "Prefix segment"; leaf name { type jt:ipprefix; description "Prefix segment prefix"; } uses apply-advanced; leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Prefix segment index"; } leaf attached { type empty; description "Set attached flag in IS-IS mapping server advertisement"; } leaf domain-wide-flooding { type empty; description "Set S-flag in IS-IS mapping server advertisement"; } leaf no-node-segment { type empty; description "Clear node segment flag in mapping server prefix segment"; } } // list prefix-segment list prefix-segment-range { key "name"; max-elements 64; ordered-by user; description "Prefix segment range"; leaf name { type string { length "1 .. 64"; } description "Prefix segment range name"; } uses apply-advanced; leaf start-prefix { type jt:ipprefix; description "Start prefix"; } leaf start-index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Start index"; } leaf size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } description "Size of prefix segment range"; } leaf attached { type empty; description "Set attached flag in IS-IS mapping server advertisement"; } leaf domain-wide-flooding { type empty; description "Set S-flag in IS-IS mapping server advertisement"; } leaf no-node-segment { type empty; description "Clear node segment flag in mapping server prefix segment"; } } // list prefix-segment-range } // list mapping-server-entry container srv6 { description "SRv6 source-packet-routing"; uses apply-advanced; list locator { key "name"; ordered-by user; leaf name { type string { length "1 .. 64"; } description "Locator entry name"; } uses apply-advanced; leaf algorithm { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Algorithm associated with this locator"; } leaf address { type jt:ipv6prefix; description "Configure Locator Service for SRv6"; } } // list locator leaf no-reduced-srh { type empty; description "SRv6 Encapsulation mode non reduced SRH"; } leaf transit-srh-insert { type empty; description "SRv6 SRH insert mode on transit"; } } // container srv6 } // container source-packet-routing leaf route-distinguisher-id { type jt:ipv4addr; description "Identifier used in route distinguishers for routing instances"; } list rib { key "name"; ordered-by user; description "Routing table options"; leaf name { type string; description "Routing table name"; } uses apply-advanced; container static { description "Static routes"; uses apply-advanced; leaf rib-group { type string; description "Routing table group"; } container defaults { description "Global route options"; uses apply-advanced; choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // container defaults list route { key "name"; ordered-by user; description "Static route"; leaf name { type jt:ipprefix; } uses apply-advanced; choice next_hop { leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } leaf reject { type empty; description "Drop packets to destination; send ICMP unreachables"; } leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf receive { type empty; description "Install a receive route for the destination"; } leaf next-table { type string { junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$"; junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>"; } description "Next hop to another table"; } } // choice next_hop list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf backup-pe-group { junos:must "(".. p2mp-lsp-next-hop")"; junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop"; type string; description "Multicast source redundancy group"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf neighbor { type jt:ipaddr; description "BFD neighbor address"; } leaf local-address { type jt:ipaddr; description "BFD local address (for multihop only)"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } leaf minimum-receive-ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "Minimum receive TTL below which to drop"; } } // container bfd-liveness-detection choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path list lsp-next-hop { key "name"; ordered-by user; description "LSP next hop"; uses lsp_nh_obj; } // list lsp-next-hop list p2mp-lsp-next-hop { key "name"; max-elements 1; ordered-by user; description "Point-to-multipoint LSP next hop"; uses lsp_nh_obj; } // list p2mp-lsp-next-hop container spring-te-lsp-next-hop { junos:must "("protocols source-packet-routing tunnel-tracking")"; junos:must-message "Please enable the tunnel-tracking under 'protocols source-packet-routing' hierarchy"; description "SPRING-TE LSP next hop"; uses springte_lsp_nh_obj; } // container spring-te-lsp-next-hop container p2mp-ldp-next-hop { description "Point-to-multipoint LDP LSP next hop"; uses p2mp_ldp_lsp_nh_obj; } // container p2mp-ldp-next-hop list static-lsp-next-hop { key "name"; ordered-by user; description "Static LSP next hop"; uses lsp_nh_obj; } // list static-lsp-next-hop } // list route container static-route { description "Static route Status"; leaf bfd-admin-down { type enumeration { enum "active" { value 0; description "Static route will be inactive on bfd-admin-down"; } enum "passive" { value 1; description "Static route will remain active on bfd-admin-down"; } } description "Static route State on BFD ADMIN DOWN"; } } // container static-route list route-target-filter { key "name"; ordered-by user; description "Route-target-filter route"; leaf name { type string { junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$"; junos:pattern-message "Use format 'x:y/len' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100 and len is a prefix length from 0 to 64"; length "1 .. 47"; } } uses apply-advanced; leaf-list neighbor { type jt:ipaddr-scoped; ordered-by user; description "BGP peers for filter"; } leaf-list group { type string; ordered-by user; description "BGP groups for filter"; } leaf local { type empty; description "Locally originated filter"; } } // list route-target-filter } // container static list martians { key "address choice-ident choice-value"; ordered-by user; description "Invalid routes"; uses martian_type; } // list martians container aggregate { description "Coalesced routes"; uses rib_aggregate_type; } // container aggregate container generate { description "Route of last resort"; uses rib_aggregate_type; } // container generate choice maximum-paths-type { container maximum-routes { status deprecated; description "Maximum number of routes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of routes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-routes container maximum-paths { description "Maximum number of paths"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of paths"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-paths } // choice maximum-paths-type container maximum-prefixes { description "Maximum number of prefixes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-prefixes container multipath { presence "enable multipath"; description "Protocol-independent load balancing"; uses apply-advanced; container vpn-unequal-cost { presence "enable vpn-unequal-cost"; description "Include VPN routes with unequal IGP metrics"; leaf equal-external-internal { type empty; description "Include external and internal VPN routes"; } } // container vpn-unequal-cost leaf as-path-compare { type empty; description "Compare AS path sequences in addition to AS path length"; } leaf preserve-nexthop-hierarchy { type empty; description "Force multipath to create List nexthop"; } } // container multipath container policy-multipath { description "Policy based multipath"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Import policy to create policy based multipath"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Policy-multipath route tracing."; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container policy-multipath container protect { description "Protocol-independent protection"; leaf core { type empty; description "Protect against unreachability to service-edge router"; } } // container protect container access { description "Access routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access route"; leaf name { type jt:ipprefix; description "IP address of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Metric value"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag2 string"; } } // list route } // container access container access-internal { description "Access-internal routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access-internal route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop } // list route } // container access-internal container bgp-static { description "Routes for BGP static advertisements"; uses apply-advanced; list route { key "name"; ordered-by user; description "BGP-static route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // list route } // container bgp-static container flow { description "Locally defined flow routing information"; uses apply-advanced; container validation { presence "enable validation"; description "Flow route validation options"; uses flow-validation; } // container validation list route { key "name"; ordered-by user; description "Flow route"; uses flow-route-inet6; } // list route container interface-group { description "Interface-group for applying flow-spec filter"; uses flow-interface-group; } // container interface-group leaf discard-action-for-unresolved-redir-addr { type empty; description "For action redirect IP if redirect address is unresolved install discard action filter"; } choice per-route-accounting-choice { leaf per-route-accounting { type empty; description "Enable traffic accounting per flowspec route"; } leaf no-per-route-accounting { type empty; description "Don't enable traffic accounting per flowspec route"; } } // choice per-route-accounting-choice } // container flow container label { presence "enable label"; description "Label processing"; uses apply-advanced; leaf-list allocation { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "'allocation' policy is valid only for 'instance-type vrf'"; type jt:policy-algebra; ordered-by user; description "Label allocation policy"; } leaf-list substitution { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "'substitution' policy is valid only for 'instance-type vrf'"; type jt:policy-algebra; ordered-by user; description "Label substitution policy"; } } // container label } // list rib container label { presence "enable label"; description "Label processing"; uses apply-advanced; leaf-list allocation { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "'allocation' policy is valid only for 'instance-type vrf'"; type jt:policy-algebra; ordered-by user; description "Label allocation policy"; } leaf-list substitution { junos:must "(".. .. .. instance-type vrf")"; junos:must-message "'substitution' policy is valid only for 'instance-type vrf'"; type jt:policy-algebra; ordered-by user; description "Label substitution policy"; } } // container label container options { description "Miscellaneous options"; uses apply-advanced; leaf no-send { type empty; status deprecated; description "Listen only; do not send protocol packets"; } leaf no-resolve { type empty; status deprecated; description "Do not use DNS name resolution"; } container syslog { description "Set system logging level"; uses apply-advanced; container level { description "Logging level"; leaf emergency { type empty; description "Emergency level"; } leaf alert { type empty; description "Alert level"; } leaf critical { type empty; description "Critical level"; } leaf error { type empty; description "Error level"; } leaf warning { type empty; description "Warning level"; } leaf notice { type empty; description "Notice level"; } leaf info { type empty; description "Informational level"; } leaf debug { type empty; description "Debugging level"; } } // container level leaf upto { type enumeration { enum "emergency" { value 0; description "Emergency level"; } enum "alert" { value 1; description "Alert level"; } enum "critical" { value 2; description "Critical level"; } enum "error" { value 3; description "Error level"; } enum "warning" { value 4; description "Warning level"; } enum "notice" { value 5; description "Notice level"; } enum "info" { value 6; description "Informational level"; } enum "debug" { value 7; description "Debugging level"; } } description "Log up to a particular logging level"; } } // container syslog leaf mark { type union { type int32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Periodically mark the trace file"; } } // container options container resolution { presence "enable resolution"; description "Route next-hop resolution options"; uses apply-advanced; leaf-list tracefilter { type jt:policy-algebra; ordered-by user; description "Filter policy"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "event" { value 0; description "Event processing"; } enum "flash" { value 1; description "Flash processing"; } enum "kernel" { value 2; description "Kernel communication"; } enum "indirect" { value 3; description "Indirect next-hop addition, change, or deletion"; } enum "task" { value 4; description "Task or job processing"; } enum "igp-frr" { value 5; description "IGP triggered FRR events"; } enum "igp-frr-extensive" { value 6; description "IGP triggered FRR Extensive events"; } enum "tunnel" { value 7; description "Resolver dynamic tunnel events"; } enum "all" { value 8; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions choice preserve-nexthop-hierarchy-choice { leaf preserve-nexthop-hierarchy { type empty; description "Preserve nexthop hierarchy when installing nexthop to forwarding plane"; } leaf no-preserve-nexthop-hierarchy { type empty; description "Don't preserve nexthop hierarchy when installing nexthop to forwarding plane"; } } // choice preserve-nexthop-hierarchy-choice list rib { key "name"; ordered-by user; description "Routing table resolution options"; leaf name { type string; description "Routing table name"; } uses apply-advanced; leaf-list resolution-family { type string; ordered-by user; description "Family of resultion tree"; } leaf-list resolution-ribs { type string; ordered-by user; description "Routing tables to use for default routing table family resolution"; } leaf-list inet-resolution-ribs { type string; ordered-by user; description "Routing tables to use for ipv4 family protocol-next-hop resolution"; } leaf-list inet6-resolution-ribs { type string; ordered-by user; description "Routing tables to use for ipv6 family protocol-next-hop resolution"; } leaf-list iso-resolution-ribs { type string; ordered-by user; description "Routing tables to use for iso family protocol-next-hop resolution"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } leaf-list inet-import { type jt:policy-algebra; ordered-by user; description "Import policy for IPV4 family resolution tree"; } leaf-list inet6-import { type jt:policy-algebra; ordered-by user; description "Import policy for IPV6 family resolution tree"; } leaf-list iso-import { type jt:policy-algebra; ordered-by user; description "Import policy for ISO family resolution tree"; } leaf-list inetcolor-import { type jt:policy-algebra; ordered-by user; description "Import policy for INETCOLOR family resolution tree"; } leaf-list inet6color-import { type jt:policy-algebra; ordered-by user; description "Import policy for INET6COLOR family resolution tree"; } } // list rib choice prefer-recursive-primary-path-choice { leaf prefer-recursive-primary-path { type empty; description "Prefer primary path to resolve nexthop during recursive-resolution"; } leaf no-prefer-recursive-primary-path { type empty; description "Don't prefer primary path to resolve nexthop during recursive-resolution"; } } // choice prefer-recursive-primary-path-choice list scheme { key "name"; ordered-by user; description "Nexthop resolution fallback"; leaf name { type string; description "Name the resolution scheme"; } uses apply-advanced; leaf-list resolution-ribs { junos:must "(!(".. transport-classes"))"; junos:must-message "resolution-ribs and transport-classes are mutually exclusive options"; type string; ordered-by user; description "Routing tables to use for nexthop resolution, in fallback order"; } leaf mapping-community { type jt:community; description "Community on service-route that maps to this transport"; } } // list scheme } // container resolution container interface-routes { description "Define routing table groups for interface routes"; uses apply-advanced; container rib-group { description "Routing table group"; uses rib_group_type; } // container rib-group list family { key "name"; ordered-by user; description "Address family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } container export { description "Control exportability of local routes"; uses apply-advanced; leaf point-to-point { type empty; description "Make point-to-point routes exportable"; } leaf lan { type empty; description "Make LAN routes exportable"; } } // container export } // list family } // container interface-routes leaf loopback-strict-disable { type empty; description "Completely disable lo0 host prefix when in admin-down state"; } container traceoptions { description "Global routing protocol trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "parse" { value 0; description "Trace configuration parsing"; } enum "regex-parse" { value 1; description "Trace regular-expression parsing"; } enum "config-internal" { value 2; description "Trace configuration internals"; } enum "nsr-synchronization" { value 3; description "Trace nonstop routing synchronization events"; } enum "condition-manager" { value 4; description "Trace condition manager events"; } enum "graceful-restart" { value 5; description "Trace Graceful Restart events"; } enum "session" { value 6; description "Trace Session ID allocations/deallocations"; } enum "hfrr-fsm" { value 7; description "Host FRR FSM events tracing"; } enum "hfrr-route" { value 8; description "Host FRR route events tracing"; } enum "statistics-id-group" { value 9; description "Trace Statistics ID Group operations"; } enum "route-record" { value 10; description "Trace route-record server-side events"; } enum "jvision-lsp" { value 11; description "Trace Jvision events and errors"; } enum "dyn-nh-template" { value 12; description "Dynamic nexthops template events tracing"; } enum "read-route" { value 13; description "Read route events tracing"; } enum "route" { value 14; description "Trace routing information"; } enum "normal" { value 15; description "Trace normal events"; } enum "general" { value 16; description "Trace general events"; } enum "state" { value 17; description "Trace state transitions"; } enum "policy" { value 18; description "Trace policy processing"; } enum "task" { value 19; description "Trace routing protocol task processing"; } enum "timer" { value 20; description "Trace routing protocol timer processing"; } enum "all" { value 21; description "Trace everything"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container topologies { junos:must "(!("routing-options no-multi-topology-routing"))"; junos:must-message "Multi topology routing is disabled"; description "Define routing topologies"; uses apply-advanced; list family { key "name"; ordered-by user; description "Address family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } } uses apply-advanced; list topology { key "name"; ordered-by user; description "Topology information"; leaf name { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Topology name"; } uses apply-advanced; } // list topology } // list family } // container topologies leaf router-id { type jt:ipv4addr; description "Router identifier"; } container autonomous-system { description "Autonomous system number"; leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf loops { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 10"; } } description "Maximum number of times this AS can be in an AS path"; } leaf asdot-notation { type empty; description "Use AS-Dot notation to display true 4 byte AS numbers"; } container independent-domain { presence "enable independent-domain"; description "Independent autonomous-system domain from master instance"; container no-attrset { presence "enable no-attrset"; description "Do not tunnel ce bgp attributes across provider network"; } // container no-attrset } // container independent-domain } // container autonomous-system container confederation { description "Confederation autonomous system number"; leaf confederation-as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf-list members { type string; ordered-by user; description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } } // container confederation leaf ipv6-router-id { type string; description "IPv6 router identifier"; } container graceful-restart { junos:must "(!("routing-options nonstop-routing"))"; junos:must-message "Graceful restart and Nonstop routing may not be enabled simultaneously"; presence "enable graceful-restart"; description "Graceful or hitless routing restart options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "120 .. 10000"; } } description "Maximum time for which router is in graceful restart"; } } // container graceful-restart container flow { description "Locally defined flow routing information"; uses apply-advanced; leaf firewall-install-disable { type empty; description "Disable installing flowspec firewall filters in dfwd "; } choice per-route-accounting-choice { leaf per-route-accounting { type empty; description "Enable traffic accounting per flowspec route"; } leaf no-per-route-accounting { type empty; description "Don't enable traffic accounting per flowspec route"; } } // choice per-route-accounting-choice container validation { presence "enable validation"; description "Flow route validation options"; uses flow-validation; } // container validation container interface-group { description "Interface-group for applying flow-spec filter"; uses flow-interface-group; } // container interface-group list route { key "name"; ordered-by user; description "Flow route"; uses flow-route-inet; } // list route leaf term-order { type enumeration { enum "legacy" { value 0; description "Legacy term order (default)"; } enum "standard" { value 1; description "RFC compliant term order"; } } description "Term evaluation order for flow routes"; } leaf discard-action-for-unresolved-redir-addr { type empty; description "For action redirect IP if redirect address is unresolved install discard action filter"; } } // container flow leaf no-soft-core { type empty; description "Disable soft assert to generate core and just log the event"; } leaf med-igp-update-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 600"; } } description "Delay (in minutes) in updating MED IGP for bgp groups with 'delay-med-update' "; } container bmp { presence "enable bmp"; description "BGP Monitoring Protocol (BMP) configuration"; uses apply-advanced; leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } container hold-down { presence "enable hold-down"; leaf hold-down-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 65535"; } } units "seconds"; description "Prevent re-establishment for this time"; } leaf flaps { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Number of flaps before damping"; } leaf period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 65535"; } } units "seconds"; description "Time period for flaps"; } } // container hold-down leaf initiation-message { type string { length "1 .. 255"; } description "User string sent with the initiation message"; } leaf local-address { type jt:ipaddr; description "Address of local end of BMP session"; } leaf local-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1024 .. 65535"; } } description "Local port for listening"; } leaf connection-mode { type enumeration { enum "active" { value 0; description "Initiate the connection"; } enum "passive" { value 1; description "Listen for the connection"; } } description "Specify active or passive"; } leaf priority { type enumeration { enum "low" { value 0; description "Lowest priority"; } enum "medium" { value 1; description "Medium priority"; } enum "high" { value 2; description "Highest priority"; } } description "Relative dispatch priority"; } leaf monitor { type enumeration { enum "enable" { value 0; description "Enable monitoring of BGP peer(s)"; } enum "disable" { value 1; description "Disable monitoring of BGP peer(s)"; } } description "Enable/Disable monitoring"; } container route-monitoring { description "Control route monitoring settings"; uses apply-advanced; leaf none { junos:must "((!(".. pre-policy") && (!(".. post-policy") && (!(".. rib-out") && !(".. loc-rib")))))"; junos:must-message "May not be configured with pre-policy or post-policy or rib-out or loc-rib"; type empty; description "Do not send route monitoring messages"; } leaf loc-rib { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured alone with bmp loc-rib monitoring"; type empty; description "Send local-rib route monitoring messages"; } container pre-policy { presence "enable pre-policy"; description "Send pre policy route monitoring messages"; leaf exclude-non-feasible { type empty; description "Exclude looped routes, etc"; } } // container pre-policy container post-policy { presence "enable post-policy"; description "Send post policy route monitoring messages"; leaf exclude-non-eligible { type empty; description "Exclude unresolved routes, etc."; } } // container post-policy container rib-out { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured alone with bmp rib-out monitoring"; presence "enable rib-out"; description "Send adj-ribs-out route monitoring messages"; leaf pre-policy { type empty; description "Send pre-policy adj-ribs-out route monitoring messages"; } leaf post-policy { type empty; description "Send post-policy adj-ribs-out route monitoring messages"; } } // container rib-out } // container route-monitoring leaf max-loc-rib-buffer-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 50"; } } description "Max number of loc-rib outstanding buffers before blocking"; } leaf station-address { type jt:ipaddr; description "Address/name of monitoring station"; } leaf routing-instance { type string; description "Routing-instance through which BMP station is reachable"; } leaf station-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Port of monitoring station"; } leaf statistics-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; description "Statistics message timer, 15-65535, or 0 for no messages"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Trace flag information"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all messages"; } enum "up" { value 1; description "Trace up messages"; } enum "down" { value 2; description "Trace down messages"; } enum "statistics" { value 3; description "Trace statistics messages"; } enum "route-monitoring" { value 4; description "Trace route monitoring messages"; } enum "event" { value 5; description "Trace major events, station establishment, errors, events"; } enum "error" { value 6; description "Trace error conditions"; } enum "write" { value 7; description "Trace writing of messages"; } enum "route" { value 8; description "Trace routing information"; } enum "normal" { value 9; description "Trace normal events"; } enum "general" { value 10; description "Trace general events"; } enum "state" { value 11; description "Trace state transitions"; } enum "policy" { value 12; description "Trace policy processing"; } enum "task" { value 13; description "Trace routing protocol task processing"; } enum "timer" { value 14; description "Trace routing protocol timer processing"; } enum "all" { value 15; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions list station { key "name"; description "Define a BMP station"; leaf name { type string; description "Station name"; } uses apply-advanced; leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } container hold-down { presence "enable hold-down"; leaf hold-down-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 65535"; } } units "seconds"; description "Prevent re-establishment for this time"; } leaf flaps { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Number of flaps before damping"; } leaf period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 65535"; } } units "seconds"; description "Time period for flaps"; } } // container hold-down leaf initiation-message { type string { length "1 .. 255"; } description "User string sent with the initiation message"; } leaf local-address { type jt:ipaddr; description "Address of local end of BMP session"; } leaf local-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1024 .. 65535"; } } description "Local port for listening"; } leaf connection-mode { type enumeration { enum "active" { value 0; description "Initiate the connection"; } enum "passive" { value 1; description "Listen for the connection"; } } description "Specify active or passive"; } leaf priority { type enumeration { enum "low" { value 0; description "Lowest priority"; } enum "medium" { value 1; description "Medium priority"; } enum "high" { value 2; description "Highest priority"; } } description "Relative dispatch priority"; } leaf monitor { type enumeration { enum "enable" { value 0; description "Enable monitoring of BGP peer(s)"; } enum "disable" { value 1; description "Disable monitoring of BGP peer(s)"; } } description "Enable/Disable monitoring"; } container route-monitoring { description "Control route monitoring settings"; uses apply-advanced; leaf none { junos:must "((!(".. pre-policy") && (!(".. post-policy") && (!(".. rib-out") && !(".. loc-rib")))))"; junos:must-message "May not be configured with pre-policy or post-policy or rib-out or loc-rib"; type empty; description "Do not send route monitoring messages"; } leaf loc-rib { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured alone with bmp loc-rib monitoring"; type empty; description "Send local-rib route monitoring messages"; } container pre-policy { presence "enable pre-policy"; description "Send pre policy route monitoring messages"; leaf exclude-non-feasible { type empty; description "Exclude looped routes, etc"; } } // container pre-policy container post-policy { presence "enable post-policy"; description "Send post policy route monitoring messages"; leaf exclude-non-eligible { type empty; description "Exclude unresolved routes, etc."; } } // container post-policy container rib-out { junos:must "((!("system processes routing bgp update-threading") || "system processes routing bgp rib-sharding"))"; junos:must-message "Update threading can't be configured alone with bmp rib-out monitoring"; presence "enable rib-out"; description "Send adj-ribs-out route monitoring messages"; leaf pre-policy { type empty; description "Send pre-policy adj-ribs-out route monitoring messages"; } leaf post-policy { type empty; description "Send post-policy adj-ribs-out route monitoring messages"; } } // container rib-out } // container route-monitoring leaf max-loc-rib-buffer-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 50"; } } description "Max number of loc-rib outstanding buffers before blocking"; } leaf station-address { type jt:ipaddr; description "Address/name of monitoring station"; } leaf routing-instance { type string; description "Routing-instance through which BMP station is reachable"; } leaf station-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Port of monitoring station"; } leaf statistics-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; description "Statistics message timer, 15-65535, or 0 for no messages"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Trace flag information"; leaf name { type enumeration { enum "packets" { value 0; description "Trace all messages"; } enum "up" { value 1; description "Trace up messages"; } enum "down" { value 2; description "Trace down messages"; } enum "statistics" { value 3; description "Trace statistics messages"; } enum "route-monitoring" { value 4; description "Trace route monitoring messages"; } enum "event" { value 5; description "Trace major events, station establishment, errors, events"; } enum "error" { value 6; description "Trace error conditions"; } enum "write" { value 7; description "Trace writing of messages"; } enum "route" { value 8; description "Trace routing information"; } enum "normal" { value 9; description "Trace normal events"; } enum "general" { value 10; description "Trace general events"; } enum "state" { value 11; description "Trace state transitions"; } enum "policy" { value 12; description "Trace policy processing"; } enum "task" { value 13; description "Trace routing protocol task processing"; } enum "timer" { value 14; description "Trace routing protocol timer processing"; } enum "all" { value 15; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // list station } // container bmp leaf bgp-orf-cisco-mode { type empty; description "Using BGP ORF capability code 130 and Prefix ORF type 128"; } leaf highwatermark-log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 1200"; } } units "seconds"; description "High watermark log interval (default 30 seconds)"; } leaf time-averaged-watermark-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } units "days"; description "For calculating average watermark"; } container ppm { presence "enable ppm"; description "Set periodic packet management properties"; uses apply-advanced; leaf delegate-processing { type empty; status deprecated; description "Enable distribution of PPM sessions"; } leaf no-delegate-processing { type empty; description "Disable PPM sessions distribution"; } leaf redistribution-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 120"; } } description "Time to wait after switchover before starting timers"; } } // container ppm leaf no-bfd-triggered-local-repair { type empty; description "Disable bfd triggered local repair"; } leaf maximum-ecmp { type enumeration { enum "16" { value 0; description "Maximum 16 ECMP routes"; } enum "32" { value 1; description "Maximum 32 ECMP routes"; } enum "64" { value 2; description "Maximum 64 ECMP routes"; } enum "96" { value 3; description "Maximum 96 ECMP routes"; } enum "128" { value 4; description "Maximum 128 ECMP routes"; } enum "160" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 5; description "Maximum 160 ECMP routes"; } enum "192" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 6; description "Maximum 192 ECMP routes"; } enum "224" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 7; description "Maximum 224 ECMP routes"; } enum "256" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 8; description "Maximum 256 ECMP routes"; } enum "288" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 9; description "Maximum 288 ECMP routes"; } enum "320" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 10; description "Maximum 320 ECMP routes"; } enum "352" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 11; description "Maximum 352 ECMP routes"; } enum "384" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 12; description "Maximum 384 ECMP routes"; } enum "416" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 13; description "Maximum 416 ECMP routes"; } enum "448" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 14; description "Maximum 448 ECMP routes"; } enum "480" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 15; description "Maximum 480 ECMP routes"; } enum "512" { junos:must "(!("system processes routing force-32-bit"))"; junos:must-message "32-bit rpd doesn't support ecmp greater than 128"; value 16; description "Maximum 512 ECMP routes"; } } description "Maximum ECMP limit for nexthops"; } container static { description "Static routes"; uses apply-advanced; leaf rib-group { type string; description "Routing table group"; } container defaults { description "Global route options"; uses apply-advanced; choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // container defaults list route { key "name"; ordered-by user; description "Static route"; leaf name { type jt:ipprefix; } uses apply-advanced; choice next_hop { leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } leaf reject { type empty; description "Drop packets to destination; send ICMP unreachables"; } leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf receive { type empty; description "Install a receive route for the destination"; } leaf next-table { type string { junos:posix-pattern "^(((.{0,128})[:](.{1,128})[.]|((.{1,128})[.]))?([a-z]|[0-9]|[-_])+[.]((1?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])))$"; junos:pattern-message "Must match the format [<instance-name>[:<topology-name>].]<family-name>.<rib-id>"; } description "Next hop to another table"; } } // choice next_hop list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf backup-pe-group { junos:must "(".. p2mp-lsp-next-hop")"; junos:must-message "Backup groups only allowed for static routes with p2mp lsp next-hop"; type string; description "Multicast source redundancy group"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf neighbor { type jt:ipaddr; description "BFD neighbor address"; } leaf local-address { type jt:ipaddr; description "BFD local address (for multihop only)"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } leaf minimum-receive-ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "Minimum receive TTL below which to drop"; } } // container bfd-liveness-detection choice retain-choice { leaf retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Always keep route in forwarding table"; } leaf no-retain { junos:must "(!(".. resolve"))"; junos:must-message "Must not specify resolve with retain"; type empty; description "Don't always keep route in forwarding table"; } } // choice retain-choice choice install-choice { leaf install { type empty; description "Install route into forwarding table"; } leaf no-install { type empty; description "Don't install route into forwarding table"; } } // choice install-choice choice readvertise-choice { leaf readvertise { type empty; description "Mark route as eligible to be readvertised"; } leaf no-readvertise { type empty; description "Don't mark route as eligible to be readvertised"; } } // choice readvertise-choice choice resolve-choice { leaf resolve { type empty; description "Allow resolution of indirectly connected next hops"; } leaf no-resolve { type empty; description "Don't allow resolution of indirectly connected next hops"; } } // choice resolve-choice choice longest-match-choice { leaf longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Always use longest prefix match to resolve next hops"; } leaf no-longest-match { junos:must "(".. resolve")"; junos:must-message "Requires resolve to be configured"; type empty; description "Don't always use longest prefix match to resolve next hops"; } } // choice longest-match-choice choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path list lsp-next-hop { key "name"; ordered-by user; description "LSP next hop"; uses lsp_nh_obj; } // list lsp-next-hop list p2mp-lsp-next-hop { key "name"; max-elements 1; ordered-by user; description "Point-to-multipoint LSP next hop"; uses lsp_nh_obj; } // list p2mp-lsp-next-hop container spring-te-lsp-next-hop { junos:must "("protocols source-packet-routing tunnel-tracking")"; junos:must-message "Please enable the tunnel-tracking under 'protocols source-packet-routing' hierarchy"; description "SPRING-TE LSP next hop"; uses springte_lsp_nh_obj; } // container spring-te-lsp-next-hop container p2mp-ldp-next-hop { description "Point-to-multipoint LDP LSP next hop"; uses p2mp_ldp_lsp_nh_obj; } // container p2mp-ldp-next-hop list static-lsp-next-hop { key "name"; ordered-by user; description "Static LSP next hop"; uses lsp_nh_obj; } // list static-lsp-next-hop } // list route container static-route { description "Static route Status"; leaf bfd-admin-down { type enumeration { enum "active" { value 0; description "Static route will be inactive on bfd-admin-down"; } enum "passive" { value 1; description "Static route will remain active on bfd-admin-down"; } } description "Static route State on BFD ADMIN DOWN"; } } // container static-route list route-target-filter { key "name"; ordered-by user; description "Route-target-filter route"; leaf name { type string { junos:posix-pattern "^[0-9.]{1,15}L?:[0-9]{1,10}/([0-9]|[2-5][0-9]|6[0-4])$"; junos:pattern-message "Use format 'x:y/len' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100 and len is a prefix length from 0 to 64"; length "1 .. 47"; } } uses apply-advanced; leaf-list neighbor { type jt:ipaddr-scoped; ordered-by user; description "BGP peers for filter"; } leaf-list group { type string; ordered-by user; description "BGP groups for filter"; } leaf local { type empty; description "Locally originated filter"; } } // list route-target-filter } // container static list martians { key "address choice-ident choice-value"; ordered-by user; description "Invalid routes"; uses martian_type; } // list martians container aggregate { description "Coalesced routes"; uses rib_aggregate_type; } // container aggregate container generate { description "Route of last resort"; uses rib_aggregate_type; } // container generate choice maximum-paths-type { container maximum-routes { status deprecated; description "Maximum number of routes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of routes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-routes container maximum-paths { description "Maximum number of paths"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of paths"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-paths } // choice maximum-paths-type container maximum-prefixes { description "Maximum number of prefixes"; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Maximum number of prefixes"; } choice log_type { leaf threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to start generating warnings"; } leaf log-only { type empty; description "Generate warning messages only"; } } // choice log_type leaf log-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 86400"; } } units "seconds"; description "Minimum interval between log messages"; } } // container maximum-prefixes container multipath { presence "enable multipath"; description "Protocol-independent load balancing"; uses apply-advanced; container vpn-unequal-cost { presence "enable vpn-unequal-cost"; description "Include VPN routes with unequal IGP metrics"; leaf equal-external-internal { type empty; description "Include external and internal VPN routes"; } } // container vpn-unequal-cost leaf as-path-compare { type empty; description "Compare AS path sequences in addition to AS path length"; } leaf preserve-nexthop-hierarchy { type empty; description "Force multipath to create List nexthop"; } } // container multipath container policy-multipath { description "Policy based multipath"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Import policy to create policy based multipath"; } container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "route" { value 0; description "Policy-multipath route tracing."; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions } // container policy-multipath container protect { description "Protocol-independent protection"; leaf core { type empty; description "Protect against unreachability to service-edge router"; } } // container protect container access { description "Access routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access route"; leaf name { type jt:ipprefix; description "IP address of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Metric value"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag2 string"; } } // list route } // container access container access-internal { description "Access-internal routes"; uses apply-advanced; list route { key "name"; ordered-by user; description "Access-internal route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; leaf-list next-hop { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next hop to destination"; } list qualified-next-hop { key "name"; ordered-by user; description "Next hop with qualifiers"; uses qualified_nh_obj; } // list qualified-next-hop } // list route } // container access-internal container bgp-static { description "Routes for BGP static advertisements"; uses apply-advanced; list route { key "name"; ordered-by user; description "BGP-static route"; leaf name { type jt:ipprefix; description "IP address and optional prefix length of destination"; } uses apply-advanced; container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path } // list route } // container bgp-static list rib-groups { key "name"; ordered-by user; description "Group of routing tables"; uses rpd_rib_group_type; } // list rib-groups leaf route-record { type empty; description "Enable route recording"; } leaf-list instance-import { type jt:policy-algebra; ordered-by user; description "Import policy for instance RIBs"; } leaf-list instance-export { type jt:policy-algebra; ordered-by user; description "Export policy for instance RIBs"; } container auto-export { presence "enable auto-export"; description "Export routes between routing instances"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable auto-export"; } } // choice enable-disable container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "export" { value 0; description "Export processing"; } enum "route" { value 1; description "Trace routing information"; } enum "normal" { value 2; description "Trace normal events"; } enum "general" { value 3; description "Trace general events"; } enum "state" { value 4; description "Trace state transitions"; } enum "policy" { value 5; description "Trace policy processing"; } enum "task" { value 6; description "Trace routing protocol task processing"; } enum "timer" { value 7; description "Trace routing protocol timer processing"; } enum "all" { value 8; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container family { container inet { description "IPv4 parameters"; uses export-af-obj; } // container inet container inet6 { description "IPv6 parameters"; uses export-af-obj; } // container inet6 container iso { description "ISO parameters"; uses export-af-obj; } // container iso } // container family } // container auto-export container transport-class { junos:must "("routing-options route-distinguisher-id")"; junos:must-message "transport classes use auto-rd. Please configure route-distinguisher-id"; presence "enable transport-class"; description "Transport layer options"; uses apply-advanced; leaf auto-create { type empty; description "Auto create on color discovery"; } list name { key "name"; ordered-by user; description "Transport layer collecting Tunnels with similar characteristics"; leaf name { type string; description "Transport class name"; } uses apply-advanced; leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color(0..4294967295). This auto derives the Mapping Community and Route Target"; } } // list name } // container transport-class container dynamic-tunnels { description "Dynamic tunnel definitions"; uses apply-advanced; list tunnel-attributes { key "name"; ordered-by user; description "Dynamic tunnel attributes definition"; leaf name { type string { junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)"; junos:pattern-message "Tunnel attribute name is a string consisting of up to 63 letters, numbers, dashes, and underscores"; } description "Dynamic Tunnel attribute name"; } uses apply-advanced; leaf dynamic-tunnel-source-prefix { junos:must "(".. dynamic-tunnel-type V4oV6")"; junos:must-message "Tunnel source address, only valid for V4oV6 tunnel type"; type jt:ipaddr; description "Tunnel source address"; } leaf dynamic-tunnel-type { type enumeration { enum "GRE" { value 0; description "Tunnel type GRE"; } enum "V4oV6" { value 1; description "Tunnel type is IPV4oIPV6"; } enum "UDP" { value 2; description "Tunnel type UDP"; } enum "BGP-SIGNAL" { value 3; description "Tunnel type BGP-SIGNAL"; } } } leaf dynamic-tunnel-mtu { junos:must "(".. dynamic-tunnel-type V4oV6")"; junos:must-message "Only supported for tunnel type V4oV6"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "296 .. 9232"; } } description "Dynamic Tunnel MTU value"; } leaf dynamic-tunnel-anchor-pfe { type string { junos:posix-pattern "^(pfe-)[1-9]?[0-9]/[1-9]?[0-9]/[1-9]?[0-9]$"; junos:pattern-message "Must be a PFE interface of form pfe-x/y/z"; } description "Dynamic Tunnel anchor PFE name of format pfe-x/y/z"; } leaf dynamic-tunnel-anti-spoof { junos:must "(".. dynamic-tunnel-type V4oV6")"; junos:must-message "Only supported for tunnel type V4oV6"; type enumeration { enum "on" { value 0; description "Enable antispoofing check. Default is enabled"; } enum "off" { value 1; description "Disable antispoofing check"; } } } leaf dynamic-tunnel-reassembly { junos:must "(".. dynamic-tunnel-type V4oV6")"; junos:must-message "Only supported for tunnel type V4oV6"; type enumeration { enum "on" { value 0; description "Enable reassembly check. Default is disabled"; } enum "off" { value 1; description "Disable reassembly check"; } } } } // list tunnel-attributes list forwarding-rib { key "name"; ordered-by user; description "Forwarding routing table for dynamic-tunnel"; leaf name { type string; description "Routing table name"; } uses apply-advanced; leaf-list inet-import { type jt:policy-algebra; ordered-by user; description "Import policy for V4 dynamic-tunnel"; } } // list forwarding-rib container statistics { description "Fetch traffic statistics for dynamic tunnels"; uses apply-advanced; leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } units "seconds"; description "Time after which statistics has to be fetched"; } } // container statistics container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "kernel" { value 0; description "Trace kernel communication"; } enum "tunnel" { value 1; description "Trace tunnel addition, change, or deletion"; } enum "task" { value 2; description "Trace task or job processing"; } enum "tunnel-event" { value 3; description "Trace create, delete, up, down event for nh based tunnel"; } enum "flash-event" { value 4; description "Trace flash event for tunnel forwarding route"; } enum "stats-job" { value 5; description "Trace taffic statistics job related stuff"; } enum "all" { value 6; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf gre { type enumeration { enum "next-hop-based-tunnel" { value 0; description "Enable nh base dynamic-tunnel"; } } description "Enable dynamic gre tunnel mode"; } list dynamic-tunnel { key "name"; ordered-by user; uses dynamic_tunnel_type; } // list dynamic-tunnel } // container dynamic-tunnels list interface { key "name"; ordered-by user; description "Direct/Host route FRR protection"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf arp-prefix-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Max ARP/Host FRR routes allowed"; } leaf supplementary-blackout-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "ARP plimit blackout timer = kernel ARP timeout + supplementary-blackout-timer minutes."; } choice protection-type { leaf link-protection { type empty; description "Protect interface from link faults only"; } } // choice protection-type } // list interface container host-fast-reroute { presence "enable host-fast-reroute"; description "Host Fast Re-route global values. Applies to all host FRR profiles."; uses apply-advanced; leaf global-arp-prefix-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Max ARP/Host FRR routes allowed per protected IFL"; } leaf global-supplementary-blackout-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "ARP plimit global blackout timer = kernel ARP timeout + global-supplementary-blackout-timer minutes."; } } // container host-fast-reroute leaf warm-standby { junos:must "(!("routing-options nonstop-routing"))"; junos:must-message "Warm standby and Nonstop routing cannot be enabled simultaneously"; type empty; description "Enable warm-standby"; } leaf nonstop-routing { type empty; description "Enable nonstop routing"; } container nonstop-routing-options { presence "enable nonstop-routing-options"; description "Nonstop routing options"; uses apply-advanced; leaf precision-timers-max-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } description "Set Max period for precision timer support from kernel after switchover"; } } // container nonstop-routing-options leaf nsr-phantom-holdtime { junos:must "("routing-options nonstop-routing")"; junos:must-message "Nonstop routing must be enabled"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } description "Set NSR phantom route hold time"; } list srlg { key "name"; ordered-by user; description "SRLG configuration"; leaf name { type string { length "1 .. 64"; } description "Group name"; } uses apply-advanced; leaf srlg-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Group id"; } leaf srlg-cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Cost value"; } } // list srlg container admin-groups-extended-range { description "Extended administrative groups range"; uses apply-advanced; leaf minimum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 4294967295"; } } description "Minimum value of the range for extended administrative groups"; } leaf maximum { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 4294967295"; } } description "Maximum value of the range for extended administrative groups"; } } // container admin-groups-extended-range list admin-groups-extended { junos:must "(".. admin-groups-extended-range")"; junos:must-message "admin-groups-extended-range must be configured with admin-groups-extended"; key "name"; ordered-by user; description "Extended administrative groups"; leaf name { type string { length "1 .. 64"; } description "Group name (Maximum length 64)"; } uses apply-advanced; leaf group-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 4294967295"; } } description "Group id"; } } // list admin-groups-extended container source-routing { description "Source-routing options"; uses apply-advanced; leaf ip { type empty; description "Enable IP Source Routing"; } leaf ipv6 { type empty; description "Enable Type 0 RouteHeader processing"; } } // container source-routing container forwarding-table { uses forwarding-table-type; } // container forwarding-table container fate-sharing { description "Fate-sharing links or nodes database"; uses apply-advanced; list group { key "name"; ordered-by user; description "Group of objects sharing common characteristics"; leaf name { type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of <= 32 characters"; } description "Name of object groups sharing the same fate"; } uses apply-advanced; leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Cost value"; } leaf use-for-post-convergence-lfa { type empty; description "Use this fate-sharing group as a constraint for post-convergence-lfa"; } list from { key "name"; uses fate_sharing_links; } // list from } // list group } // container fate-sharing container multicast { description "Global multicast options"; uses apply-advanced; container traceoptions { description "Global multicast trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "parse" { value 0; description "Trace configuration parsing"; } enum "config-internal" { value 1; description "Trace configuration internals"; } enum "route" { value 2; description "Trace routing information"; } enum "normal" { value 3; description "Trace normal events"; } enum "general" { value 4; description "Trace general events"; } enum "state" { value 5; description "Trace state transitions"; } enum "policy" { value 6; description "Trace policy processing"; } enum "task" { value 7; description "Trace routing protocol task processing"; } enum "timer" { value 8; description "Trace routing protocol timer processing"; } enum "all" { value 9; description "Trace everything"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf rpf { type string; status deprecated; } list scope { key "name"; ordered-by user; description "Multicast address scope"; leaf name { type string; description "Name to identify multicast address scope"; } uses apply-advanced; leaf prefix { type jt:ipprefix; description "Administratively scoped address"; } leaf-list interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface on which to configure scoping"; } } // list scope leaf-list scope-policy { type jt:policy-algebra; ordered-by user; description "Scoping policy"; } list flow-map { key "name"; ordered-by user; description "Multicast flow map configuration"; leaf name { type string; description "Name of the flow map"; } uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Policy for matched flows"; } container bandwidth { presence "enable bandwidth"; description "Bandwidth properties for matched flows"; leaf bandwidth-value { type string; units "bps"; description "Static or default bandwidth for the matched flows"; } leaf adaptive { type empty; description "Auto-sense bandwidth for matched flows"; } } // container bandwidth leaf-list redundant-sources { junos:must "(".. bandwidth adaptive")"; junos:must-message "redundant-sources can only be configured together with 'bandwidth adaptive'"; type jt:ipaddr; ordered-by user; description "Redundant source addresses"; } container forwarding-cache { description "Forwarding cache properties for matched flows"; uses apply-advanced; container timeout { description "Timeout properties for matched flows"; choice timeout_choice { leaf timeout-value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 720"; } } units "minutes"; description "Timeout for forwarding cache entry"; } container never { presence "enable never"; description "Forwarding cache entries never time out"; uses apply-advanced; leaf non-discard-entry-only { type empty; description "Apply only to non-discard entries"; } } // container never } // choice timeout_choice } // container timeout } // container forwarding-cache } // list flow-map leaf-list resolve-filter { type jt:policy-algebra; ordered-by user; status deprecated; description "Multicast resolve policy filter"; } leaf-list ssm-groups { type jt:ipprefix; ordered-by user; description "Source-specific multicast group ranges"; } leaf cont-stats-collection-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "60 .. 3600"; } } default "300"; description "IGMP/MLD continuous statistics collection interval"; } leaf asm-override-ssm { type empty; description "Allow ASM state for SSM group ranges"; } leaf-list rpf-check-policy { type jt:policy-algebra; ordered-by user; description "Disable RPF check for a source group pair"; } container pim-to-igmp-proxy { description "PIM-to-IGMP proxy"; uses apply-advanced; leaf-list upstream-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } max-elements 2; ordered-by user; description "Upstream interface list"; } } // container pim-to-igmp-proxy container pim-to-mld-proxy { description "PIM-to-MLD proxy"; uses apply-advanced; leaf-list upstream-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } max-elements 2; ordered-by user; description "Upstream interface list"; } } // container pim-to-mld-proxy container forwarding-cache { description "Multicast forwarding cache"; uses apply-advanced; leaf allow-maximum { type empty; description "Allow maximum of global and family level threshold values for suppress and reuse"; } list family { junos:must "((!(".. threshold") || ".. allow-maximum"))"; junos:must-message "Family threshold cannot be configured if global threshold is already configured"; key "name"; ordered-by user; description "Protocol family"; leaf name { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet6" { value 1; description "IPv6 family"; } } description "Protocol family"; } uses apply-advanced; container threshold { presence "enable threshold"; description "Multicast forwarding cache suppress threshold"; uses apply-advanced; leaf suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Suppress threshold"; } leaf reuse { junos:must "(".. suppress")"; junos:must-message "To configure reuse, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Reuse threshold"; } leaf mvpn-rpt-suppress { junos:must "(".. suppress")"; junos:must-message "To configure mvpn-rpt-suppress, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "MVPN RP tree entry suppress threshold"; } leaf mvpn-rpt-reuse { junos:must "(".. mvpn-rpt-suppress")"; junos:must-message "To configure mvpn-rpt-reuse, mvpn-rpt-suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "MVPN RP tree entry reuse threshold"; } leaf log-warning { junos:must "(".. suppress")"; junos:must-message "To configure log-warning, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage at which to start generating warnings"; } } // container threshold } // list family container threshold { junos:must "((!(".. family") || ".. allow-maximum"))"; junos:must-message "Global threshold cannot be configured if family threshold is configured"; description "Threshold"; uses apply-advanced; leaf suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Suppress threshold"; } leaf reuse { junos:must "(".. suppress")"; junos:must-message "To configure reuse, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "Reuse threshold"; } leaf mvpn-rpt-suppress { junos:must "(".. suppress")"; junos:must-message "To configure mvpn-rpt-suppress, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "MVPN RP tree entry suppress threshold"; } leaf mvpn-rpt-reuse { junos:must "(".. mvpn-rpt-suppress")"; junos:must-message "To configure mvpn-rpt-reuse, mvpn-rpt-suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000"; } } description "MVPN RP tree entry reuse threshold"; } leaf log-warning { junos:must "(".. suppress")"; junos:must-message "To configure log-warning, suppress must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage at which to start generating warnings"; } } // container threshold leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 720"; } } description "Forwarding cache entry timeout in minutes"; } } // container forwarding-cache list interface { key "name"; ordered-by user; description "Multicast interface options"; uses multicast_interface_options_type; } // list interface list ssm-map { key "name"; ordered-by user; description "SSM map definitions"; leaf name { type string; description "SSM map name"; } uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Policy for matching group"; } leaf-list source { type jt:ipaddr; ordered-by user; description "One or more source addresses"; } } // list ssm-map list backup-pe-group { key "name"; ordered-by user; description "Backup PE group definitions"; leaf name { type string; description "PE group name"; } uses apply-advanced; leaf-list backups { type jt:ipaddr; max-elements 8; ordered-by user; description "One or more IP addresses"; } leaf local-address { type jt:ipaddr; description "Address to be used as local-address for this group"; } } // list backup-pe-group leaf omit-wildcard-address { type empty; description "Omit wildcard source/group fields in SPMSI AD NLRI"; } leaf local-address { type jt:ipv4addr; description "Local address for PIM and MVPN sessions"; } } // container multicast container programmable-rpd { description "RPD Server module management options"; uses programmable-rpd-type; } // container programmable-rpd container validation { description "Define Route validation"; uses apply-advanced; container traceoptions { description "Trace options for route validation"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errored packets"; } enum "packets" { value 1; description "Trace all I/O packets"; } enum "keepalive" { value 2; description "Trace keepalive packets"; } enum "update" { value 3; description "Trace update packets"; } enum "nsr-synchronization" { value 4; description "Trace NSR synchronization events"; } enum "state" { value 5; description "Trace state transitions"; } enum "policy" { value 6; description "Trace policy processing"; } enum "task" { value 7; description "Trace routing protocol task processing"; } enum "timer" { value 8; description "Trace routing protocol timer processing"; } enum "client" { value 9; description "Trace route validation client events"; } enum "all" { value 10; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf-list notification-rib { type string; ordered-by user; description "Define routing tables that get notified upon validation state change"; } list group { key "name"; description "Define a group of sessions"; leaf name { type string; description "Group name"; } uses apply-advanced; leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf max-sessions { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 63"; } } description "Maximum connected session in this group"; } list session { key "name"; description "Configure a session"; leaf name { type jt:ipaddr; } uses apply-advanced; container traceoptions { description "Trace options for route validation"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errored packets"; } enum "packets" { value 1; description "Trace all I/O packets"; } enum "keepalive" { value 2; description "Trace keepalive packets"; } enum "update" { value 3; description "Trace update packets"; } enum "state" { value 4; description "Trace state transitions"; } enum "task" { value 5; description "Trace routing protocol task processing"; } enum "timer" { value 6; description "Trace routing protocol timer processing"; } enum "all" { value 7; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } leaf authentication-algorithm { junos:must "(".. authentication-key-chain")"; junos:must-message "May not be configured without authentication-key-chain"; junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "md5" { value 0; description "Message Digest 5"; } enum "hmac-sha-1-96" { value 1; description "Hash-based Message Authentication Code (SHA1) (96 bits)"; } enum "aes-128-cmac-96" { value 2; description "Cipher-based Message Authentication Code (AES128) (96 bits)"; } enum "ao" { value 3; description "TCP Authentication Option"; } } default "hmac-sha-1-96"; description "Authentication algorithm name"; } leaf tcpao-handling-with-digest-mismatch { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; type enumeration { enum "drop-if-no-tcpao" { value 0; description "Drop the connection if Digest mismatched"; } enum "allow-without-tcpao" { value 1; description "Allow the connection establishment without TCP-AO"; } } description "Drop or continue without TCP-AO with digest mismatch with TCP-AO"; } leaf authentication-key-chain { junos:must "(!(".. authentication-key"))"; junos:must-message "May not be configured with authentication-key"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string { length "1 .. 128"; } description "Key chain name"; } leaf refresh-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1800"; } } units "seconds"; description "Interval between keepalive packet transmissions"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; description "Time after which the session is declared down."; } leaf record-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 604800"; } } units "seconds"; description "Lifetime of route validation records"; } leaf preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Preference for session establishment"; } leaf port { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 65535"; } } description "Portnumber to connect"; } leaf local-address { type jt:ipaddr; } } // list session } // list group container static { description "Define static route validation record"; uses apply-advanced; list record { key "name"; description "Static route validation record"; leaf name { type jt:ipprefix; } uses apply-advanced; list maximum-length { key "name"; ordered-by user; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 128"; } } description "Maximum prefix-length for route validation record"; } uses apply-advanced; list origin-autonomous-system { key "name"; ordered-by user; leaf name { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Legitimate Origin Autonomous System"; } uses apply-advanced; leaf validation-state { type enumeration { enum "invalid" { value 0; description "Invalid route validation state"; } enum "valid" { value 1; description "Valid route validation state"; } } description "Validation state for route validation record"; } } // list origin-autonomous-system } // list maximum-length } // list record } // container static } // container validation } // grouping juniper-routing-options grouping dynamic_tunnel_type { description "Dynamic tunnel definition"; leaf name { type string { junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)"; junos:pattern-message "Tunnel name is a string consisting of up to 63 letters, numbers, dashes, and underscores"; } description "Tunnel name"; } uses apply-advanced; leaf source-address { junos:must "((".. gre" || (".. udp" || (".. bgp-signal" || ".. ipip"))))"; junos:must-message "Tunnel type GRE, UDP or BGP-SIGNAL must be configured"; type jt:ipaddr; description "Tunnel source address"; } choice tunnel-type { list rsvp-te { key "name"; ordered-by user; description "RSVP-TE point-to-point LSP"; leaf name { type string; description "Configure multiple entries for RSVP tunnel"; } uses apply-advanced; container label-switched-path-template { description "Template for dynamic point-to-point LSP parameters"; uses apply-advanced; choice dynamic-template { leaf template-name { junos:must "(("protocols mpls label-switched-path $$" && "protocols mpls label-switched-path $$ template"))"; junos:must-message "Referenced point-to-point LSP template does not exist"; type string { junos:posix-pattern "^.{1,32}$"; junos:pattern-message "Must be a string of 32 characters or less"; } description "Name of point-to-point LSP template"; } leaf default-template { type empty; description "Use default parameters"; } } // choice dynamic-template } // container label-switched-path-template list destination-networks { key "name"; ordered-by user; description "Create tunnels for routes in these destination networks"; uses app_network_type; } // list destination-networks } // list rsvp-te container spring-te { description "SPRING-TE LSP's"; uses apply-advanced; list source-routing-path-template { key "name"; ordered-by user; description "Template color mapping for SPRING-TE dynamic LSP parameters"; uses spring-te-template-map; } // list source-routing-path-template list destination-networks { key "name"; ordered-by user; description "Create tunnels for routes in these destination networks"; uses app_network_type; } // list destination-networks } // container spring-te leaf gre { junos:must "((".. source-address" && ".. destination-networks"))"; junos:must-message "Source address and Destination Networks must be configured for tunnel type GRE"; type empty; description "Generic routing encapsulation type for IPv4"; } case case_4 { } // case case_4 leaf bgp-signal { junos:must "((".. source-address" && ".. destination-networks"))"; junos:must-message "Source address and Destination Networks must be configured for tunnel type BGP-Signal"; type empty; description "BGP signals the encapsulation type for IPv4"; } case case_6 { } // case case_6 } // choice tunnel-type list destination-networks { junos:must "(((".. gre" || (".. udp" || (".. bgp-signal" || ".. ipip"))) && (!(".. rsvp-te") && !(".. spring-te"))))"; junos:must-message "Tunnel type GRE or UDP must be configured"; key "name"; ordered-by user; description "Create tunnels for routes in these destination networks"; uses network_type; } // list destination-networks } // grouping dynamic_tunnel_type grouping app_network_type { leaf name { type jt:ipprefix; description "Network prefix"; } uses apply-advanced; } // grouping app_network_type grouping export-af-obj { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable auto-export for address family"; } } // choice enable-disable container unicast { presence "enable unicast"; description "Unicast routing information"; uses export-subaf-obj; } // container unicast container multicast { presence "enable multicast"; description "Multicast routing information"; uses export-subaf-obj; } // container multicast container flow { presence "enable flow"; description "Flow routing information"; uses export-subaf-obj; } // container flow } // grouping export-af-obj grouping export-subaf-obj { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable instance export"; } } // choice enable-disable leaf rib-group { type string; description "Auxiliary rib-group of additional RIBs to consider"; } } // grouping export-subaf-obj grouping fate_sharing_links { leaf name { type jt:ipv4addr; description "Router ID or LAN interface address"; } leaf to { type jt:ipv4addr; description "Point-to-point links"; } } // grouping fate_sharing_links grouping flow-interface-group { leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Interface group ID to match traffic"; } leaf exclude { type empty; description "Don't apply flow-spec filter to traffic on this group"; } } // grouping flow-interface-group grouping flow-route-inet { leaf name { type string; } uses apply-advanced; leaf no-install { type empty; description "Don't install firewall filter in forwarding"; } container match { description "Flow definition"; uses flow-route-qualifier-inet; } // container match container then { description "Actions to take for this flow"; uses flow-route-op; } // container then } // grouping flow-route-inet grouping flow-route-inet6 { leaf name { type string; } uses apply-advanced; leaf no-install { type empty; description "Don't install firewall filter in forwarding"; } container match { description "Flow definition"; uses flow-route-qualifier-inet6; } // container match container then { description "Actions to take for this flow"; uses flow-route-op; } // container then } // grouping flow-route-inet6 grouping flow-route-op { uses apply-advanced; leaf community { type string; description "Name of BGP community"; } choice flow_op_action { leaf accept { type empty; description "Allow traffic through"; } leaf discard { type empty; description "Discard all traffic for this flow"; } leaf rate-limit { type string; description "Rate in bits/sec to limit the flow traffic"; } } // choice flow_op_action leaf routing-instance { type string { junos:posix-pattern "^[a-z]+:[0-9.]+L?:[0-9]+$"; junos:pattern-message "Use format 'target:x:y' where 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. target:123456L:100"; } description "Redirect to instance identified via Route Target community"; } leaf sample { type empty; description "Sample traffic that matches this flow"; } leaf mark { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 63"; } } description "Set DSCP value for traffic that matches this flow"; } leaf next-term { type empty; description "Continue the filter evaluation after matching this flow"; } choice redirect_op_action { leaf-list redirect { type jt:ipaddr; ordered-by user; description "Redirect(Tunnel) this flow's traffic to given next-hop address"; } } // choice redirect_op_action } // grouping flow-route-op grouping flow-route-qualifier-inet { uses apply-advanced; leaf-list protocol { type string; ordered-by user; description "IP protocol value"; } leaf-list port { type string; ordered-by user; } leaf-list destination-port { type string; ordered-by user; } leaf-list source-port { type string; ordered-by user; } leaf-list tcp-flags { type string; ordered-by user; description "TCP flags"; } leaf-list packet-length { type jt:policy-algebra; ordered-by user; description "Packet length (0-65535)"; } leaf-list dscp { type jt:policy-algebra; ordered-by user; description "Differentiated Services (DiffServ) code point (DSCP) (0-63)"; } leaf-list fragment { type enumeration { enum "dont-fragment" { value 0; description "Don't Fragment flag is set"; } enum "not-a-fragment" { value 1; description "Not a fragment"; } enum "is-fragment" { value 2; description "Fragmented packet"; } enum "first-fragment" { value 3; description "First fragment"; } enum "last-fragment" { value 4; description "Last fragment"; } } ordered-by user; } leaf destination { type jt:ipv4prefix; description "Destination prefix for this traffic flow"; } leaf source { type jt:ipv4prefix; description "Source prefix for this traffic flow"; } leaf-list icmp-code { type string; ordered-by user; description "ICMP message code"; } leaf-list icmp-type { type string; ordered-by user; description "ICMP message type"; } } // grouping flow-route-qualifier-inet grouping flow-route-qualifier-inet6 { uses apply-advanced; leaf-list protocol { type string; ordered-by user; description "IP protocol value"; } leaf-list port { type string; ordered-by user; } leaf-list destination-port { type string; ordered-by user; } leaf-list source-port { type string; ordered-by user; } leaf-list tcp-flags { type string; ordered-by user; description "TCP flags"; } leaf-list packet-length { type jt:policy-algebra; ordered-by user; description "Packet length (0-65535)"; } leaf-list dscp { type jt:policy-algebra; ordered-by user; description "Differentiated Services (DiffServ) code point (DSCP) (0-63)"; } leaf-list fragment { type enumeration { enum "dont-fragment" { value 0; description "Don't Fragment flag is set"; } enum "not-a-fragment" { value 1; description "Not a fragment"; } enum "is-fragment" { value 2; description "Fragmented packet"; } enum "first-fragment" { value 3; description "First fragment"; } enum "last-fragment" { value 4; description "Last fragment"; } } ordered-by user; } container destination { presence "enable destination"; description "Destination prefix for this traffic flow"; uses flow-prefix-with-offset; } // container destination container source { presence "enable source"; description "Source prefix for this traffic flow"; uses flow-prefix-with-offset; } // container source leaf-list icmp6-type { type string; ordered-by user; description "ICMP message type"; } leaf-list icmp6-code { type string; ordered-by user; description "ICMP message code"; } leaf-list flow-label { type jt:policy-algebra; ordered-by user; description "Flow-label (0-1048575)"; } } // grouping flow-route-qualifier-inet6 grouping flow-prefix-with-offset { leaf prefix { type jt:ipv6prefix; } leaf prefix-offset { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Offset from where prefix match will start"; } } // grouping flow-prefix-with-offset grouping flow-validation { uses apply-advanced; container traceoptions { description "Trace options"; uses flow-dep-traceoptions; } // container traceoptions } // grouping flow-validation grouping flow-dep-traceoptions { uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "resolution" { value 0; description "Trace flow to unicast route resolution"; } enum "flash" { value 1; description "Trace flash processing"; } enum "route" { value 2; description "Trace routing information"; } enum "normal" { value 3; description "Trace normal events"; } enum "general" { value 4; description "Trace general events"; } enum "state" { value 5; description "Trace state transitions"; } enum "policy" { value 6; description "Trace policy processing"; } enum "task" { value 7; description "Trace routing protocol task processing"; } enum "timer" { value 8; description "Trace routing protocol timer processing"; } enum "all" { value 9; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } container filter { presence "enable filter"; description "Filter to apply to tracing"; leaf match-on { type enumeration { enum "prefix" { value 0; description "Filter based on prefix"; } enum "route-attribute" { value 1; description "Filter based on route attributes"; } } description "Argument on which to match"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Filter policy"; } } // container filter } // list flag } // grouping flow-dep-traceoptions grouping forwarding-table-type { description "Forwarding table management options"; uses apply-advanced; leaf remnant-holdtime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } description "Time to hold inherited routes from FIB"; } leaf chain-composite-max-label-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Maximum labels inside chain composite for the platform."; } leaf krt-nexthop-ack-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 400"; } } description "Kernel nexthop ack timeout interval"; } leaf srv6-chain-merge { type empty; description "Enable merging of srv6 chain nexthops"; } container consistency-checking { status deprecated; description "RIB/FIB consistency checking"; uses apply-advanced; choice enable-disable { leaf enable { type empty; description "Enable consistency checking"; } leaf disable { type empty; description "Disable consistency checking"; } } // choice enable-disable leaf period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 4294967295"; } } description "Periodicity of scan in seconds"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Mismatch threshold until complaint"; } } // container consistency-checking leaf-list export { type jt:policy-algebra; ordered-by user; description "Export policy"; } leaf dynamic-list-next-hop { junos:must "(!(".. evpn-aliasing-optimize"))"; junos:must-message "please disable evpn-aliasing-optimize"; type empty; description "Dynamic next-hop mode for EVPN"; } container evpn-egress-link-protection { presence "enable evpn-egress-link-protection"; description "EVPN PE-CE egress link failure protection"; uses apply-advanced; } // container evpn-egress-link-protection container egress-chaining { description "Enable egress-chaining"; uses apply-advanced; leaf spring-te { type empty; description "Enable egress-chaining for SPRING-TE routes"; } } // container egress-chaining leaf evpn-aliasing-optimize { junos:must "(!(".. evpn-egress-link-protection"))"; junos:must-message "please disable evpn-egress-link-protection"; junos:must "(!(".. dynamic-list-next-hop"))"; junos:must-message "please disable dynamic-list-next-hop"; type empty; description "EVPN Aliasing convergence improvement"; } choice indirect-next-hop-choice { leaf indirect-next-hop { type empty; description "Install indirect next hops in Packet Forwarding Engine"; } leaf no-indirect-next-hop { type empty; description "Don't install indirect next hops in Packet Forwarding Engine"; } } // choice indirect-next-hop-choice choice route-ack-converge-choice { leaf route-ack-converge { type empty; description "Enable the route ack convergence feature"; } leaf no-route-ack-converge { type empty; description "Don't enable the route ack convergence feature"; } } // choice route-ack-converge-choice choice indirect-next-hop-change-acknowledgements-choice { leaf indirect-next-hop-change-acknowledgements { type empty; description "Request acknowledgements for Indirect next hop changes"; } leaf no-indirect-next-hop-change-acknowledgements { type empty; description "Don't request acknowledgements for Indirect next hop changes"; } } // choice indirect-next-hop-change-acknowledgements-choice list rib { key "name"; ordered-by user; status deprecated; leaf name { type string; } } // list rib leaf unicast-reverse-path { type enumeration { enum "active-paths" { value 0; description "Consider active paths when performing RP verification"; } enum "feasible-paths" { value 1; description "Consider all feasible paths for RP verification"; } } description "Unicast reverse path (RP) verification"; } container ip-tunnel-rpf-check { presence "enable ip-tunnel-rpf-check"; description "IP tunnel Reverse Path Forwarding Check"; uses apply-advanced; leaf mode { type enumeration { enum "strict" { value 0; description "Strict mode for rpf-check(Default)"; } enum "loose" { value 1; description "Loose mode for rpf-check"; } } default "strict"; } leaf fail-filter { junos:must "(("firewall family any filter $$" || ((!("firewall") && ".. .. .. .. .. firewall family any filter $$") || ("firewall family inet filter $$" || ((!("firewall") && ".. .. .. .. .. firewall family inet filter $$") || ("firewall family inet6 filter $$" || (!("firewall") && ".. .. .. .. .. firewall family inet6 filter $$")))))))"; junos:must-message "referenced filter must be defined under firewall family any|inet|inet6"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Fail filter name for RPF check(family inet|inet6|any)"; } } // container ip-tunnel-rpf-check container fib-next-hop-split { description "Split nexthop to chain nexthop when installing fom rib to fib"; uses apply-advanced; leaf labeled-isis { type empty; description "Create composite-chained nexthops for labeled ISIS routes"; } } // container fib-next-hop-split } // grouping forwarding-table-type grouping juniper-sampling-options { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable global sampling instance"; } } // choice enable-disable container traceoptions { description "Traffic sampling trace options"; uses sampling_traceoptions_type; } // container traceoptions container input { description "Traffic Sampling data acquisition"; uses sampling_input_type; } // container input container output { junos:must "(!(".. family"))"; junos:must-message " 'sampling family <*> ' and 'sampling output' are mutually exclusive"; junos:must "("forwarding-options sampling input")"; junos:must-message "Sampling input configuration is not specified"; status deprecated; description "Traffic sampling data disposition"; uses sampling_output_type; } // container output container family { description "Address family of packets to sample"; container inet { description "Sample IPv4 packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable sampling family inet"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input rate" || " .. input rate"))"; junos:must-message "sampling input rate is not specified"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_inet_global_output_type; } // container output } // container inet container inet6 { description "Sample IPv6 packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable sampling family inet6"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_family_inet6_output_type; } // container output } // container inet6 container mpls { description "Sample mpls packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable sampling family mpls"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_global_mpls_output_type; } // container output } // container mpls } // container family list instance { key "name"; ordered-by user; description "Instance of sampling parameters"; leaf name { junos:must "(!("forwarding-options port-mirroring instance $$"))"; junos:must-message "Instance $$ is also defined under port-mirroring hierarchy"; type string; description "Name for sampling instance"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable sampling instance"; } } // choice enable-disable container input { description "Traffic Sampling data acquisition"; uses sampling_instance_input_type; } // container input container family { description "Address family of packets to sample"; container inet { description "Sample IPv4 packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; status deprecated; description "Disable instance family inet"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_inet_output_type; } // container output } // container inet container inet6 { description "Sample IPv6 packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; status deprecated; description "Disable instance family inet6"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_inet6_output_type; } // container output } // container inet6 container mpls { description "Sample mpls packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; status deprecated; description "Disable instance family mpls"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((!("forwarding-options sampling input family inet") && (!("forwarding-options sampling input family inet6") && !("forwarding-options sampling input family mpls"))))"; junos:must-message "output configuration mismatch with old deprecated input configuration"; junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_mpls_output_type; } // container output } // container mpls container vpls { status deprecated; description "Sample vpls packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable instance family vpls"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_vpls_output_type; } // container output } // container vpls container bridge { junos:must "(!(".. .. family vpls"))"; junos:must-message "bridge and vpls families are mutually exclusive"; description "Sample bridge packets"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable instance family bridge"; } } // choice enable-disable container input { junos:must "(!(".. .. .. input"))"; junos:must-message "instance <*> 'family <*> input' and 'instance <*> input' are mutually exclusive"; description "Settings for sampling of input packets"; uses sampling_family_input_type; } // container input container output { junos:must "((".. .. .. input" || ".. input"))"; junos:must-message "Sampling input configuration is not specified"; description "Traffic sampling data disposition"; uses sampling_instance_bridge_output_type; } // container output } // container bridge } // container family } // list instance container jflow-service { description "Jflow service configuration"; uses apply-advanced; container traceoptions { description "Jflow service trace options"; uses jflow_service_traceoptions; } // container traceoptions } // container jflow-service container route-record { description "Sampling route record configuration"; uses apply-advanced; container traceoptions { description "Sampling route record trace options"; uses route_record_traceoptions; } // container traceoptions } // container route-record } // grouping juniper-sampling-options grouping jflow_service_traceoptions { description "Traceoptions for jflow-service"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Area of jflow-service to enable debuging output"; leaf name { type enumeration { enum "parse" { value 0; description "Trace parsing code"; } enum "rtsock" { value 1; description "Trace rtsock code"; } enum "sm" { value 2; description "Trace State machine code"; } enum "all" { value 3; description "Trace all area of jflow-service code"; } } } } // list flag } // grouping jflow_service_traceoptions grouping junos_hash_key { description "Select data used in the hash key"; uses apply-advanced; container family { description "Protocol family"; container fcoe { description "FCoE protocol family"; uses apply-advanced; container ethernet-interfaces { description "FCoE hash-key configuration on ethernet interfaces"; uses apply-advanced; leaf oxid { type enumeration { enum "enable" { value 0; description "Include Originator Exchange ID in the hash key"; } enum "disable" { value 1; description "Do not include Originator Exchange ID in the hash key"; } } description "Originator Exchange ID"; } } // container ethernet-interfaces container fabric-interfaces { description "FCoE hash-key configuration on fabric interfaces"; uses apply-advanced; leaf oxid { type enumeration { enum "enable" { value 0; description "Include Originator Exchange ID in the hash key"; } enum "disable" { value 1; description "Do not include Originator Exchange ID in the hash key"; } } description "Originator Exchange ID"; } } // container fabric-interfaces } // container fcoe container inet { description "IPv4 protocol family"; uses apply-advanced; container layer-3 { presence "enable layer-3"; description "Include Layer 3 (IP) data in the hash key"; uses apply-advanced; leaf destination-address { type empty; description "Include IP destination address in the hash key"; } } // container layer-3 container layer-4 { presence "enable layer-4"; description "Include Layer 4 (TCP or UDP) data in the hash key"; uses apply-advanced; } // container layer-4 } // container inet container inet6 { description "IPv6 protocol family"; uses apply-advanced; container layer-3 { presence "enable layer-3"; description "Include Layer 3 (IP) data in the hash key"; uses apply-advanced; leaf destination-address { type empty; description "Include IP destination address in the hash key"; } leaf incoming-interface-index { type empty; description "Include incoming interface index in the hash key"; } leaf next-header { type empty; description "Include IP Next Header field in the hash key"; } leaf source-address { type empty; description "Include IP source address in the hash key"; } leaf traffic-class { type empty; description "Include Traffic Class field in the hash key"; } } // container layer-3 container layer-4 { presence "enable layer-4"; description "Include Layer 4 (TCP or UDP) data in the hash key"; uses apply-advanced; leaf destination-port { type empty; description "Include IP destination port in the hash key"; } leaf source-port { type empty; description "Include IP source port in the hash key"; } } // container layer-4 } // container inet6 container mpls { description "MPLS protocol family"; uses apply-advanced; choice label { leaf label-1 { type empty; description "Include the first MPLS label in the hash key"; } leaf all-labels { type empty; description "Include all MPLS labels in hash key"; } leaf no-labels { type empty; description "Exclude all MPLS labels from hash key"; } leaf bottom-label-1 { type empty; description "Include the first MPLS label from bottom-of-stack in the hash key"; } } // choice label leaf label-2 { junos:must "(".. label-1")"; junos:must-message "Must also specify label 1;"; type empty; description "Include the second MPLS label in the hash key"; } leaf label-3 { junos:must "(".. label-2")"; junos:must-message "Must also specify label 2;"; type empty; description "Include the third MPLS label in the hash key"; } container payload { junos:must "((".. label-1" || (".. no-labels" || (".. all-labels" || ".. bottom-label-1"))))"; junos:must-message "Either label-1, bottom-label-1, all-labels or no-labels statement is mandatory"; description "Include payload data in the hash key"; uses apply-advanced; container ether-pseudowire { presence "enable ether-pseudowire"; description "Load-balance IP over ethernet PW"; uses apply-advanced; } // container ether-pseudowire container ip { presence "enable ip"; description "Include IPv4 or IPv6 payload data in the hash key"; uses apply-advanced; choice layer-4-select { choice ip-payload { leaf layer-3-only { type empty; description "Include only layer-3 IP information"; } leaf enable { type empty; description "Include layer3/4 IP payload in the hash key"; } leaf disable { type empty; description "Exclude layer3/4 IP payload in the hash key"; } } // choice ip-payload container port-data { presence "enable port-data"; uses apply-advanced; leaf source-msb { type empty; description "Include the most significant byte of the source port"; } leaf source-lsb { type empty; description "Include the least significant byte of the source port"; } leaf destination-msb { type empty; description "Include the most significant byte of the destination port"; } leaf destination-lsb { type empty; description "Include the least significant byte of the destination port"; } } // container port-data } // choice layer-4-select } // container ip } // container payload } // container mpls container multiservice { description "Multiservice protocol family"; uses apply-advanced; leaf source-mac { type empty; description "Include source MAC address in hash key"; } leaf destination-mac { type empty; description "Include destination MAC address in hash key"; } } // container multiservice } // container family } // grouping junos_hash_key grouping layer2_pm_family_output_type { uses apply-advanced; choice interface-or-next-hop-index { leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface through which to send sampled traffic"; } leaf next-hop-group { junos:must "(!(".. no-filter-check"))"; junos:must-message "no-filter-check is not allowed with next-hop-group"; junos:must "("forwarding-options next-hop-group $$ group-type layer-2")"; junos:must-message "Referenced next-hop-group must be defined as layer-2 group"; type string; description "Next-hop-group through which to send port-mirror traffic"; } list routing-instance { key "name"; max-elements 1; description "Routing instances"; uses layer2_pm_output-routing-instance-type; } // list routing-instance list vlan { key "name"; max-elements 1; description "Outgoing VLAN for mirrored packets"; uses pm-rspan-vlan; } // list vlan case case_5 { } // case case_5 } // choice interface-or-next-hop-index leaf no-filter-check { type empty; description "Do not check for filters on port-mirroring interface"; } } // grouping layer2_pm_family_output_type grouping layer2_pm_output-routing-instance-type { leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; list vlan { key "name"; max-elements 1; description "Outgoing VLAN for mirrored packets"; uses pm-rspan-vlan; } // list vlan } // grouping layer2_pm_output-routing-instance-type grouping ldp-sync-obj { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable LDP synchronization"; } } // choice enable-disable leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Time during which maximum metric is advertised"; } } // grouping ldp-sync-obj grouping ldp_filter_obj { description "Filter to apply to tracing"; leaf match-on { type enumeration { enum "fec" { value 0; description "Filter based on FEC associated to the traced object."; } enum "address" { value 1; description "Filter based on packet source and destination addresses."; } } description "Argument on which to match"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Filter policy"; } } // grouping ldp_filter_obj grouping lsp-set-match-type { uses apply-advanced; leaf lsp-name { junos:must "((!(".. lsp-regex") && (!(".. p2mp-name") && !(".. p2mp-regex"))))"; junos:must-message "Can't configure lsp-name when lsp-regex or p2mp-name or p2mp-regex is configured"; type string; description "LSP name that matches this string"; } leaf lsp-regex { junos:must "((!(".. lsp-name") && (!(".. p2mp-name") && !(".. p2mp-regex"))))"; junos:must-message "Can't configure lsp-regex when lsp-name or p2mp-name or p2mp-regex is configured"; type string; description "All LSPs that match this regular expression pattern"; } leaf p2mp-name { junos:must "((!(".. lsp-name") && (!(".. lsp-regex") && !(".. p2mp-regex"))))"; junos:must-message "Can't configure p2mp-name when lsp-name or lsp-regex or p2mp-regex is configured"; type string; description "P2MP names that match this string"; } leaf p2mp-regex { junos:must "((!(".. lsp-name") && (!(".. lsp-regex") && !(".. p2mp-name"))))"; junos:must-message "Can't configure p2mp-regex when lsp-name or lsp-regex or p2mp-name is configured"; type string; description "P2MP names that match this regular expression pattern"; } choice router-type { leaf egress { type empty; description "All LSPs for which this router is egress"; } leaf ingress { type empty; description "All LSPs for which this router is ingress"; } leaf transit { type empty; description "All LSPs for which this router is transit"; } } // choice router-type } // grouping lsp-set-match-type grouping lsp_nh_obj { leaf name { type string; description "LSP to use to reach destination"; } uses apply-advanced; leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of LSP next hop"; } leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric of LSP next hop"; } } // grouping lsp_nh_obj grouping macro-data-type { leaf name { type string; description "Keyword part of the keyword-value pair"; } leaf value { type string; description "Value part of the keyword-value pair"; } } // grouping macro-data-type grouping martian_type { description "Invalid routes"; leaf address { type jt:ipprefix; description "IP address or hostname"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "upto" { value 3; } enum "through" { value 4; } enum "prefix-length-range" { value 5; } enum "allow" { value 6; } } } leaf choice-value { type string; } leaf allow { type empty; } } // grouping martian_type grouping mpls_pm_family_output_type { uses apply-advanced; } // grouping mpls_pm_family_output_type grouping mrp-trace-options { description "Trace options for MMRP Protocol"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { junos:must "(".. file")"; junos:must-message "Trace file name required to enable tracing"; key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "events" { value 0; description "Trace events to the protocol state machine"; } enum "pdu" { value 1; description "Trace RAPS PDU reception and transmission"; } enum "timers" { value 2; description "Trace protocol timers"; } enum "state-machine" { value 3; description "Trace information of the state machine"; } enum "socket" { value 4; description "Trace soccket activity"; } enum "error" { value 5; description "Trace all failure conditions"; } enum "all" { value 6; description "Trace all"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // grouping mrp-trace-options grouping mstp-interface { leaf name { type string; } uses apply-advanced; leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 255"; } } description "Interface priority (in increments of 16 - 0,16,..240)"; } leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000000"; } } description "Cost of the interface"; } leaf mode { type enumeration { enum "point-to-point" { value 0; description "Interface mode is point-to-point"; } enum "shared" { value 1; description "Interface mode is shared"; } } description "Interface mode (P2P or shared)"; } leaf edge { type empty; description "Port is an edge port"; } leaf access-trunk { type empty; description "Send/Receive untagged RSTP BPDUs on this interface"; } container bpdu-timeout-action { presence "enable bpdu-timeout-action"; description "Define action on BPDU expiry (Loop Protect)"; uses apply-advanced; leaf block { type empty; description "Block the interface"; } leaf alarm { type empty; description "Generate an alarm"; } } // container bpdu-timeout-action leaf no-root-port { type empty; description "Do not allow the interface to become root (Root Protect)"; } leaf disable { type empty; description "Disable Spanning Tree on port"; } } // grouping mstp-interface grouping multicast_interface_options_type { description "Multicast interface options"; leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container maximum-bandwidth { presence "enable maximum-bandwidth"; description "Maximum multicast bandwidth for the interface"; leaf bandwidth-limit { type string; units "bps"; description "Maximum multicast bandwidth on the interface"; } } // container maximum-bandwidth choice enable-disable { leaf enable { type empty; status deprecated; description "Enable Multicast"; } leaf disable { type empty; status deprecated; description "Disable Multicast"; } } // choice enable-disable container reverse-oif-mapping { presence "enable reverse-oif-mapping"; description "Enable reverse OIF mapping on the multicast interface"; uses apply-advanced; leaf no-qos-adjust { type empty; description "Disable reverse OIF mapping QoS adjustment"; } } // container reverse-oif-mapping leaf subscriber-leave-timer { junos:must "(".. reverse-oif-mapping")"; junos:must-message "reverse-oif-mapping must be set"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30"; } } units "seconds"; description "Timeout in seconds to credit back the bandwidth on the subscriber interface"; } leaf no-qos-adjust { type empty; description "Disable QoS adjustment for this interface"; } } // grouping multicast_interface_options_type grouping network_type { leaf name { type jt:ipprefix; description "Network prefix"; } uses apply-advanced; leaf-list dyn-tunnel-attribute-policy { type jt:policy-algebra; ordered-by user; description "Import policy for dynamic-tunnel under this destination network"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of tunnel route under this destination network"; } leaf-list colors { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Set of color list that will be supported for tunnel creation"; } } // grouping network_type grouping next_hop_group_intf_type { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface through which to send sampled traffic"; } uses apply-advanced; list next-hop { junos:must "((".. .. group-type inet" || ".. .. group-type inet6"))"; junos:must-message "Next-hop can be specified only for group-type inet or inet6"; key "name"; ordered-by user; description "Address of next hop through which to send sampled traffic"; uses next_hop_type; } // list next-hop } // grouping next_hop_group_intf_type grouping next_hop_subgroup_intf_type { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface through which to send sampled traffic"; } uses apply-advanced; list next-hop { junos:must "((".. .. .. group-type inet" || ".. .. .. group-type inet6"))"; junos:must-message "Next-hop can be specified only for group-type inet or inet6"; key "name"; ordered-by user; description "Address of next hop through which to send sampled traffic"; uses next_hop_type; } // list next-hop } // grouping next_hop_subgroup_intf_type grouping next_hop_type { description "Address of next hop through which to send sampled traffic"; leaf name { type jt:ipaddr; } uses apply-advanced; } // grouping next_hop_type grouping override-local-server-type { description "DHCP override processing"; uses apply-advanced; leaf interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of clients allowed on an interface"; } leaf no-arp { junos:must "((!(".. route-suppression destination") && !(".. route-suppression access-internal")))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; type empty; status deprecated; description "Disable DHCP ARP table population"; } leaf bootp-support { type empty; description "Allow processing of bootp requests"; } container client-discover-match { presence "enable client-discover-match"; description "Use secondary match criteria for DISCOVER PDU"; choice match-with { leaf option60-and-option82 { type empty; description "Use option 60 and option 82"; } leaf incoming-interface { type empty; description "Use incoming interface"; } } // choice match-with } // container client-discover-match container delay-offer { description "Filter options for dhcp-server"; uses dhcpv4-filter-option; } // container delay-offer container process-inform { presence "enable process-inform"; description "Process INFORM PDUs"; uses apply-advanced; leaf pool { type string { length "1 .. 64"; } description "Pool name for family inet"; } } // container process-inform container include-option-82 { description "Include option-82 in reply packets"; uses apply-advanced; leaf nak { type empty; description "Include option-82 in NAK"; } leaf forcerenew { type empty; description "Include option-82 in FORCERENEW"; } } // container include-option-82 leaf delete-binding-on-renegotiation { type empty; description "Delete binding on renegotiation"; } leaf allow-no-end-option { type empty; description "Allow packets without end-of-option"; } leaf asymmetric-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced lease time for the client. In seconds"; } leaf protocol-attributes { type string { length "1 .. 64"; } description "DHCPv4 attributes to use as defined under access protocol-attributes"; } leaf dual-stack { type string { length "1 .. 64"; } description "Dual stack group to use"; } } // grouping override-local-server-type grouping dhcpv4-filter-option { description "Generic DHCPv4 filter processing"; uses apply-advanced; leaf delay-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30"; } } units "seconds"; default "3"; description "Time delay between discover and offer"; } container based-on { description "Option number"; uses apply-advanced; container option-82 { presence "enable option-82"; description "Option 82"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-82 container option-60 { presence "enable option-60"; description "Option 60"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-60 container option-77 { presence "enable option-77"; description "Option 77"; uses apply-advanced; container equals { description "Generic option equals"; uses server-v6-option-ascii-hex; } // container equals container not-equals { description "Generic option not equals"; uses server-v6-option-ascii-hex; } // container not-equals container starts-with { description "Generic option starts-with"; uses server-v6-option-ascii-hex; } // container starts-with } // container option-77 } // container based-on } // grouping dhcpv4-filter-option grouping override-type { description "DHCP override processing"; uses apply-advanced; leaf no-unicast-replies { junos:must "(!(".. layer2-unicast-replies"))"; junos:must-message "no-unicast-replies cannot be configured with layer2-unicast-replies"; type empty; description "Overwrite unicast bit in incoming packet, when present"; } choice allow-snooped-clients-choice { leaf allow-snooped-clients { type empty; description "Allow client creation from snooped PDUs"; } leaf no-allow-snooped-clients { type empty; description "Don't allow client creation from snooped PDUs"; } } // choice allow-snooped-clients-choice leaf allow-no-end-option { type empty; description "Allow packets without end-of-option"; } leaf always-write-giaddr { type empty; description "Overwrite existing 'giaddr' field, when present"; } container always-write-option-82 { presence "enable always-write-option-82"; description "Overwrite existing value of option 82, when present"; uses write-option-82-type; } // container always-write-option-82 leaf user-defined-option-82 { type string { length "1 .. 252"; } description "Set user defined description for option-82"; } leaf layer2-unicast-replies { junos:must "(!(".. no-unicast-replies"))"; junos:must-message "layer2-unicast-replies cannot be configured with no-unicast-replies"; type empty; description "Do not broadcast client responses"; } leaf trust-option-82 { type empty; description "Trust options-82 option"; } leaf delay-authentication { type empty; description "Delay subscriber authentication in DHCP protocol processing until request packet"; } leaf disable-relay { type empty; description "Disable DHCP relay processing"; } leaf no-bind-on-request { type empty; description "Do not bind if stray DHCP request is received"; } leaf interface-client-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 500000"; } } description "Limit the number of client allowed on an interface"; } leaf no-arp { junos:must "((!(".. route-suppression destination") && !(".. route-suppression access-internal")))"; junos:must-message "Cannot specify route-suppression with overrides no-arp"; type empty; status deprecated; description "Disable DHCP ARP table population"; } leaf bootp-support { type empty; description "Allows relay of bootp req and reply"; } leaf dual-stack { type string { length "1 .. 64"; } description "Dual stack group to use."; } container client-discover-match { presence "enable client-discover-match"; description "Use secondary match criteria for DISCOVER PDU"; choice match-with { leaf option60-and-option82 { type empty; description "Use option 60 and option 82"; } leaf incoming-interface { type empty; description "Use incoming interface"; } } // choice match-with } // container client-discover-match container proxy-mode { presence "enable proxy-mode"; description "Put the relay in proxy mode"; } // container proxy-mode leaf asymmetric-lease-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "600 .. 86400"; } } units "seconds"; description "Use a reduced lease time for the client. In seconds"; } container replace-ip-source-with { description "Replace IP source address in request and release packets"; choice replacement-type { leaf giaddr { type empty; description "Replace IP source address with giaddr"; } } // choice replacement-type } // container replace-ip-source-with leaf send-release-on-delete { type empty; description "Always send RELEASE to the server when a binding is deleted"; } leaf apply-secondary-as-giaddr { type empty; description "Enable DHCP relay to use secondary gateway ip for relay interfaces"; } leaf relay-source { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface for relay source"; } leaf delete-binding-on-renegotiation { type empty; description "Delete binding on rengotiation"; } } // grouping override-type grouping p2mp_ldp_lsp_nh_obj { uses apply-advanced; list root-address { key "name"; description "Configure the root address of P2MP LSP"; leaf name { type jt:ipaddr; description "Root address of the P2MP LSP"; } uses apply-advanced; leaf lsp-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Configure the generic LSP identifier"; } list group-address { key "name"; description "IPv4/Ipv6 group address for mLDP LSP"; leaf name { type jt:ipaddr; description "IPv4/Ipv6 group address"; } uses apply-advanced; list source-address { key "name"; description "IPv4/Ipv6 source address"; leaf name { type jt:ipaddr; description "IPv4/Ipv6 source address for mLDP LSP"; } uses apply-advanced; } // list source-address } // list group-address } // list root-address } // grouping p2mp_ldp_lsp_nh_obj grouping packet-capture-egress-intf-type { uses apply-advanced; list interface { key "name"; description "Interface options"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; } // list interface } // grouping packet-capture-egress-intf-type grouping packet_accounting_output_type { uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list cflowd { junos:must "(all ".. interface <*> source-address")"; junos:must-message "'forwarding-options accounting output interface source-address' must be specified with 'flow-server' and 'interface'"; junos:must "(any ".. interface <*>")"; junos:must-message "'forwarding-options accounting output interface' must be specified"; key "name"; description "Cflowd collector where flow records are sent"; uses cflowd_packet_accounting_type; } // list cflowd list interface { key "name"; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface } // grouping packet_accounting_output_type grouping cflowd_packet_accounting_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf version { type enumeration { enum "5" { value 0; description "Export cflowd aggregates in version 5 format"; } enum "8" { value 1; description "Export cflowd aggregates in version 8 format"; } } default "5"; description "Format of exported cflowd aggregates"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation } // grouping cflowd_packet_accounting_type grouping aggregation_type { uses apply-advanced; leaf autonomous-system { type empty; description "Aggregate by autonomous system number"; } leaf protocol-port { type empty; description "Aggregate by protocol and port number"; } leaf source-prefix { type empty; description "Aggregate by source prefix"; } leaf destination-prefix { type empty; description "Aggregate by destination prefix"; } container source-destination-prefix { presence "enable source-destination-prefix"; description "Aggregate by source and destination prefix"; uses apply-advanced; leaf caida-compliant { type empty; description "Compatible with Caida record format for prefix aggregation (v8)"; } } // container source-destination-prefix } // grouping aggregation_type grouping packet_export_intf_type { leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interfaces used to send monitored information"; } uses apply-advanced; leaf engine-id { type union { type uint8; type string { pattern "<.*>|$.*"; } } description "Identity (number) of this accounting interface"; } leaf engine-type { type union { type uint8; type string { pattern "<.*>|$.*"; } } description "Type (number) of this accounting interface"; } leaf source-address { type jt:ipaddr; description "Address to use for generating monitored packets"; } } // grouping packet_export_intf_type grouping periodic_oam { uses apply-advanced; container mpls-tp-mode { presence "enable mpls-tp-mode"; description "MPLS-TP Mode, Do not use IP addressing for OAM"; uses apply-advanced; container lsping-channel-type { description "Supported Control-channel types for MPLS-TP mode...."; uses apply-advanced; choice action-choice { leaf ipv4 { type empty; description "Use channel-type IPv4(0x0021), With IP-UDP encapsulation"; } leaf on-demand-cv { type empty; description "Use channel-type On-Demand-CV(0x0025), Without IP-UDP encapsulation"; } } // choice action-choice } // container lsping-channel-type } // container mpls-tp-mode container bfd-port { description "Egress knob to select MHOP-BFD port for MPLS BFD"; uses apply-advanced; leaf-list import { type jt:policy-algebra; ordered-by user; description "Import policy"; } } // container bfd-port container bfd-liveness-detection { description "Bidirectional Forwarding Detection options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container failure-action { description "Action to take when BFD session goes down"; choice action-choice { leaf teardown { type empty; description "Teardown label switched path and resignal"; } container make-before-break { presence "enable make-before-break"; description "Resignal the label switched path before teardown"; uses apply-advanced; leaf teardown-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 30"; } } units "seconds"; description "Time to wait before teardown"; } } // container make-before-break } // choice action-choice } // container failure-action leaf no-router-alert-option { type empty; description "Do not set Router-Alert options in IP header for MPLS-BFD"; } leaf use-ip-ttl-1 { type empty; description "Set TTL value to 1 in IP header for MPLS-BFD"; } } // container bfd-liveness-detection container performance-monitoring { description "Performance monitoring options"; uses apply-advanced; container traceoptions { description "Trace options for PM"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "init" { value 0; description "Trace init commnad"; } enum "error" { value 1; description "Trace error conditions"; } enum "event" { value 2; description "Trace state machine events"; } enum "general" { value 3; description "Trace general events"; } enum "packet" { value 4; description "Trace various packets "; } enum "timer" { value 5; description "Trace timer processing"; } enum "all" { value 6; description "Trace everything"; } } } } // list flag } // container traceoptions container querier { junos:must "(".. .. .. ultimate-hop-popping")"; junos:must-message "Performance monitoring can be configured only on ultimate-hop-popping LSPs"; junos:must "(".. .. .. associate-lsp")"; junos:must-message "Performance monitoring can be configured only for associated LSPs"; description "Querier options"; uses apply-advanced; container loss { description "Loss measurement options"; uses apply-advanced; list traffic-class { key "name"; description "Traffic class specific options"; leaf name { type enumeration { enum "tc-0" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 0; description "Traffic class 0"; } enum "tc-1" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 1; description "Traffic class 1"; } enum "tc-2" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 2; description "Traffic class 2"; } enum "tc-3" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 3; description "Traffic class 3"; } enum "tc-4" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 4; description "Traffic class 4"; } enum "tc-5" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 5; description "Traffic class 5"; } enum "tc-6" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 6; description "Traffic class 6"; } enum "tc-7" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 7; description "Traffic class 7"; } enum "all" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 8; description "All Traffic class"; } enum "none" { value 9; description "No Traffic class"; } } description "Traffic class value"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 4294967295"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf measurement-quantity { type enumeration { enum "bytes" { value 0; description "Byte loss measurement"; } enum "packets" { value 1; description "Packet loss measurement"; } } default "packets"; description "Loss measurement quantity"; } leaf average-sample-size { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 30"; } } description "Number of samples used in average calculation"; } leaf loss-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Loss threshold value"; } leaf loss-threshold-window { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30"; } } description "Number of samples for loss threshold calculation"; } } // list traffic-class } // container loss container delay { description "Delay measurement options"; uses apply-advanced; list traffic-class { key "name"; description "Traffic class specific options"; leaf name { type enumeration { enum "tc-0" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 0; description "Traffic class 0"; } enum "tc-1" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 1; description "Traffic class 1"; } enum "tc-2" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 2; description "Traffic class 2"; } enum "tc-3" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 3; description "Traffic class 3"; } enum "tc-4" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 4; description "Traffic class 4"; } enum "tc-5" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 5; description "Traffic class 5"; } enum "tc-6" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 6; description "Traffic class 6"; } enum "tc-7" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 7; description "Traffic class 7"; } enum "all" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 8; description "All Traffic classes"; } } description "Traffic class value"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 4294967295"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf padding-size { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 1500"; } } description "Size of padding"; } leaf average-sample-size { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 30"; } } description "Number of samples used in average calculation"; } leaf twcd-delay-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Two way channel delay threshold value"; } leaf rtt-delay-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Round trip delay threshold value"; } } // list traffic-class } // container delay container loss-delay { description "Combined loss-delay measurement options"; uses apply-advanced; list traffic-class { key "name"; description "Traffic class specific options"; leaf name { type enumeration { enum "tc-0" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 0; description "Traffic class 0"; } enum "tc-1" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 1; description "Traffic class 1"; } enum "tc-2" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 2; description "Traffic class 2"; } enum "tc-3" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 3; description "Traffic class 3"; } enum "tc-4" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 4; description "Traffic class 4"; } enum "tc-5" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 5; description "Traffic class 5"; } enum "tc-6" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 6; description "Traffic class 6"; } enum "tc-7" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 7; description "Traffic class 7"; } enum "all" { junos:must "("protocols mpls statistics traffic-class-statistics")"; junos:must-message "Traffic class can be configured only for traffic-class-statistics"; value 8; description "All Traffic classes"; } enum "none" { value 9; description "No Traffic class"; } } description "Traffic class value"; } uses apply-advanced; leaf query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 4294967295"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf measurement-quantity { type enumeration { enum "bytes" { value 0; description "Byte loss measurement"; } enum "packets" { value 1; description "Packet loss measurement"; } } default "packets"; description "Loss measurement quantity"; } leaf padding-size { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 1500"; } } description "Size of padding"; } leaf average-sample-size { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 30"; } } description "Number of samples used in average calculation"; } leaf loss-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Loss threshold value"; } leaf loss-threshold-window { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30"; } } description "Number of samples for loss threshold calculation"; } leaf twcd-delay-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Two way channel delay threshold value"; } leaf rtt-delay-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Round trip delay threshold value"; } } // list traffic-class } // container loss-delay } // container querier container responder { junos:must "(".. .. .. ultimate-hop-popping")"; junos:must-message "Performance monitoring can be configured only on ultimate-hop-popping LSPs"; junos:must "(".. .. .. associate-lsp")"; junos:must-message "Performance monitoring can be configured only for associated LSPs"; description "Responder options"; uses apply-advanced; container loss { description "Loss measurement options"; uses apply-advanced; leaf min-query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 4294967295"; } } units "milliseconds"; description "Minimum query interval"; } } // container loss container delay { description "Delay measurement options"; uses apply-advanced; leaf min-query-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 4294967295"; } } units "milliseconds"; description "Minimum query interval"; } } // container delay } // container responder } // container performance-monitoring leaf lsp-ping-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "30 .. 3600"; } } units "seconds"; description "Time interval between LSP ping messages"; } leaf lsp-ping-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 5"; } } description "Number of ping reply missed before declaring BFD down"; } container traceoptions { description "Trace options for MPLSOAM process"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "configuration" { value 0; description "Trace configuration events"; } enum "pipe" { value 1; description "Trace pipe activity"; } enum "rpc-packet-details" { value 2; description "Trace RPC packet details"; } enum "database" { value 3; description "Trace database activity"; } enum "network" { value 4; description "Trace network activity"; } enum "traceroute" { value 5; description "Trace traceroute activity"; } enum "all" { value 6; description "Trace everything"; } } } } // list flag } // container traceoptions } // grouping periodic_oam grouping pim_bootstrap_options_type { uses apply-advanced; leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Eligibility to be the bootstrap router"; } leaf-list import { type jt:policy-algebra; ordered-by user; description "Bootstrap import policy"; } leaf-list export { type jt:policy-algebra; ordered-by user; description "Bootstrap export policy"; } } // grouping pim_bootstrap_options_type grouping pim_filter_obj { description "Filter to apply to tracing"; leaf match-on { type enumeration { enum "prefix" { value 0; description "Filter based on prefix"; } } description "Argument on which to match"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Filter policy"; } } // grouping pim_filter_obj grouping pim_rp_group_range_type { leaf name { type jt:ipprefix; } uses apply-advanced; leaf nexthop-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } units "milliseconds"; description "Nexthop hold time in milliseconds"; } } // grouping pim_rp_group_range_type grouping pm-rspan-vlan { description "RSPAN vlan for pm"; leaf name { junos:must "(!("vlans $$ forwarding-options filter"))"; junos:must-message "A vlan cannot both be an analyzer output vlan and have a filter applied to it."; type string; description "VLAN name or VLAN id"; } uses apply-advanced; leaf no-tag { type empty; description "Removes extra RSPAN tag from mirrored packets"; } } // grouping pm-rspan-vlan grouping pm_family_input_type { description "Input options for port mirroring"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } description "Number of samples after initial trigger"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9216"; } } units "bytes"; default "0"; description "Maximum length of the mirrored packet"; } } // grouping pm_family_input_type grouping programmable-rpd-type { uses apply-advanced; container traceoptions { description "Trace options"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "client" { value 0; description "Client events"; } enum "japi" { value 1; description "JAPI related traces"; } enum "routing-interface" { value 2; description "Routing interface traces"; } enum "route" { value 3; description "Trace routing information"; } enum "normal" { value 4; description "Trace normal events"; } enum "general" { value 5; description "Trace general events"; } enum "state" { value 6; description "Trace state transitions"; } enum "policy" { value 7; description "Trace policy processing"; } enum "task" { value 8; description "Trace routing protocol task processing"; } enum "timer" { value 9; description "Trace routing protocol timer processing"; } enum "all" { value 10; description "Trace everything"; } } } } // list flag } // container traceoptions container purge-timeout { presence "enable purge-timeout"; description "Purge timeout for all programmable-rpd clients in seconds"; choice purge-parm { leaf never { type empty; description "Client programmed objects are never purged"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 604800"; } } units "seconds"; description "Timeout value, in seconds, for purging client programmed objects"; } } // choice purge-parm } // container purge-timeout list client { key "name"; ordered-by user; description "Programmable-rpd client options"; leaf name { type string { length "1 .. 255"; } description "Client ID"; } uses apply-advanced; list interface-notification { key "name"; ordered-by user; description "Interfaces for notification"; leaf name { type string { length "1 .. 32"; } description "Interface"; } uses apply-advanced; } // list interface-notification } // list client container rib-service { presence "enable rib-service"; description "RIB service API options"; uses apply-advanced; container dynamic-next-hop-interface { presence "enable dynamic-next-hop-interface"; description "Update routes for next-hop interface changes"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable dynamic next-hop interface handling"; } } // choice enable-disable } // container dynamic-next-hop-interface } // container rib-service } // grouping programmable-rpd-type grouping qualified_nh_obj { leaf name { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } description "Next hop to destination"; } uses apply-advanced; leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of qualified next hop"; } leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric of qualified next hop"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface of qualified next hop"; } leaf mac-address { type jt:mac-unicast; description "Next-hop Mac Address"; } leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string"; } container bfd-liveness-detection { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; leaf version { type enumeration { enum "0" { value 0; description "BFD version 0 (deprecated)"; } enum "1" { value 1; description "BFD version 1"; } enum "automatic" { value 2; description "Choose BFD version automatically"; } } default "automatic"; description "BFD protocol version number"; } leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf minimum-transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; status deprecated; description "Minimum transmit interval"; } leaf minimum-receive-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } choice adaptation-choice { leaf no-adaptation { type empty; description "Disable adaptation"; } } // choice adaptation-choice container transmit-interval { description "Transmit-interval options"; uses apply-advanced; leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit interval"; } leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High transmit interval triggering a trap"; } } // container transmit-interval container detection-time { description "Detection-time options"; uses apply-advanced; leaf threshold { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "milliseconds"; description "High detection-time triggering a trap"; } } // container detection-time container authentication { description "Authentication options"; uses apply-advanced; leaf key-chain { junos:must "(".. algorithm")"; junos:must-message "May not be configured without algorithm"; junos:must "("security authentication-key-chains key-chain $$")"; junos:must-message "Referenced key-chain must be defined"; type string; description "Key chain name"; } leaf algorithm { junos:must "(".. key-chain")"; junos:must-message "May not be configured without key-chain"; type enumeration { enum "simple-password" { value 0; description "Simple password"; } enum "keyed-md5" { value 1; description "Keyed message Digest 5"; } enum "meticulous-keyed-md5" { value 2; description "Meticulous keyed message Digest 5"; } enum "keyed-sha-1" { value 3; description "Keyed secure hash algorithm (SHA1) "; } enum "meticulous-keyed-sha-1" { value 4; description "Meticulous keyed secure hash algorithm (SHA1) "; } } description "Algorithm name"; } leaf loose-check { type empty; description "Verify authentication only if authentication is negotiated"; } } // container authentication leaf neighbor { type jt:ipaddr; description "BFD neighbor address"; } leaf local-address { type jt:ipaddr; description "BFD local address (for multihop only)"; } leaf holddown-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255000"; } } units "milliseconds"; description "Time to hold the session-UP notification to the client"; } leaf minimum-receive-ttl { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } description "Minimum receive TTL below which to drop"; } } // container bfd-liveness-detection } // grouping qualified_nh_obj grouping reconfigure-trigger-type { description "DHCP reconfigure trigger"; uses apply-advanced; leaf radius-disconnect { type empty; description "Trigger DHCP reconfigure by radius initiated disconnect"; } } // grouping reconfigure-trigger-type grouping reconfigure-type { description "DHCP reconfigure processing"; uses apply-advanced; leaf clear-on-abort { type empty; description "Delete client on reconfiguration abort"; } leaf attempts { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of reconfigure attempts before aborting"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Initial timeout value for retry"; } leaf token { type string { length "1 .. 244"; } description "Reconfigure token"; } container trigger { description "DHCP reconfigure trigger"; uses reconfigure-trigger-type; } // container trigger leaf support-option-pd-exclude { type empty; description "Request prefix exclude option in reconfigure message"; } } // grouping reconfigure-type grouping relay-active-leasequery-v4-type { description "Configure active leasequery"; uses apply-advanced; leaf topology-discover { junos:must "(".. peer-address")"; junos:must-message "Must configure [peer-address] to configure topology-discover"; type empty; description "Topology discovery"; } list peer-address { key "name"; ordered-by user; description "Server ip address"; leaf name { type jt:ipaddr; description "Peer ip address"; } uses apply-advanced; } // list peer-address leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "120"; description "Read/write timeout in seconds"; } leaf idle-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "60"; description "Idle timeout in seconds"; } } // grouping relay-active-leasequery-v4-type grouping relay-active-leasequery-v6-type { description "Configure active leasequery"; uses apply-advanced; leaf topology-discover { junos:must "(".. peer-address")"; junos:must-message "Must configure [peer-address] to configure topology-discover"; type empty; description "Topology discovery"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "120"; description "Read/write timeout in seconds"; } leaf idle-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "60"; description "Idle timeout in seconds"; } list peer-address { key "name"; ordered-by user; description "Peer ipv6 address"; leaf name { type jt:ipv6addr; description "Peer ipv6 address"; } uses apply-advanced; } // list peer-address } // grouping relay-active-leasequery-v6-type grouping relay-bulk-leasequery-v4-type { junos:must "(".. overrides always-write-option-82")"; junos:must-message "Must configure [overrides always-write-option-82] to overwrite circuit-id for bulk-leasequery"; junos:must "((".. relay-option-82 circuit-id" && !((".. relay-option-82 circuit-id use-interface-description" || ".. relay-option-82 circuit-id require-interface-description"))))"; junos:must-message "Must configure [relay-option-82 circuit-id] without description to insert circuit-id for bulk-leasequery"; description "Configure bulk leasequery"; uses apply-advanced; leaf attempts { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 720"; } } default "360"; description "Number of retry attempts"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } units "seconds"; default "10"; description "Number of seconds"; } } // grouping relay-bulk-leasequery-v4-type grouping relay-bulk-leasequery-v6-type { junos:must "(".. relay-agent-interface-id")"; junos:must-message "Must configure [relay-agent-interface-id] to insert interface-id for bulk-leasequery"; description "Configure bulk leasequery"; uses apply-advanced; leaf attempts { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } default "6"; description "Number of retry attempts"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } units "seconds"; default "10"; description "Number of seconds"; } container trigger { description "Trigger for bulk leasequery"; leaf automatic { type empty; description "Trigger automatically"; } } // container trigger } // grouping relay-bulk-leasequery-v6-type grouping relay-leasequery-type { description "Configure leasequery"; uses apply-advanced; leaf attempts { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } default "6"; description "Number of retry attempts"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } units "seconds"; default "10"; description "Number of seconds"; } } // grouping relay-leasequery-type grouping relay-option-60-type-group { description "DHCP option-60 processing"; uses apply-advanced; container vendor-option { description "Add vendor option"; uses apply-advanced; container equals { description "Option 60 equals"; uses relay-option-60-match-group; } // container equals container not-equals { status deprecated; description "Option 60 does not equal"; uses relay-option-60-match-group; } // container not-equals container starts-with { description "Option 60 starts with"; uses relay-option-60-match-group; } // container starts-with choice server-group-choice { leaf default-relay-server-group { junos:must "(".. .. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is not made"; } leaf default-local-server-group { junos:must "(".. .. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is not made"; } leaf drop { type empty; description "Discard when a match is not made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is not made"; } } // choice server-group-choice } // container vendor-option } // grouping relay-option-60-type-group grouping relay-option-60-match-group { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "(".. .. .. .. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "(".. .. .. .. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "(".. .. .. .. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "(".. .. .. .. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list hexadecimal } // grouping relay-option-60-match-group grouping relay-option-60-type-top { description "DHCP option-60 processing"; uses apply-advanced; container vendor-option { description "Add vendor option"; uses apply-advanced; container equals { description "Option 60 equals"; uses relay-option-60-match-top; } // container equals container not-equals { status deprecated; description "Option 60 does not equal"; uses relay-option-60-match-top; } // container not-equals container starts-with { description "Option 60 starts with"; uses relay-option-60-match-top; } // container starts-with choice server-group-choice { leaf default-relay-server-group { junos:must "(".. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is not made"; } leaf default-local-server-group { junos:must "(".. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is not made"; } leaf drop { type empty; description "Discard when a match is not made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is not made"; } } // choice server-group-choice } // container vendor-option } // grouping relay-option-60-type-top grouping relay-option-60-match-top { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "(".. .. .. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "(".. .. .. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "(".. .. .. .. .. server-group $$")"; junos:must-message "Referenced group must be defined under [edit forwarding-options dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "(".. .. .. .. .. .. .. system services dhcp-local-server group $$")"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list hexadecimal } // grouping relay-option-60-match-top grouping relay-option-82-type { description "DHCP option-82 processing"; uses apply-advanced; container circuit-id { presence "enable circuit-id"; description "Add circuit identifier"; uses apply-advanced; container prefix { description "Add prefix to circuit/interface-id or remote-id"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to circuit / interface-id or remote-id"; } leaf logical-system-name { type empty; description "Add logical system name to circuit / interface-id or remote-id"; } leaf routing-instance-name { type empty; description "Add routing instance name to circuit / interface-id or remote-id"; } } // container prefix leaf use-interface-description { junos:must "(!(".. require-interface-description"))"; junos:must-message "use-interface-description may not be set with require-interface-desciption"; type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of circuit identifier"; } leaf use-vlan-id { junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))"; junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured"; type empty; description "Use VLAN id instead of name"; } container vlan-id-only { junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. user-defined" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. require-interface-description")))))))))"; junos:must-message "Vlan-id-only cannot be clubbed along with any other option-82 knob"; presence "enable vlan-id-only"; description "Use only VLAN id"; uses apply-advanced; } // container vlan-id-only leaf no-vlan-interface-name { type empty; description "Not include vlan or interface name"; } leaf include-irb-and-l2 { type empty; description "Include IRB and L2 interface name"; } leaf user-defined { junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. require-interface-description"))))))))"; junos:must-message "The user defined description for option 82 must be defined in order to see the usage and doesnt coexist with prefix"; type empty; description "Include user defined string"; } leaf keep-incoming-circuit-id { type empty; description "Keep incoming circuit identifier"; } } // container circuit-id container remote-id { presence "enable remote-id"; description "Add remote identifier"; uses apply-advanced; container prefix { description "Add prefix to circuit/interface-id or remote-id"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to circuit / interface-id or remote-id"; } leaf logical-system-name { type empty; description "Add logical system name to circuit / interface-id or remote-id"; } leaf routing-instance-name { type empty; description "Add routing instance name to circuit / interface-id or remote-id"; } } // container prefix leaf use-interface-description { junos:must "(!(".. require-interface-description"))"; junos:must-message "use-interface-description may not be set with require-interface-desciption"; type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of circuit identifier"; } leaf use-vlan-id { junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))"; junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured"; type empty; description "Use VLAN id instead of name"; } leaf no-vlan-interface-name { type empty; description "Not include vlan or interface name"; } leaf include-irb-and-l2 { type empty; description "Include IRB and L2 interface name"; } container hostname-only { junos:must "(!((".. include-irb-and-l2" || (".. keep-incoming-remote-id" || (".. no-vlan-interface-name" || (".. use-interface-description" || (".. use-vlan-id" || (".. prefix" || ".. use-string"))))))))"; junos:must-message "Hostname-only cannot be clubbed with any other sub-option"; presence "enable hostname-only"; description "Include hostname only"; uses apply-advanced; } // container hostname-only leaf keep-incoming-remote-id { type empty; description "Keep incoming remote identifier"; } leaf use-string { junos:must "(!((".. use-interface-description" || (".. require-interface-description" || (".. include-irb-and-l2" || (".. keep-incoming-circuit-id" || (".. no-vlan-interface-name" || ".. use-vlan-id")))))))"; junos:must-message "use-string can only coexist with prefix"; type string; description "Use raw string instead of the default remote id"; } } // container remote-id leaf server-id-override { junos:must "(!(".. link-selection"))"; junos:must-message "server-id-override cannot be configured with link-selection"; type empty; description "Add link-selection and server-id sub-options on packets to server"; } leaf link-selection { junos:must "(!(".. server-id-override"))"; junos:must-message "link-selection cannot be configured with server-id-override"; type empty; description "Add link-selection suboption on packets to server"; } leaf exclude-relay-agent-identifier { type empty; description "Exclude relay agent identifier from packets to server"; } container vendor-specific { description "Add vendor-specific information"; uses jdhcp-vendor-specific-type; } // container vendor-specific } // grouping relay-option-82-type grouping relay-v4-option-ascii-hex { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding dhcp-relay server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf local-server-group { junos:must "((".. .. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. .. system services dhcp-local-server group $$" || (".. .. .. .. .. .. system services dhcp-local-server group $$" || ".. .. .. .. .. system services dhcp-local-server group $$"))))"; junos:must-message "Referenced group must be defined under [edit system services dhcp-local-server group]"; type string { length "1 .. 64"; } description "Name of DHCP local server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list hexadecimal } // grouping relay-v4-option-ascii-hex grouping relay-v6-option-ascii-hex { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; choice server-group-choice { leaf relay-server-group { junos:must "((".. .. .. .. .. .. server-group $$" || (".. .. .. .. .. server-group $$" || (".. .. .. .. server-group $$" || ".. .. .. server-group $$"))))"; junos:must-message "Referenced group must be defined under [edit forwarding options dhcp-relay dhcpv6 server-group]"; type string { length "1 .. 64"; } description "Name of DHCP relay server group when match is made"; } leaf drop { type empty; description "Discard when a match is made"; } leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } } // choice server-group-choice } // list hexadecimal } // grouping relay-v6-option-ascii-hex grouping rib-inet3 { uses apply-advanced; container inet.3 { presence "enable inet.3"; description "Use inet.3 to exchange labeled unicast routes"; uses apply-advanced; } // container inet.3 } // grouping rib-inet3 grouping rib_aggregate_type { uses apply-advanced; container defaults { description "Global route options"; uses apply-advanced; container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf next-table { type string; description "Next hop to another table"; } choice brief_flag { leaf brief { type empty; description "Include longest common sequences from contributing paths"; } leaf full { type empty; description "Include all AS numbers from all contributing paths"; } } // choice brief_flag choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag } // container defaults list route { key "name"; ordered-by user; description "Individual route options"; leaf name { type jt:ipprefix; description "Destination prefix"; } uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Policy filter"; } container metric { presence "enable metric"; description "Metric value"; uses rib_static_metric_type; } // container metric container metric2 { presence "enable metric2"; description "Metric value 2"; uses rib_static_metric_type; } // container metric2 container metric3 { presence "enable metric3"; description "Metric value 3"; uses rib_static_metric_type; } // container metric3 container metric4 { presence "enable metric4"; description "Metric value 4"; uses rib_static_metric_type; } // container metric4 container tag { presence "enable tag"; description "Tag string"; uses rib_static_metric_type; } // container tag container tag2 { presence "enable tag2"; description "Tag string 2"; uses rib_static_metric_type; } // container tag2 container preference { presence "enable preference"; description "Preference value"; uses rib_static_metric_type; } // container preference container preference2 { presence "enable preference2"; description "Preference value 2"; uses rib_static_metric_type; } // container preference2 container color { presence "enable color"; description "Color (preference) value"; uses rib_static_metric_type; } // container color container color2 { presence "enable color2"; description "Color (preference) value 2"; uses rib_static_metric_type; } // container color2 leaf-list community { type jt:community; ordered-by user; description "BGP community identifier"; } container as-path { description "Autonomous system path"; uses apply-advanced; leaf path { type string; description "Autonomous system path"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } } leaf atomic-aggregate { type empty; description "Add ATOMIC_AGGREGATE path attribute to route"; } container aggregator { presence "enable aggregator"; description "Add AGGREGATOR path attribute to route"; } // container aggregator leaf as-number { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description " Autonomous system number in plain number or 'higher 16bits'.'Lower 16 bits' (asdot notation) format"; } leaf address { type jt:ipv4addr; description "Address of BGP system that formed the route"; } } // container as-path leaf discard { type empty; description "Drop packets to destination; send no ICMP unreachables"; } leaf next-table { type string; description "Next hop to another table"; } choice brief_flag { leaf brief { type empty; description "Include longest common sequences from contributing paths"; } leaf full { type empty; description "Include all AS numbers from all contributing paths"; } } // choice brief_flag choice passive_flag { leaf active { type empty; description "Remove inactive route from forwarding table"; } leaf passive { type empty; description "Retain inactive route in forwarding table"; } } // choice passive_flag } // list route } // grouping rib_aggregate_type grouping rib_group_inet_type { description "Routing table group"; leaf ribgroup-name { type string; description "Name of the routing table group"; } } // grouping rib_group_inet_type grouping rib_group_type { uses apply-advanced; leaf inet-old-style { type string; status deprecated; description "Name of the IPv4 routing table group"; } leaf inet { type string; description "Name of the IPv4 routing table group"; } leaf inet3 { type string; description "Name of the IPv4 inet.3 routing table group"; } leaf inet6 { type string; description "Name of the IPv6 routing table group"; } leaf inet63 { type string; description "Name of the IPv6 inet6.3 routing table group"; } } // grouping rib_group_type grouping rib_static_metric_type { leaf metric-value { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Metric type"; } } // grouping rib_static_metric_type grouping rip_filter_obj { description "Filter to apply to tracing"; leaf match-on { type enumeration { enum "prefix" { value 0; description "Filter based on prefix"; } } description "Argument on which to match"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Filter policy"; } } // grouping rip_filter_obj grouping route_record_traceoptions { description "Traceoptions for sampling route record"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Area of route-record to enable debuging output"; leaf name { type enumeration { enum "parse" { value 0; description "Trace parsing code"; } enum "all" { value 1; description "Trace all area of jflow-service code"; } } } } // list flag } // grouping route_record_traceoptions grouping rpd_rib_group_type { description "Routing table group"; leaf name { type string; description "Routing table group"; } uses apply-advanced; leaf export-rib { type string; description "Export routing table"; } leaf-list import-rib { type string; ordered-by user; description "Import routing table"; } leaf-list import-policy { type jt:policy-algebra; ordered-by user; description "Import policy"; } } // grouping rpd_rib_group_type grouping sampling_family_inet6_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_inet6_sampling_type; } // list flow-server list interface { junos:must "((any ".. flow-server <*>" || any ".. extension-service <*>"))"; junos:must-message "'flow-server' or 'extension-service' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline; } // container inline-jflow list extension-service { junos:must "(!(".. flow-active-timeout"))"; junos:must-message "'.. flow-active-timeout' is not needed with 'extension-service'"; junos:must "(!(".. flow-inactive-timeout"))"; junos:must-message "'.. flow-inactive-timeout' is not valid for 'extension-service'"; junos:must "(!(".. aggregate-export-interval"))"; junos:must-message "'.. aggregate-export-interval' is not valid for 'extension-service'"; junos:must "(!(any ".. flow-server <*>"))"; junos:must-message "'.. flow-server' is not needed with 'extension-service'"; junos:must "(!(any ".. interface <*> source-address"))"; junos:must-message "'.. interface source-address' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-id"))"; junos:must-message "'.. interface engine-id' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-type"))"; junos:must-message "'.. interface engine-type' is not valid for 'extension-service'"; junos:must "(any ".. interface <*>")"; junos:must-message "'.. interface' must be specified with 'extension-service'"; key "name"; ordered-by user; description "Define the customer specific sampling configuration"; leaf name { type string { length "1 .. 63"; } description "Customer prefixed sampling service name"; } uses apply-advanced; } // list extension-service } // grouping sampling_family_inet6_output_type grouping cflowd_sampling_inet6_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } } // grouping cflowd_sampling_inet6_sampling_type grouping packet_export_inline { uses apply-advanced; leaf source-address { type jt:ipaddr; description "Address to use for generating monitored packets"; } leaf flow-export-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3200"; } } description "Flow export rate of monitored packets in kpps"; } } // grouping packet_export_inline grouping sampling_family_input_type { description "Configure input options for packet sampling"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } default "0"; description "Number of samples after initial trigger"; } leaf max-packets-per-second { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "1000"; description "Threshold of samples per second before dropping"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9192"; } } units "bytes"; default "0"; description "Maximum length of the sampled packet"; } } // grouping sampling_family_input_type grouping sampling_global_mpls_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_global_mpls_sampling_type; } // list flow-server list interface { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface } // grouping sampling_global_mpls_output_type grouping cflowd_global_mpls_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } } // grouping cflowd_global_mpls_sampling_type grouping sampling_input_type { description "Configure input options for packet sampling"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } default "0"; description "Number of samples after initial trigger"; } leaf max-packets-per-second { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "1000"; description "Threshold of samples per second before dropping"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9192"; } } units "bytes"; default "0"; description "Maximum length of the sampled packet"; } container family { presence "enable family"; status deprecated; description "Protocol family"; container inet { description "Sampling parameters for IPv4"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } default "0"; description "Number of samples after initial trigger"; } leaf max-packets-per-second { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "1000"; description "Threshold of samples per second before dropping"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9192"; } } units "bytes"; default "0"; description "Maximum length of the sampled packet"; } } // container inet container mpls { description "Sampling parameters for MPLS"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } default "0"; description "Number of samples after initial trigger"; } leaf max-packets-per-second { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "1000"; description "Threshold of samples per second before dropping"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9192"; } } units "bytes"; default "0"; description "Maximum length of the sampled packet"; } } // container mpls } // container family } // grouping sampling_input_type grouping sampling_instance_bridge_output_type { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { junos:must "(".. inline-jflow")"; junos:must-message "Output 'inline Jflow' should be configured with flow-server"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_instance_bridge_sampling_type; } // list flow-server container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline_instance; } // container inline-jflow } // grouping sampling_instance_bridge_output_type grouping cflowd_instance_bridge_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } } // grouping cflowd_instance_bridge_sampling_type grouping packet_export_inline_instance { uses apply-advanced; leaf source-address { type jt:ipaddr; description "Address to use for generating monitored packets"; } leaf flow-export-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 3200"; } } description "Flow export rate of monitored packets in kpps"; } } // grouping packet_export_inline_instance grouping sampling_instance_inet6_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_instance_inet6_sampling_type; } // list flow-server list interface { junos:must "((any ".. flow-server <*>" || any ".. extension-service <*>"))"; junos:must-message "'flow-server' or 'extension-service' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline_instance; } // container inline-jflow list extension-service { junos:must "(!(".. flow-active-timeout"))"; junos:must-message "'.. flow-active-timeout' is not needed with 'extension-service'"; junos:must "(!(".. flow-inactive-timeout"))"; junos:must-message "'.. flow-inactive-timeout' is not valid for 'extension-service'"; junos:must "(!(".. aggregate-export-interval"))"; junos:must-message "'.. aggregate-export-interval' is not valid for 'extension-service'"; junos:must "(!(any ".. flow-server <*>"))"; junos:must-message "'.. flow-server' is not needed with 'extension-service'"; junos:must "(!(any ".. interface <*> source-address"))"; junos:must-message "'.. interface source-address' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-id"))"; junos:must-message "'.. interface engine-id' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-type"))"; junos:must-message "'.. interface engine-type' is not valid for 'extension-service'"; junos:must "(any ".. interface <*>")"; junos:must-message "'.. interface' must be specified with 'extension-service'"; key "name"; ordered-by user; description "Define the customer specific sampling configuration"; leaf name { type string { length "1 .. 63"; } description "Customer prefixed sampling service name"; } uses apply-advanced; } // list extension-service } // grouping sampling_instance_inet6_output_type grouping cflowd_instance_inet6_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } } // grouping cflowd_instance_inet6_sampling_type grouping sampling_instance_inet_global_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } container file { junos:must "(!(any ".. extension-service <*>"))"; junos:must-message "This configuration is not required with 'extension-service'"; description "Configure parameters for dumping sampled packets"; choice enable-disable { leaf disable { type empty; description "Disable sampled packet dumps"; } } // choice enable-disable leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file to contain sampled packet dumps"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10000"; } } default "10"; description "Maximum number of sampled packet dump files"; } leaf size { type string; description "Maximum sample dump file size"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the sampled dump"; } leaf no-world-readable { type empty; description "Don't allow any user to read the sampled dump"; } } // choice world-readable-choice choice stamp-choice { leaf stamp { type empty; description "Timestamp every packet in the dump"; } leaf no-stamp { type empty; description "Don't timestamp every packet in the dump"; } } // choice stamp-choice } // container file container port-mirroring { junos:must "(!(any ".. extension-service <*>"))"; junos:must-message "This configuration is not required with 'extension-service'"; presence "enable port-mirroring"; description "Configure sending sampled traffic out through an interface"; uses inet_pm_family_output_type; } // container port-mirroring list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_inet_type; } // list flow-server list interface { junos:must "((any ".. flow-server <*>" || any ".. extension-service <*>"))"; junos:must-message "'flow-server' or 'extension-service' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface list extension-service { junos:must "(!(".. flow-active-timeout"))"; junos:must-message "'.. flow-active-timeout' is not needed with 'extension-service'"; junos:must "(!(".. flow-inactive-timeout"))"; junos:must-message "'.. flow-inactive-timeout' is not valid for 'extension-service'"; junos:must "(!(".. aggregate-export-interval"))"; junos:must-message "'.. aggregate-export-interval' is not valid for 'extension-service'"; junos:must "(!(any ".. flow-server <*>"))"; junos:must-message "'.. flow-server' is not needed with 'extension-service'"; junos:must "(!(any ".. interface <*> source-address"))"; junos:must-message "'.. interface source-address' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-id"))"; junos:must-message "'.. interface engine-id' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-type"))"; junos:must-message "'.. interface engine-type' is not valid for 'extension-service'"; junos:must "(any ".. interface <*>")"; junos:must-message "'.. interface' must be specified with 'extension-service'"; key "name"; ordered-by user; description "Define the customer specific sampling configuration"; leaf name { type string { length "1 .. 63"; } description "Customer prefixed sampling service name"; } uses apply-advanced; } // list extension-service } // grouping sampling_instance_inet_global_output_type grouping cflowd_sampling_inet_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } leaf version { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; type enumeration { enum "5" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 0; description "Export cflowd aggregates in version 5 format"; } enum "8" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 1; description "Export cflowd aggregates in version 8 format"; } enum "500" { junos:must "(!(".. .. interface"))"; junos:must-message "This feature is only supported for RE based sampling"; junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 2; description "Export cflowd aggregates in ASN 500 format"; } } default "5"; description "Format of exported cflowd aggregates"; } } // grouping cflowd_sampling_inet_type grouping sampling_instance_inet_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; junos:must "((".. interface" || ".. inline-jflow"))"; junos:must-message "Output 'interface' or 'inline Jflow' should be configured with flow-server"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_instance_inet_sampling_type; } // list flow-server list interface { junos:must "((any ".. flow-server <*>" || any ".. extension-service <*>"))"; junos:must-message "'flow-server' or 'extension-service' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline_instance; } // container inline-jflow list extension-service { junos:must "(!(".. flow-active-timeout"))"; junos:must-message "'.. flow-active-timeout' is not needed with 'extension-service'"; junos:must "(!(".. flow-inactive-timeout"))"; junos:must-message "'.. flow-inactive-timeout' is not valid for 'extension-service'"; junos:must "(!(".. aggregate-export-interval"))"; junos:must-message "'.. aggregate-export-interval' is not valid for 'extension-service'"; junos:must "(!(any ".. flow-server <*>"))"; junos:must-message "'.. flow-server' is not needed with 'extension-service'"; junos:must "(!(any ".. interface <*> source-address"))"; junos:must-message "'.. interface source-address' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-id"))"; junos:must-message "'.. interface engine-id' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-type"))"; junos:must-message "'.. interface engine-type' is not valid for 'extension-service'"; junos:must "(any ".. interface <*>")"; junos:must-message "'.. interface' must be specified with 'extension-service'"; key "name"; ordered-by user; description "Define the customer specific sampling configuration"; leaf name { type string { length "1 .. 63"; } description "Customer prefixed sampling service name"; } uses apply-advanced; } // list extension-service } // grouping sampling_instance_inet_output_type grouping cflowd_instance_inet_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } leaf version { junos:must "(!(any ".. .. .. .. .. family mpls output flow-server <*> version9"))"; junos:must-message "Select only one version"; junos:must "(!(any ".. .. .. .. .. family inet6 output flow-server <*> version9"))"; junos:must-message "Select only one version"; junos:must "(!(any ".. .. .. .. .. family inet output flow-server <*> version9"))"; junos:must-message "Select only one version"; junos:must "(!(any ".. .. flow-server <*> version-ipfix"))"; junos:must-message "Select only one version"; junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; type enumeration { enum "5" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 0; description "Export cflowd aggregates in version 5 format"; } enum "8" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 1; description "Export cflowd aggregates in version 8 format"; } } default "5"; description "Format of exported cflowd aggregates"; } } // grouping cflowd_instance_inet_sampling_type grouping sampling_instance_input_type { description "Configure input options for packet sampling"; uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ratio of packets to be sampled (1 out of N)"; } leaf run-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 20"; } } default "0"; description "Number of samples after initial trigger"; } leaf max-packets-per-second { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "1000"; description "Threshold of samples per second before dropping"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9192"; } } units "bytes"; default "0"; description "Maximum length of the sampled packet"; } } // grouping sampling_instance_input_type grouping sampling_instance_mpls_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; junos:must "((".. interface" || ".. inline-jflow"))"; junos:must-message "Output 'interface' or 'inline Jflow' should be configured with flow-server"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_instance_mpls_sampling_type; } // list flow-server list interface { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline_instance; } // container inline-jflow } // grouping sampling_instance_mpls_output_type grouping cflowd_instance_mpls_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } } // grouping cflowd_instance_mpls_sampling_type grouping sampling_instance_vpls_output_type { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { junos:must "(".. inline-jflow")"; junos:must-message "Output 'inline Jflow' should be configured with flow-server"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_instance_vpls_sampling_type; } // list flow-server container inline-jflow { junos:must "(any ".. flow-server <*>")"; junos:must-message "'flow-server' must be specified with the inline Jflow"; presence "enable inline-jflow"; description "Inline processing of sampled packets"; uses packet_export_inline_instance; } // container inline-jflow } // grouping sampling_instance_vpls_output_type grouping cflowd_instance_vpls_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } } // grouping cflowd_instance_vpls_sampling_type grouping sampling_output_type { description "Configure output options for packet sampling"; uses apply-advanced; leaf aggregate-export-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "90 .. 1800"; } } units "seconds"; default "90"; description "Interval of exporting aggregate accounting information"; } leaf flow-inactive-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "15 .. 1800"; } } units "seconds"; default "60"; description "Interval of inactivity that marks a flow inactive"; } leaf flow-active-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1800"; } } units "seconds"; default "1800"; description "Interval after which an active flow is exported"; } container file { junos:must "(!(any ".. extension-service <*>"))"; junos:must-message "This configuration is not required with 'extension-service'"; description "Configure parameters for dumping sampled packets"; choice enable-disable { leaf disable { type empty; description "Disable sampled packet dumps"; } } // choice enable-disable leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file to contain sampled packet dumps"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10000"; } } default "10"; description "Maximum number of sampled packet dump files"; } leaf size { type string; description "Maximum sample dump file size"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the sampled dump"; } leaf no-world-readable { type empty; description "Don't allow any user to read the sampled dump"; } } // choice world-readable-choice choice stamp-choice { leaf stamp { type empty; description "Timestamp every packet in the dump"; } leaf no-stamp { type empty; description "Don't timestamp every packet in the dump"; } } // choice stamp-choice } // container file container port-mirroring { junos:must "(!(any ".. extension-service <*>"))"; junos:must-message "This configuration is not required with 'extension-service'"; presence "enable port-mirroring"; description "Configure sending sampled traffic out through an interface"; uses inet_pm_family_output_type; } // container port-mirroring list flow-server { junos:must "((!(any ".. interface <*>") || all ".. interface <*> source-address"))"; junos:must-message "'output interface source-address' must be specified with 'flow-server' and 'interface'"; key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_type; } // list flow-server list interface { junos:must "((any ".. flow-server <*>" || any ".. extension-service <*>"))"; junos:must-message "'flow-server' or 'extension-service' must be specified with 'interface'"; key "name"; max-elements 1; description "Interfaces used to send monitored information"; uses packet_export_intf_type; } // list interface list extension-service { junos:must "(!(".. flow-active-timeout"))"; junos:must-message "'.. flow-active-timeout' is not needed with 'extension-service'"; junos:must "(!(".. flow-inactive-timeout"))"; junos:must-message "'.. flow-inactive-timeout' is not valid for 'extension-service'"; junos:must "(!(".. aggregate-export-interval"))"; junos:must-message "'.. aggregate-export-interval' is not valid for 'extension-service'"; junos:must "(!(any ".. flow-server <*>"))"; junos:must-message "'.. flow-server' is not needed with 'extension-service'"; junos:must "(!(any ".. interface <*> source-address"))"; junos:must-message "'.. interface source-address' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-id"))"; junos:must-message "'.. interface engine-id' is not valid for 'extension-service'"; junos:must "(!(any ".. interface <*> engine-type"))"; junos:must-message "'.. interface engine-type' is not valid for 'extension-service'"; junos:must "(any ".. interface <*>")"; junos:must-message "'.. interface' must be specified with 'extension-service'"; key "name"; ordered-by user; description "Define the customer specific sampling configuration"; leaf name { type string { length "1 .. 63"; } description "Customer prefixed sampling service name"; } uses apply-advanced; } // list extension-service } // grouping sampling_output_type grouping cflowd_sampling_type { leaf name { type jt:ipaddr; description "Name of host collecting cflowd packets"; } uses apply-advanced; leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "UDP port number on host collecting cflowd packets"; } leaf routing-instance { junos:must "(".. .. inline-jflow")"; junos:must-message "Routing Instances can be configured for inline-jflow"; junos:must "("routing-instances $$ instance-type vrf")"; junos:must-message "routing instance should be defined and should be of type Virtual routing forwarding instance(VRF)"; type string; description "Name of routing instance on which flow collector is reachable"; } leaf autonomous-system-type { type enumeration { enum "origin" { value 0; description "Export origin-AS numbers"; } enum "peer" { value 1; description "Export peer-AS numbers"; } } default "origin"; description "Type of autonomous system number to export"; } container aggregation { junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; description "Aggregations to perform for exported flows (version 8 only)"; uses aggregation_type; } // container aggregation choice local-dump-choice { leaf local-dump { type empty; description "Dump cflowd records to log file before exporting"; } leaf no-local-dump { type empty; description "Don't dump cflowd records to log file before exporting"; } } // choice local-dump-choice leaf source-address { type jt:ipv4addr; description "Source IPv4 address for cflowd packets"; } leaf version { junos:must "("forwarding-options sampling input family inet")"; junos:must-message "input 'family inet' must be configured"; junos:must "(!(any ".. .. flow-server <*> version9"))"; junos:must-message "Select only one version"; type enumeration { enum "5" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 0; description "Export cflowd aggregates in version 5 format"; } enum "8" { junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 1; description "Export cflowd aggregates in version 8 format"; } enum "500" { junos:must "(!(".. .. interface"))"; junos:must-message "This feature is only supported for RE based sampling"; junos:must "("system ntp")"; junos:must-message " NTP must be configured for sampling v5/8/500 to work properly"; value 2; description "Export cflowd aggregates in ASN 500 format"; } } default "5"; description "Format of exported cflowd aggregates"; } } // grouping cflowd_sampling_type grouping sampling_traceoptions_type { description "Configure packet sampling traceoptions"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file } // grouping sampling_traceoptions_type grouping security-dhcpv6-options-type { description "Configure DHCPv6 options"; uses apply-advanced; container option-37 { presence "enable option-37"; description "Configure DHCPv6 remote identifier option"; uses apply-advanced; container prefix { description "Configure DHCPv6 remote identifier prefix"; uses apply-advanced; leaf host-name { type empty; description "Prefix router host name to DHCPv6 remote identifier"; } leaf logical-system-name { type empty; description "Prefix logical system name to DHCPv6 remote identifier"; } leaf routing-instance-name { type empty; description "Prefix routing instance name to DHCPv6 remote identifier"; } leaf vlan-name { type empty; description "Prefix vlan name to DHCPv6 remote identifier"; } leaf vlan-id { type empty; description "Prefix vlan tag to DHCPv6 remote identifier"; } } // container prefix leaf use-interface-mac { type empty; description "Add incoming interface's MAC address to DHCPv6 remote identifier"; } leaf use-interface-index { type enumeration { enum "logical" { value 0; description "Use the logical interface index"; } enum "device" { value 1; description "Use the device interface index"; } } description "Add interface index to DHCPv6 remote identifier"; } leaf use-interface-name { type enumeration { enum "logical" { value 0; description "Use the logical interface name"; } enum "device" { value 1; description "Use the device interface name"; } } description "Add interface name to DHCPv6 remote identifier"; } leaf use-interface-description { type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Add interface description to DHCPv6 remote identifier"; } leaf use-string { junos:must "(!(".. use-interface-description"))"; junos:must-message "use-string and use-interface-description cannot be configured together"; type string; description "Add custom string to DHCPv6 remote identifier"; } } // container option-37 container option-18 { presence "enable option-18"; description "Configure DHCPv6 interface identifier option"; uses apply-advanced; container prefix { description "Configure DHCPv6 interface identifier prefix"; uses apply-advanced; leaf host-name { type empty; description "Prefix router host name to DHCPv6 interface identifier"; } leaf logical-system-name { type empty; description "Prefix logical system name to DHCPv6 interface identifier"; } leaf routing-instance-name { type empty; description "Prefix routing instance name to DHCPv6 interface identifier"; } leaf vlan-name { type empty; description "Prefix vlan name to DHCPv6 interface identifier"; } leaf vlan-id { type empty; description "Prefix vlan tag to DHCPv6 interface identifier"; } } // container prefix leaf use-interface-mac { type empty; description "Add incoming interface's MAC address to DHCPv6 circuit identifier"; } leaf use-interface-index { type enumeration { enum "logical" { value 0; description "Use the logical interface index"; } enum "device" { value 1; description "Use the device interface index"; } } description "Add interface index to DHCPv6 interface identifier"; } leaf use-interface-name { type enumeration { enum "logical" { value 0; description "Use the logical interface name"; } enum "device" { value 1; description "Use the device interface name"; } } description "Add interface name to DHCPv6 remote identifier"; } leaf use-interface-description { type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Add interface description to DHCPv6 interface identifier"; } leaf use-string { junos:must "(!(".. use-interface-description"))"; junos:must-message "use-string and use-interface-description cannot be configured together"; type string; description "Add custom string to DHCPv6 interface identifier"; } } // container option-18 container option-16 { presence "enable option-16"; description "Configure DHCPv6 vendor class identifier option. Overwrite if exists"; uses apply-advanced; leaf use-string { type string; description "Add custom string to DHCPv6 vendor identifier"; } } // container option-16 leaf option-79 { junos:must "(".. .. light-weight-dhcpv6-relay")"; junos:must-message "Option-79 can be configured only on LDRAs"; type empty; description "Configure DHCPv6 client link layer address option"; } } // grouping security-dhcpv6-options-type grouping security-option-82-type { description "DHCP option-82 processing"; uses apply-advanced; container circuit-id { presence "enable circuit-id"; description "Configure DHCP option 82 circuit id"; uses apply-advanced; container prefix { description "Configure DHCP option 82 circuit id prefix"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to DHCP option-82 circuit id"; } leaf logical-system-name { type empty; description "Add logical system name to DHCP option-82 circuit id"; } leaf routing-instance-name { type empty; description "Add routing instance name to DHCP option-82 circuit id"; } } // container prefix leaf use-interface-description { type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of circuit identifier"; } leaf use-vlan-id { type empty; description "Use VLAN id instead of name"; } } // container circuit-id container remote-id { presence "enable remote-id"; description "Configure DHCP option 82 remote id"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to DHCP option-82 remote id"; } leaf use-interface-description { type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of interface name"; } leaf use-string { junos:must "(!(".. use-interface-description"))"; junos:must-message "use-string and use-interface-description cannot be configured together"; type string; description "Use raw string instead of the default remote id"; } leaf mac { type empty; description "Add chassis MAC Address to DHCP option-82 remote id"; } } // container remote-id container vendor-id { presence "enable vendor-id"; description "Configure DHCP option 82 vendor id"; uses apply-advanced; leaf use-string { type string; default "Juniper Networks"; description "Use raw string instead of the default vendor id"; } } // container vendor-id } // grouping security-option-82-type grouping server-active-leasequery-type { description "Allow active leasequery"; uses apply-advanced; leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "120"; description "Read/write timeout in seconds"; } leaf idle-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; default "60"; description "Idle-timeout in seconds"; } } // grouping server-active-leasequery-type grouping server-bulk-leasequery-type { description "Allow bulk leasequery"; uses apply-advanced; leaf max-connections { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } default "3"; description "Max TCP connections allowed at a time"; } leaf timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } units "seconds"; default "120"; description "Timeout for blocked connection"; } leaf max-empty-replies { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } units "seconds"; default "5"; description "Maximum number of empty replies for a connection"; } leaf restricted-requestor { type empty; description "Allow bulk leasequery only from restricted requestors"; } } // grouping server-bulk-leasequery-type grouping server-group-type { uses apply-advanced; list server-group { key "name"; ordered-by user; description "One or more server groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "Server group name"; } uses apply-advanced; list address { key "name"; max-elements 32; ordered-by user; description "IP Address of one or more DHCP servers"; leaf name { type jt:ipaddr; description "IP Address of DHCP server"; } uses apply-advanced; } // list address } // list server-group } // grouping server-group-type grouping server-leasequery-type { description "Allow leasequery"; uses apply-advanced; leaf restricted-requestor { type empty; description "Allow leasequery only from restricted requestors"; } } // grouping server-leasequery-type grouping server-match-action-choice { uses apply-advanced; choice v4-action-choice { leaf forward-only { type empty; description "Forward without subscriber services"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice v4-action-choice } // grouping server-match-action-choice grouping server-match-v6-ascii-hex { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; choice server-match-action-choice { leaf forward-only { type empty; description "Forward without subscriber services when a match is made"; } leaf create-relay-entry { type empty; description "Create relay entry and allow subscriber services"; } } // choice server-match-action-choice } // list hexadecimal } // grouping server-match-v6-ascii-hex grouping server-v6-option-ascii-hex { uses apply-advanced; list ascii { key "name"; description "ASCII string"; leaf name { type string { length "1 .. 256"; } description "ASCII string"; } uses apply-advanced; } // list ascii list hexadecimal { key "name"; description "Hexadecimal string"; leaf name { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 512"; } description "Hexadecimal string"; } uses apply-advanced; } // list hexadecimal } // grouping server-v6-option-ascii-hex grouping smpl-analyzer-type { leaf name { junos:must "(!("forwarding-options sampling instance $$"))"; junos:must-message "analyzer must not have the same name as of any other sampling instance"; junos:must "(!("forwarding-options port-mirroring instance $$"))"; junos:must-message "analyzer must not have the same name as of any other port mirror instance"; type string { junos:posix-pattern "^[[:alpha:]][[:alnum:]_-]+$"; junos:pattern-message "Must be a string beginning with a letter and consisting of letters, numbers, dashes, and underscores"; length "1 .. 63"; } description "Analyzer name"; } uses apply-advanced; container input { description "Ports and VLANs to monitor"; uses smpl-analyzer-input-type; } // container input container output { description "Outgoing port or VLAN for mirrored packets"; uses smpl-analyzer-output-type; } // container output } // grouping smpl-analyzer-type grouping smpl-analyzer-input-type { uses apply-advanced; leaf rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Ratio of packets to be sampled (1 out of N)"; } leaf maximum-packet-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9216"; } } units "bytes"; description "Maximum length of the mirrored packet"; } container ingress { description "Ports and VLANs to monitor incoming traffic"; uses smpl-analyzer-ingress-type; } // container ingress container egress { description "Ports and VLANs to monitor outgoing traffic"; uses smpl-analyzer-egress-type; } // container egress } // grouping smpl-analyzer-input-type grouping smpl-analyzer-egress-type { uses apply-advanced; list interface { key "name"; ordered-by user; description "Port to monitor outgoing traffic"; uses analyzer-egress-interface-type; } // list interface list routing-instance { key "name"; description "Routing instances"; uses analyzer-egress-routing-instance-type; } // list routing-instance list vlan { key "name"; ordered-by user; description "VLAN to monitor outgoing traffic"; uses analyzer-egress-vlan-type; } // list vlan } // grouping smpl-analyzer-egress-type grouping analyzer-egress-interface-type { leaf name { type string; description "Logical interface name"; } uses apply-advanced; } // grouping analyzer-egress-interface-type grouping analyzer-egress-routing-instance-type { leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; list vlan { key "name"; ordered-by user; description "VLAN to monitor outgoing traffic"; uses analyzer-egress-vlan-type; } // list vlan } // grouping analyzer-egress-routing-instance-type grouping analyzer-egress-vlan-type { leaf name { junos:must "(!(any "forwarding-options analyzer <*> output vlan $$"))"; junos:must-message "vlan must not be output of any analyzer session"; junos:must "(unique "forwarding-options analyzer <*> input egress vlan $$")"; junos:must-message "vlan must not be input egress to any other analyzer"; type string; description "VLAN name, VLAN id or VLAN range string"; } uses apply-advanced; } // grouping analyzer-egress-vlan-type grouping smpl-analyzer-ingress-type { uses apply-advanced; list interface { key "name"; ordered-by user; description "Port to monitor incoming traffic"; uses analyzer-ingress-interface-type; } // list interface list routing-instance { key "name"; description "Routing instances"; uses analyzer-ingress-routing-instance-type; } // list routing-instance list vlan { key "name"; ordered-by user; description "VLAN to monitor incoming traffic"; uses analyzer-ingress-vlan-type; } // list vlan } // grouping smpl-analyzer-ingress-type grouping analyzer-ingress-interface-type { leaf name { type string; description "Logical interface name"; } uses apply-advanced; } // grouping analyzer-ingress-interface-type grouping analyzer-ingress-routing-instance-type { leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; list vlan { key "name"; ordered-by user; description "VLAN to monitor incoming traffic"; uses analyzer-ingress-vlan-type; } // list vlan } // grouping analyzer-ingress-routing-instance-type grouping analyzer-ingress-vlan-type { leaf name { junos:must "(!(any "forwarding-options analyzer <*> output vlan $$"))"; junos:must-message "vlan must not be output of any analyzer session"; junos:must "(unique "forwarding-options analyzer <*> input ingress vlan $$")"; junos:must-message "vlan must not be input ingress to any other analyzer"; junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "vlan-id-list cannot be configured on forwarding-options analyzer"; type string; description "VLAN name, VLAN id or VLAN range string"; } uses apply-advanced; } // grouping analyzer-ingress-vlan-type grouping smpl-analyzer-output-type { uses apply-advanced; choice interface_or_vlan { leaf interface { junos:must "(!("interfaces $$-IFL family inet"))"; junos:must-message "An interface configured as family inet cannot be configured as analyzer output interface"; junos:must "(!(("interfaces $$-IFL family inet" || "interfaces $$-IFL family inet6")))"; junos:must-message "An interface configured as family inet/inet6 cannot be configured as analyzer output interface"; junos:must "(!(("interfaces $$-IFL family ethernet-switching filter" || ("interfaces $$-IFL family inet filter" || "interfaces $$-IFL family inet6 filter"))))"; junos:must-message "An interface cannot both be an analyzer output interface and have a filter applied to it."; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Outgoing port for mirrored packets"; } leaf ip-address { type jt:ipv4addr; description "ERSPAN Destination IP Address"; } leaf ipv6-address { type jt:ipv6addr; description "ERSPAN Destination IPv6 Address"; } leaf next-hop-group { junos:must "("forwarding-options next-hop-group $$ group-type layer-2")"; junos:must-message "Referenced next-hop-group must be defined as layer-2 group"; type string; description "Next-hop-group through which to send port-mirror traffic"; } list routing-instance { key "name"; max-elements 1; description "Routing instances"; uses output-routing-instance-type; } // list routing-instance list vlan { key "name"; max-elements 1; description "Outgoing VLAN for mirrored packets"; uses pm-rspan-vlan; } // list vlan case case_7 { } // case case_7 } // choice interface_or_vlan } // grouping smpl-analyzer-output-type grouping output-routing-instance-type { leaf name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance name"; } uses apply-advanced; choice ipaddr_or_vlan { leaf ip-address { type jt:ipv4addr; description "ERSPAN Destination IP Address"; } leaf ipv6-address { type jt:ipv6addr; description "ERSPAN Destination IPv6 Address"; } list vlan { key "name"; max-elements 1; description "Outgoing VLAN for mirrored packets"; uses pm-rspan-vlan; } // list vlan case case_4 { } // case case_4 } // choice ipaddr_or_vlan } // grouping output-routing-instance-type grouping spring-te-template-map { description "SPRING-TE template color map"; leaf name { junos:must "("protocols source-packet-routing source-routing-path-template $$ primary")"; junos:must-message "Referenced spring-te template doesn't exist or primary not configured in it"; type string; description "Name of SPRING-TE template"; } uses apply-advanced; choice colors { leaf-list color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Set of color list to be mapped to corresponding SPRING-TE template"; } leaf color-any { type empty; description "Map any color to corresponding SPRING-TE template"; } } // choice colors } // grouping spring-te-template-map grouping springte_lsp_nh_obj { uses apply-advanced; leaf nexthop { type string { length "1 .. 128"; } description "SPRING-TE LSP to use to reach destination"; } container lsp-source { description "Source of tunnel creation"; uses apply-advanced; choice lsp-src-choice { leaf pcep { type empty; description "Path computation element protocol"; } leaf static { type empty; description "Static configuration"; } leaf dtm { type empty; description "Dynamic tunnel module"; } leaf bgp { type empty; description "BGP SRTE"; } } // choice lsp-src-choice } // container lsp-source } // grouping springte_lsp_nh_obj grouping stp-interface { leaf name { type string; } uses apply-advanced; leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 255"; } } description "Interface priority (in increments of 16 - 0,16,..240)"; } leaf cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 200000000"; } } description "Cost of the interface"; } leaf mode { type enumeration { enum "point-to-point" { value 0; description "Interface mode is point-to-point"; } enum "shared" { value 1; description "Interface mode is shared"; } } description "Interface mode (P2P or shared)"; } leaf edge { type empty; description "Port is an edge port"; } leaf access-trunk { type empty; description "Send/Receive untagged RSTP BPDUs on this interface"; } container bpdu-timeout-action { presence "enable bpdu-timeout-action"; description "Define action on BPDU expiry (Loop Protect)"; uses apply-advanced; leaf block { type empty; description "Block the interface"; } leaf alarm { type empty; description "Generate an alarm"; } } // container bpdu-timeout-action leaf no-root-port { type empty; description "Do not allow the interface to become root (Root Protect)"; } leaf disable { type empty; description "Disable Spanning Tree on port"; } } // grouping stp-interface grouping stp-trace-options { description "Trace options for Spanning Tree Protocol"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { junos:must "(".. file")"; junos:must-message "Trace file name required to enable tracing"; key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "events" { value 0; description "Trace events to the protocol state machine"; } enum "bpdu" { value 1; description "Trace BPDU reception and transmission"; } enum "timers" { value 2; description "Trace protocol timers"; } enum "port-information-state-machine" { value 3; description "Trace port information state machine"; } enum "port-receive-state-machine" { value 4; description "Trace port receive state machine"; } enum "port-role-select-state-machine" { value 5; description "Trace port role selection state machine"; } enum "port-role-transit-state-machine" { value 6; description "Trace port role transit state machine"; } enum "port-state-transit-state-machine" { value 7; description "Trace port state transit state machine"; } enum "port-migration-state-machine" { value 8; description "Trace port migration state machine"; } enum "port-transmit-state-machine" { value 9; description "Trace port transmit state machine"; } enum "topology-change-state-machine" { value 10; description "Trace topology change state machine"; } enum "bridge-detection-state-machine" { value 11; description "Trace Bridge detection state machine"; } enum "state-machine-variables" { value 12; description "Trace when state machine variables change"; } enum "ppmd" { value 13; description "Trace state and events for ppmd process"; } enum "all-failures" { value 14; description "Trace all failure conditions"; } enum "all" { value 15; description "Trace all"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // grouping stp-trace-options grouping subscription-type { uses apply-advanced; leaf link-subscription { type string; default "100"; description "Link bandwidth percentage for RSVP reservation"; } leaf ct0 { junos:must "("protocols mpls diffserv-te bandwidth-model")"; junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class"; type string; default "100"; description "Subscription percentage for traffic class 0"; } leaf ct1 { junos:must "("protocols mpls diffserv-te bandwidth-model")"; junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class"; type string; default "100"; description "Subscription percentage for traffic class 1"; } leaf ct2 { junos:must "("protocols mpls diffserv-te bandwidth-model")"; junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class"; type string; default "100"; description "Subscription percentage for traffic class 2"; } leaf ct3 { junos:must "("protocols mpls diffserv-te bandwidth-model")"; junos:must-message "Must have a diffserv-te bandwidth model configured when configuring subscription per traffic class"; type string; default "100"; description "Subscription percentage for traffic class 3"; } list priority { key "priority-value"; ordered-by user; description "Subscription percentage for a specific priority"; leaf priority-value { junos:must "(!("protocols mpls diffserv-te"))"; junos:must-message "Cannot configure per-priority subscription alongside diffserv-te"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Priority for which subscription percent is being configured"; } uses apply-advanced; leaf percent { junos:must "(!("protocols mpls diffserv-te"))"; junos:must-message "Cannot configure per-priority subscription alongside diffserv-te"; type string; description "Subscription percent for the specific priority"; } } // list priority } // grouping subscription-type grouping system-id-ip-map { leaf name { type jt:mac-unicast; } uses apply-advanced; leaf ip-address { type jt:ipv4prefix; description "Peer ID (IP Address)"; } } // grouping system-id-ip-map grouping te-class-object { leaf traffic-class { type enumeration { enum "ct0" { value 0; description "Traffic class 0"; } enum "ct1" { value 1; description "Traffic class 1"; } enum "ct2" { value 2; description "Traffic class 2"; } enum "ct3" { value 3; description "Traffic class 3"; } } description "Traffic class"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Preemption priority for this class"; } } // grouping te-class-object grouping v6-relay-option-interface-id-type { description "Interface ID processing"; uses apply-advanced; container prefix { description "Add prefix to circuit/interface-id or remote-id"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to circuit / interface-id or remote-id"; } leaf logical-system-name { type empty; description "Add logical system name to circuit / interface-id or remote-id"; } leaf routing-instance-name { type empty; description "Add routing instance name to circuit / interface-id or remote-id"; } } // container prefix leaf use-interface-description { junos:must "(!(".. require-interface-description"))"; junos:must-message "use-interface-description may not be set with require-interface-desciption"; type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of circuit identifier"; } leaf use-vlan-id { junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))"; junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured"; type empty; description "Use VLAN id instead of name"; } leaf no-vlan-interface-name { type empty; description "Not include vlan or interface name"; } leaf include-irb-and-l2 { type empty; description "Include IRB and L2 interface name"; } container use-option-82 { presence "enable use-option-82"; description "Use option-82 circuit-id for interface-id"; uses v6-relay-option-cid-rid-action; } // container use-option-82 container keep-incoming-interface-id { presence "enable keep-incoming-interface-id"; description "Keep incoming interface identifier"; uses v6-relay-option-cid-rid-action; } // container keep-incoming-interface-id } // grouping v6-relay-option-interface-id-type grouping v6-relay-option-cid-rid-action { uses apply-advanced; leaf strict { type empty; description "Drop packet if id not present"; } } // grouping v6-relay-option-cid-rid-action grouping v6-relay-option-remote-id-type { description "Remote ID processing"; uses apply-advanced; container prefix { description "Add prefix to circuit/interface-id or remote-id"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to circuit / interface-id or remote-id"; } leaf logical-system-name { type empty; description "Add logical system name to circuit / interface-id or remote-id"; } leaf routing-instance-name { type empty; description "Add routing instance name to circuit / interface-id or remote-id"; } } // container prefix leaf use-interface-description { junos:must "(!(".. require-interface-description"))"; junos:must-message "use-interface-description may not be set with require-interface-desciption"; type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use interface description instead of circuit identifier"; } leaf use-vlan-id { junos:must "((!(".. no-vlan-interface-name") && (!(".. use-interface-description") && !(".. require-interface-description"))))"; junos:must-message "Vlan-tag cannot be added as no-vlan-interface-name or interface-description is configured"; type empty; description "Use VLAN id instead of name"; } leaf no-vlan-interface-name { type empty; description "Not include vlan or interface name"; } leaf include-irb-and-l2 { type empty; description "Include IRB and L2 interface name"; } container use-option-82 { presence "enable use-option-82"; description "Use option-82 remote-id for v6 remote-id"; uses v6-relay-option-cid-rid-action; } // container use-option-82 leaf keep-incoming-remote-id { type empty; description "Keep incoming remote identifier"; } } // grouping v6-relay-option-remote-id-type grouping v6-server-group-type { uses apply-advanced; list server-group { key "name"; ordered-by user; description "One or more server groups"; leaf name { type string { junos:posix-pattern "^[A-Za-z0-9][_0-9A-Za-z-]*$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } description "DHCPv6 Server group name"; } uses apply-advanced; list address { key "name"; max-elements 32; ordered-by user; description "IP Address of one or more DHCP servers"; leaf name { type jt:ipaddr; description "IP Address of DHCP server"; } uses apply-advanced; } // list address } // list server-group } // grouping v6-server-group-type grouping vlan-policy { description "Virtual LAN"; leaf name { type string; description "VLAN id"; } uses apply-advanced; container policy { description "Attach policy"; uses apply-advanced; leaf policy-name { type string; description "Router Advertisement Guard policy name"; } choice policy-type { leaf stateful { type empty; description "Stateful router advertisement guard"; } leaf stateless { type empty; description "Stateless router advertisement guard"; } } // choice policy-type } // container policy } // grouping vlan-policy grouping vlan-types { description "Virtual LAN"; leaf name { junos:must "(((!("vlans ${vlan} isolated-vlan") && (!("vlans ${vlan} community-vlans") && !("vlans ${vlan} private-vlan"))) || !("vlans ${vlan} forwarding-options filter output")))"; junos:must-message "Configuring Egress VACL is not supported on PVLAN"; type string { length "2 .. 64"; } description "VLAN name"; } uses apply-advanced; leaf description { type string { junos:posix-pattern "^.{1,255}$"; junos:pattern-message "Must be a string of 255 characters or less"; } description "Text description of VLANs"; } choice vlan-identifier-choice { leaf vlan-id { type string; description "IEEE 802.1q VLAN identifier for VLAN"; } leaf-list vlan-id-list { junos:must "(!(("routing-instances ${instance} instance-type mac-vrf" && " .. vxlan")))"; junos:must-message "vxlan can not be specified under vlan-id-list for mac-vrf instance"; junos:must "((!(".. isolated-vlan") && !(".. community-vlans")))"; junos:must-message "PVLAN related configuration cannot be specified with vlan-id-list"; junos:must "(!(" .. multicast-snooping-options"))"; junos:must-message "multicast-snooping-options can not be specified under vlan-id-list"; junos:must "(!(" .. domain-type"))"; junos:must-message "domain-type can not be specified under vlan-id-list"; junos:must "(!(".. interface"))"; junos:must-message "interface can not be specified under vlan-id-list"; junos:must "(!(any ".. switch-options interface <*> static-mac"))"; junos:must-message "static mac can not be specified under vlan-id-list"; type jt:vlan-range; description "Create VLAN for each of the vlan-id specified in the vlan-id-list"; } container vlan-tags { presence "enable vlan-tags"; description "IEEE 802.1q VLAN tags for VLANs"; leaf outer { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } leaf inner { type string { junos:posix-pattern "^(0[Xx][0-9A-Fa-f]{4}.([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4]))$|^([0-9]{1,3}|1[0-9]{3}|2[0-9]{3}|3[0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "vlan-id in vlan-tag (0xNNNN.vlan-id) must be 0 to 4094"; } description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } } // container vlan-tags } // choice vlan-identifier-choice list interface { key "name"; ordered-by user; description "Interface name for this VLAN"; leaf name { junos:must "(!("interfaces $$-IFL encapsulation ethernet"))"; junos:must-message "encapsulation ethernet is not allowed on l2 interface"; junos:must "(!((("interfaces $$-IFL vlan-id-list" || "interfaces $$-IFL vlan-id-range") && (".. .. .. .. instance-type mac-vrf" && (".. .. .. .. service-type vlan-aware" || ".. .. .. .. service-type vlan-based")))))"; junos:must-message "Interface with vlan-id-list/vlan-id-range cannot be added to vlan under mac-vrf routing-instance with vlan-based/vlan-aware service-type"; junos:must "((!("interfaces $$-IFL family") || "interfaces $$-IFL family ethernet-switching"))"; junos:must-message "only family ethernet-switching can be configured on this interface"; junos:must "((!(("interfaces $$ vlan-id-list" || "interfaces $$ vlan-tags inner-list")) || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))"; junos:must-message "interface with vlan-id-list/inner-list cannot be added to a vlan with a vlan-id/vlan-tags configured"; junos:must "(!(("interfaces $$-IFL family ethernet-switching interface-mode" || "interfaces $$-IFL family ethernet-switching vlan members")))"; junos:must-message "Interface with 'interface-mode' config is not allowed under vlans"; junos:must "(!(".. .. .. interfaces $$"))"; junos:must-message "This interface is already defined at the routing-instance level"; junos:must "(("interfaces $$-IFL" || !(".. .. .. .. protocols evpn encapsulation")))"; junos:must-message "Interface not defined; Interface must be defined for configuring under VLAN for protocols evpn"; junos:must "(((".. .. vlan-id all" && "interfaces $$-IFL input-vlan-map pop") || ((".. .. vlan-id inner-all" && "interfaces $$-IFL input-vlan-map") || (!((".. .. vlan-id" || ".. .. vlan-tags")) || (!(("interfaces $$-IFL input-vlan-map" || "interfaces $$-IFL output-vlan-map")) || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))))"; junos:must-message "interface with input/output vlan-maps cannot be added to a routing-instance with a vlan-id/vlan-tags configured"; junos:must "((!("interfaces $$-IFL vlan-tags inner-range") || ((".. .. vlan-id all" || ".. .. vlan-id inner-all") || (".. .. no-normalization" || ".. .. switch-options no-normalization"))))"; junos:must-message "vlan-tags inner-range is specified for this logical interface; 'vlan-id all' or 'vlan-id inner-all' should also be enabled"; junos:must "(((!("interfaces $$-IFL vlan-id-range") || ".. .. vlan-id all") || (".. .. no-normalization" || ".. .. switch-options no-normalization")))"; junos:must-message "vlan-id-range is specified for this logical interface; 'vlan-id all' should also be enabled"; junos:must "(!(".. .. switch-options interface $$ interface-mac-limit"))"; junos:must-message "Interface mac limit should not be configured at VLAN level for sub interfaces"; junos:must "(!("interfaces $$-IFL output-vlan-map push"))"; junos:must-message "interface with output-vlan-map is not supported with push"; junos:must "((!("interfaces $$-IFL vlan-id-list") || !(("interfaces $$-IFL input-vlan-map swap" || "interfaces $$-IFL input-vlan-map pop"))))"; junos:must-message "interface with vlan-id-list and input-vlan-map swap/pop is not supported"; junos:must "((!("interfaces $$-IFL vlan-id-list") || "interfaces $$-IFL input-vlan-map"))"; junos:must-message "interface with vlan-id-list is supported only with input-vlan-map push"; junos:must "((!("interfaces $$-IFL vlan-id") || !((".. .. vlan-tags" || ".. .. vlan-id-list"))))"; junos:must-message "interface with vlan-id cannot be added to vlan with vlan-tags/vlan-id-list configured"; junos:must "((!("interfaces $$-IFL vlan-id-list") || !((".. .. vlan-id" || (".. .. vlan-tags" || ".. .. vlan-id-list")))))"; junos:must-message "interface with vlan-id-list cannot be added to a vlan with a vlan-id/vlan-tags/vlan-id-list configured"; type string; } uses apply-advanced; } // list interface leaf l3-interface { junos:must "(!((".. .. .. protocols evpn mclag" && !(".. no-arp-suppression"))))"; junos:must-message "no-arp-suppression needs to be configured, when evpn is configured with mclag."; junos:must "(!((".. mcae-mac-synchronize" && "interfaces $$-IFL mac")))"; junos:must-message "irb-ifl mac and vlan mcae-mac-synchronize cannot coexist"; junos:must "((!("interfaces $$-IFL family mpls") || !(("routing-instances ${instance} instance-type virtual-switch" && ("routing-instances ${instance} protocols vpls" && "routing-instances ${instance} route-distinguisher")))))"; junos:must-message "routing-interface with family MPLS cannot be added to virtual-switch with protocol VPLS"; junos:must "((!(".. vlan-tags") || !("interfaces $$-IFL family mpls")))"; junos:must-message "routing-interface with family MPLS cannot be added to bridge-domain with 'vlan-tags'"; junos:must "(!("routing-instances ${instance} service-type vlan-bundle"))"; junos:must-message "routing-interface not valid for vlan-bundle service type"; junos:must "((!(".. vlan-id all") && !(".. vlan-id inner-all")))"; junos:must-message "l3-interface cannot be configured under vlans with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "((".. vlan-id" || ".. vlan-tags"))"; junos:must-message "l3-interface can be configured only under vlans with 'vlan-id'/'vlan-tags'"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "L3 interface name for this vlans"; } container forwarding-options { description "Forwarding options configuration"; uses juniper-ethernet-switching-forwarding-options; } // container forwarding-options container multicast-snooping-options { junos:must "(".. .. .. protocols igmp-snooping vlan ${vlan}")"; junos:must-message "multicast-snooping-options can be configured only if snooping is enabled on the vlan"; description "Multicast snooping option configuration"; uses juniper-multicast-snooping-options; } // container multicast-snooping-options container switch-options { description "VLANs switch-options configuration"; uses juniper-protocols-vlan; } // container switch-options leaf domain-type { type enumeration { enum "bridge" { value 0; description "Forwarding instance"; } } description "Type of VLANs SVLAN/DVLAN"; } leaf no-irb-layer-2-copy { junos:must "(".. l3-interface")"; junos:must-message "l3-interface must be configured to configure this feature"; type empty; description "Disable transmission of layer-2 copy of packets of IRB routing-interface"; } leaf service-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Service id required if VLAN is of type MC-AE, and vlan-id all or vlan-id none or vlan-tags is configured"; } leaf mcae-mac-synchronize { junos:must "(".. l3-interface")"; junos:must-message "Layer 3 interface for this VLAN is not configured"; type empty; description "Enable IRB MAC synchronization in this VLAN"; } leaf mcae-mac-flush { type empty; description "Enable IRB MAC flush in a/s mode for this VLAN on MCAE link up"; } leaf private-vlan { junos:must "(!((".. isolated-vlan" || ".. community-vlans")))"; junos:must-message "This vlan is already configured as primary vlan"; junos:must "(!(".. l3-interface"))"; junos:must-message "l3-interface cannot be configured on a secondary vlan"; type enumeration { enum "isolated" { value 0; description "Isolated vlan"; } enum "community" { value 1; description "Community vlan"; } } description "Type of secondary vlan for private vlan"; } leaf isolated-vlan { junos:must "(!(".. private-vlan"))"; junos:must-message "This vlan is already configured as secondary vlan"; type string; description "VLAN id or name"; } leaf-list community-vlans { junos:must "(!(".. private-vlan"))"; junos:must-message "This vlan is already configured as secondary vlan"; type string; ordered-by user; description "List of VLAN id or name"; } container vxlan { junos:must "((". riot-loopback" || (!(". riot-loopback") && (((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed") && (!((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan")) && !(". multicast-group"))) || ((!((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed")) && ((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan") && !(". multicast-group"))) || (!((". ovsdb-managed" || ".. .. .. switch-options ovsdb-managed")) && (!((". ingress-node-replication" || ".. .. .. protocols evpn encapsulation vxlan")) && ". multicast-group")))))))"; junos:must-message "ovsdb, multicast-group, ingress-node-replication cannot be configured together. ingress-node-replication must be configured when remote-vtep-list is configured"; junos:must "((". ovsdb-managed" || (".. .. .. switch-options ovsdb-managed" || (". multicast-group" || ("routing-instances ${instance} remote-vtep-list" || (".. .. .. switch-options remote-vtep-list" || (". ingress-node-replication" || (".. .. .. protocols evpn encapsulation vxlan" || ". riot-loopback"))))))))"; junos:must-message "One of multicast-group or ovsdb-managed or ingress-node-replication or protocols evpn encapsulation vxlan or remote-vtep-list or riot-loopback should be enabled"; junos:must "((!(".. vlan-id all") && !(".. vlan-id all")))"; junos:must-message "vxlan does not support bridge domain with 'vlan-id all' or 'vlan-id inner-all'"; junos:must "((". riot-loopback" || (!(". riot-loopback") && ("routing-instances ${instance} vtep-source-interface" || ".. .. .. switch-options vtep-source-interface"))))"; junos:must-message "vtep-source-interface is required for VXLAN configuration"; uses apply-advanced; leaf ovsdb-managed { junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. .. switch-options remote-vtep-list" || (".. multicast-group" || ".. .. .. .. protocols evpn encapsulation vxlan")))))"; junos:must-message "ovsdb-managed not valid with remote-vtep-list or multicast-group or protocol evpn encapsulation vxlan"; type empty; description "Bridge-domain is managed remotely via VXLAN OVSDB Controller"; } leaf vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777214"; } } description "VXLAN identifier"; } leaf translation-vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777214"; } } description "Translated VXLAN identifier"; } leaf multicast-group { junos:must "(!(("routing-instances ${instance} remote-vtep-list" || (".. .. .. switch-options remote-vtep-list" || (".. ovsdb-managed" || ("routing-instances ${instance} switch-options ovsdb-managed" || ".. .. .. .. protocols evpn encapsulation vxlan"))))))"; junos:must-message "multicast-group not valid with remote-vtep-list or ovsdb-managed or evpn configuration"; type jt:ipv4addr; description "Multicast group registered for VXLAN segment"; } leaf encapsulate-inner-vlan { type empty; description "Retain inner VLAN in the packet"; } leaf decapsulate-accept-inner-vlan { type empty; description "Accept VXLAN packets with inner VLAN"; } leaf unreachable-vtep-aging-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "300 .. 1800"; } } units "seconds"; description "Unreachable VXLAN tunnel endpoint removal timer"; } leaf-list static-remote-vtep-list { type jt:ipaddr; max-elements 1024; description "Configure vlan specific static remote VXLAN tunnel endpoints"; } leaf riot-loopback { type empty; description "Enable loopback on RIOT platform"; } } // container vxlan } // grouping vlan-types grouping juniper-ethernet-switching-forwarding-options { uses apply-advanced; container filter { description "Filtering for ethernet switching forwarding table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for forwarded packets"; } leaf output { junos:must "(!(any "firewall family ethernet-switching filter $$ term <*> from traffic-type-except"))"; junos:must-message "Vacl with term as 'from traffic-type-except' not supported on the egress side"; junos:must "(!(any "firewall family ethernet-switching filter $$ term <*> from traffic-type"))"; junos:must-message "Vacl with term as 'from traffic-type' not supported on the egress side"; type string; description "Name of output filter to apply for forwarded packets"; } } // container filter container flood { description "Filtering for ethernet switching flood table"; uses apply-advanced; leaf input { type string; description "Name of input filter to apply for ethernet switching flood packets"; } } // container flood container dhcp-relay { junos:must "(!("forwarding-options helpers bootp"))"; junos:must-message "'dhcp-relay' statement cannot be included along with 'forwarding-options helpers bootp' statement"; status deprecated; description "Dynamic Host Configuration Protocol relay configuration"; uses jdhcp-relay-type; } // container dhcp-relay container dhcp-security { presence "enable dhcp-security"; description "DHCP access security configuration"; uses jdhcp-security-type; } // container dhcp-security } // grouping juniper-ethernet-switching-forwarding-options grouping juniper-protocols-vlan { description "VLANs switch-options configuration"; uses apply-advanced; container mac-table-size { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-table-size needs to be specified under switch-options for a virtual-switch instance"; junos:must "((".. .. vlan-id" || ".. .. vlan-id-list"))"; junos:must-message "Only vlans with vlan-id/vlan-id-list can support this switch-option"; junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on secondary VLANs"; description "Size of MAC address forwarding table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } } description "Action when MAC limit is reached"; } } // container mac-table-size container mac-ip-table-size { junos:must "(!(((".. .. .. protocols vpls" || ".. .. .. protocols evpn") && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-ip-table-size needs to be specified under switch-options for a virtual-switch instance"; description "Size of MAC+IP bindings table"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings"; } } // container mac-ip-table-size container interface-mac-limit { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface-mac-limit needs to be specified under switch-options for a virtual-switch instance"; junos:must "((".. .. vlan-id" || ".. .. vlan-id-list"))"; junos:must-message "Only vlans with vlan-id/vlan-id-list can support this switch-option"; junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on secondary VLANs"; description "Maximum MAC address learned per interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf mac-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "seconds"; description "Delay for discarding MAC address if no updates are received"; } leaf no-mac-learning { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "no-mac-learning needs to be specified under switch-options for a virtual-switch instance"; junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf no-normalization { type empty; description "Disable vlan id normalization for interfaces"; } leaf mac-statistics { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "mac-statistics needs to be specified under switch-options for a virtual-switch instance"; junos:must "(!(".. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on secondary VLANs"; type empty; description "Enable MAC address statistics"; } container static-rvtep-mac { description "Configure Static MAC and remote VxLAN tunnel endpoint entries"; uses apply-advanced; list mac { key "mac_addr remote-vtep"; description "Unicast MAC address"; leaf mac_addr { type jt:mac-unicast; } leaf remote-vtep { type jt:ipaddr; description "Configure static remote VXLAN tunnel endpoints"; } } // list mac } // container static-rvtep-mac list interface { junos:must "(!((".. .. .. protocols vpls" && ".. .. .. instance-type virtual-switch")))"; junos:must-message "interface needs to be specified under switch-options for a virtual-switch instance"; key "name"; ordered-by user; description "Interface that connect this site to the VPN"; leaf name { junos:must "(((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching vlan")) || "interfaces $$-IFL family ethernet-switching"))"; junos:must-message "Interface must be part of this routing instance"; junos:must "((".. .. .. interface $$" || (".. .. .. .. .. interface $$" || "interfaces $$-IFL family ethernet-switching")))"; junos:must-message "Interface must be part of this routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container interface-mac-limit { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; description "Maximum number of MAC addresses learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC addresses per interface"; } leaf disable { type empty; description "Disable interface for interface-mac-limit"; } leaf packet-action { type enumeration { enum "none" { value 0; description "Forward the packet"; } enum "drop" { value 1; description "Drop packets and do not learn. Default is forward"; } enum "log" { value 2; description "Do not drop the packet but generate an alarm, an SNMP trap or a system log entry"; } enum "shutdown" { value 3; description "Disable the interface and generate an alarm, an SNMP trap or a system log entry"; } enum "drop-and-log" { value 4; description "Drop the packet and generate an alarm, an SNMP trap or a system log entry"; } } description "Action when MAC limit is reached"; } } // container interface-mac-limit leaf action-priority { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8"; } } description "Blocking priority of this interface on mac move detection"; } list static-mac { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; key "name"; ordered-by user; description "Static MAC addresses assigned to this interface"; leaf name { junos:must "((!(".. .. .. .. vlan-id all") || all ".. vlan-id <*>"))"; junos:must-message " Specify vlan-id for qualified learning "; type jt:mac-addr; description "MAC address"; } uses apply-advanced; list vlan-id { junos:must "(".. .. .. .. vlan-id all")"; junos:must-message "'vlan-id all' has to be configured for the bridging domain"; key "name"; ordered-by user; description "VLAN ID of learning VLAN"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Learning VLAN"; } uses apply-advanced; } // list vlan-id } // list static-mac container interface-mac-ip-limit { description "Maximum number of MAC+IP bindings learned on the interface"; uses apply-advanced; leaf limit { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum number of MAC+IP bindings per interface"; } } // container interface-mac-ip-limit leaf no-mac-learning { junos:must "(!(".. .. .. .. .. vlans ${vlan} private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaces which are part of secondary VLANs"; junos:must "(!(".. .. .. private-vlan"))"; junos:must-message "Switch-options configuration is not allowed on interfaceswhich are part of secondary VLANs"; type empty; description "Disable dynamic MAC address learning"; } leaf mac-pinning { type empty; description "Enable MAC pinning"; } leaf persistent-learning { junos:must "(!("switch-options mac-table-aging-time "))"; junos:must-message "Persistent learning can not co-exist with mac-table-aging-time"; type empty; description "Enable persistent MAC learning on this interface"; } } // list interface container traceoptions { description "Trace options for this bridge domain"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Type of operation or event to include in trace"; leaf name { type enumeration { enum "configuration" { value 0; description "Configuration operations"; } enum "routing-socket" { value 1; description "Routing socket operations"; } enum "interface-device" { value 2; description "Interface device operations"; } enum "interface-logical" { value 3; description "Logical interface operations"; } enum "interface-family" { value 4; description "Interface family operations"; } enum "learning-domain" { value 5; description "Learning domain operations"; } enum "ipc" { value 6; description "Inter-process communications operations"; } enum "mac-learning" { value 7; description "MAC address learning operations"; } enum "initialization" { value 8; description "Initialization operations"; } enum "flood-next-hop" { value 9; description "Flood next hop operations"; } enum "storm-control" { value 10; description "Storm-control"; } enum "unknown-unicast-forwarding" { value 11; description "Trace unknown unicast forwarding events"; } enum "all" { value 12; description "All operations"; } } } } // list flag } // container traceoptions } // grouping juniper-protocols-vlan grouping write-option-82-type { uses apply-advanced; } // grouping write-option-82-type } // module junos-ex-conf-routing-instances
© 2024 YumaWorks, Inc. All rights reserved.