Junos logical-systems configuration module
Version: 2019-01-01
module junos-ex-conf-logical-systems { yang-version 1; namespace "http://yang.juniper.net/junos-ex/conf/logical-systems"; prefix jc-logical-systems; 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 logical-systems configuration module"; revision "2019-01-01" { description "Junos: 21.3R1.9"; } augment /jc:configuration { uses logical-systems-group; } augment /jc:configuration/jc:groups { uses logical-systems-group; } grouping logical-systems-group { list logical-systems { key "name"; description "Logical systems"; uses juniper-logical-system; } // list logical-systems } // grouping logical-systems-group grouping juniper-logical-system { description "Logical system configuration"; leaf name { type string { junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)"; junos:pattern-message "Logical-system name is a string consisting of up to 63 letters, numbers, dashes and underscores"; } description "Logical system name"; } uses apply-advanced; container interfaces { description "Interface configuration"; uses apply-advanced; list interface { key "name"; uses lr_interfaces_type; } // list interface } // container interfaces container protocols { description "Routing protocol configuration"; uses juniper-protocols; } // container protocols container policy-options { description "Policy option configuration"; uses juniper-policy-options; } // container policy-options container routing-instances { description "Routing instance configuration"; uses apply-advanced; list instance { key "name"; uses juniper-routing-instance; } // list instance } // container routing-instances container routing-options { description "Protocol-independent routing option configuration"; uses juniper-routing-options; } // container routing-options container forwarding-options { description "Configure options to control packet forwarding"; uses apply-advanced; 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 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 container sampling { presence "enable sampling"; uses apply-advanced; container family { junos:must "("forwarding-options sampling input")"; junos:must-message "Input must be configured under global logical router"; description "Address family of packets to sample"; container inet { description "Sample IPv4 packets"; uses apply-advanced; container output { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_inet_lr_type; } // list flow-server } // container output } // container inet container mpls { description "Sample MPLS packets"; uses apply-advanced; container output { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_mpls_lr_type; } // list flow-server } // container output } // container mpls } // container family list instance { key "name"; ordered-by user; description "Instance of sampling parameters"; leaf name { junos:must "(!(any "forwarding-options sampling family inet output flow-server <*> version"))"; junos:must-message "Select only one version"; junos:must "(!((".. family mpls" && !("forwarding-options sampling instance $$ family mpls output interface"))))"; junos:must-message "Interface must be configured under global logical router instance"; junos:must "(!((".. family inet" && !("forwarding-options sampling instance $$ family inet output interface"))))"; junos:must-message "Interface must be configured under global logical router"; junos:must "("forwarding-options sampling instance $$ input")"; junos:must-message "Input must be configured under global logical router"; 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 family { description "Address family of packets to sample"; container inet { description "Sample IPv4 packets"; uses apply-advanced; container output { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_inet_lr_inst_type; } // list flow-server } // container output } // container inet container mpls { description "Sample MPLS packets"; uses apply-advanced; container output { description "Configure output options for packet sampling"; uses apply-advanced; list flow-server { key "name"; max-elements 8; description "Configure sending traffic aggregates in cflowd format"; uses cflowd_sampling_mpls_lr_inst_type; } // list flow-server } // container output } // container mpls } // container family } // list instance } // container sampling } // container forwarding-options container system { description "System parameters"; uses apply-advanced; container arp { description "ARP settings"; uses apply-advanced; leaf aging-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 240"; } } units "minutes"; description "Change the ARP aging time value"; } container interfaces { description "Logical interface on which to specify ARP aging timer"; uses apply-advanced; list arp-interface { key "name"; uses arp-interface-type; } // list arp-interface } // container interfaces leaf passive-learning { type empty; description "ARP passive learning"; } leaf purging { type empty; description "ARP purging when link goes down"; } leaf gratuitous-arp-on-ifup { type empty; description "Gratuitous ARP announcement on interface up"; } leaf gratuitous-arp-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4000000"; } } description "Delay gratuitous ARP request"; } leaf non-subscriber-no-reply { type empty; description "Do not reply to ARP requests from non-subscribers"; } leaf unicast-mode-on-expire { type empty; description "Send unicast ARP request on expiry timer"; } } // container arp 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 processes { description "Process control"; uses apply-advanced; container routing { presence "enable routing"; description "Routing process"; uses apply-advanced; choice mode { leaf force-32-bit { type empty; description "Always use 32-bit mode"; } leaf force-64-bit { type empty; description "Always use 64-bit mode"; } leaf auto-64-bit { type empty; description "Ignored; same as force-32-bit"; } } // choice mode } // container routing } // container processes } // 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 container firewall { description "Define a firewall configuration"; uses apply-advanced; container family { description "Protocol family"; container inet { description "Protocol family IPv4 for firewall filter"; uses apply-advanced; list prefix-action { key "name"; ordered-by user; description "Define a prefix action"; uses prefix_action; } // list prefix-action list filter { key "name"; description "Define an IPv4 firewall filter"; uses inet_filter; } // list filter list service-filter { key "name"; description "One or more IPv4 service filters"; uses inet_service_filter; } // list service-filter list fast-update-filter { key "name"; ordered-by user; description "One or more fast update filters"; uses inet_fuf; } // list fast-update-filter } // container inet container inet6 { description "Protocol family IPv6 for firewall filter"; uses apply-advanced; list filter { key "name"; description "Define an IPv6 firewall filter"; uses inet6_filter; } // list filter list service-filter { key "name"; description "One or more IPv6 service filters"; uses inet6_service_filter; } // list service-filter list fast-update-filter { key "name"; ordered-by user; description "One or more fast update filters"; uses inet6_fuf; } // list fast-update-filter } // container inet6 container mpls { description "Protocol family MPLS for firewall filter"; uses apply-advanced; list filter { key "name"; uses mpls_filter; } // list filter } // container mpls container vpls { description "Protocol family VPLS for firewall filter"; uses apply-advanced; list filter { key "name"; uses vpls_filter; } // list filter } // container vpls container evpn { description "Protocol family EVPN for firewall filter"; uses apply-advanced; list filter { key "name"; uses vpls_filter; } // list filter } // container evpn container bridge { description "Protocol family BRIDGE for firewall filter"; uses apply-advanced; list filter { key "name"; uses bridge_filter; } // list filter } // container bridge container ccc { description "Protocol family CCC for firewall filter"; uses apply-advanced; list filter { key "name"; uses ccc_filter; } // list filter } // container ccc container any { description "Protocol-independent filter"; uses apply-advanced; list filter { key "name"; description "Define a protocol independent filter"; uses any_filter; } // list filter } // container any container ethernet-switching { description "Protocol family Ethernet Switching for firewall filter"; uses apply-advanced; list filter { key "name"; description "Define an Ethernet Switching firewall filter"; uses es_filter; } // list filter } // container ethernet-switching } // container family list policer { key "name"; description "Policer template definition"; uses firewall_policer; } // list policer list flexible-match { key "name"; description "Flexible packet match template definition"; uses firewall_flexible_match; } // list flexible-match list tunnel-end-point { key "name"; description "Tunnel end-point template definition"; uses tunnel_end_point; } // list tunnel-end-point list hierarchical-policer { key "name"; description "Hierarchical policer template definition"; uses firewall_hierpolicer; } // list hierarchical-policer list interface-set { key "name"; description "Interface set definition"; uses interface_set_type; } // list interface-set list three-color-policer { key "name"; description "Three-color policer"; uses three-color-policer-type; } // list three-color-policer list filter { key "name"; description "Define an IPv4 firewall filter"; uses inet_filter; } // list filter } // container firewall container multicast-snooping-options { description "Multicast snooping option configuration"; uses juniper-multicast-snooping-options; } // container multicast-snooping-options container services { description "Service PIC daemon configuration"; uses apply-advanced; } // container services container bridge-domains { 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 { description "Options for default routing-instance of type virtual-switch"; uses juniper-def-rtb-switch-options; } // container switch-options container vlans { 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-logical-system 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 any_filter { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; container from { description "Define match criteria"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object_oam; } // list interface list interface-set { key "name"; ordered-by user; description "Match interface in set"; uses match_interface_set_object; } // list interface-set choice packet-length_choice { leaf-list packet-length { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } leaf-list packet-length-except { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice packet-length_choice choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice choice learn-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list learn-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice learn-vlan-1p-priority_choice choice user-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list user-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice user-vlan-1p-priority_choice choice user-vlan-id_choice { case case_1 { } // case case_1 leaf-list user-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice user-vlan-id_choice choice learn-vlan-id_choice { case case_1 { } // case case_1 leaf-list learn-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice learn-vlan-id_choice choice ether-type_choice { case case_1 { } // case case_1 leaf-list ether-type-except { type string; ordered-by user; } } // choice ether-type_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf service-accounting { junos:must "(!(".. service-accounting-deferred"))"; junos:must-message "'service-accounting-deferred' and 'service-accounting' cannot coexist"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting' cannot coexist"; type empty; description "Count the packets for service accounting"; } leaf service-accounting-deferred { junos:must "(!(".. service-accounting"))"; junos:must-message "Cannot be both 'service-accounting' and 'service-accounting-deferred'"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting-deferred' cannot coexist"; type empty; description "Count the packets for deferred service accounting"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Classify packet to loss-priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } choice designation { case case_1 { } // case case_1 leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation } // container then } // list term } // grouping any_filter 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 arp-interface-type { description "Logical interface on which to configure ARP aging timer"; leaf name { junos:must "("interfaces $$-IFL family inet")"; junos:must-message "Family inet must be configured on this logical interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf aging-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600000"; } } units "minutes"; description "Change the ARP aging time value"; } } // grouping arp-interface-type grouping bridge_filter { description "Define a BRIDGE firewall filter"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "("firewall family bridge filter $$")"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice choice ether-type_choice { leaf-list ether-type { type string; ordered-by user; } leaf-list ether-type-except { type string; ordered-by user; } } // choice ether-type_choice choice vlan-ether-type_choice { leaf-list vlan-ether-type { type string; ordered-by user; } leaf-list vlan-ether-type-except { type string; ordered-by user; } } // choice vlan-ether-type_choice list destination-mac-address { key "name"; ordered-by user; description "Destination MAC address"; uses firewall_mac_addr_object; } // list destination-mac-address list source-mac-address { key "name"; ordered-by user; description "Source MAC address"; uses firewall_mac_addr_object; } // list source-mac-address choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice learn-vlan-id_choice { case case_1 { } // case case_1 leaf-list learn-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice learn-vlan-id_choice choice learn-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list learn-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice learn-vlan-1p-priority_choice choice user-vlan-id_choice { case case_1 { } // case case_1 leaf-list user-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice user-vlan-id_choice choice user-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list user-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice user-vlan-1p-priority_choice choice learn-vlan-dei_choice { case case_1 { } // case case_1 leaf-list learn-vlan-dei-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } } // choice learn-vlan-dei_choice choice traffic-type_choice { case case_1 { } // case case_1 leaf-list traffic-type-except { type enumeration { enum "broadcast" { value 0; description "Packets with broadcast ethernet address"; } enum "multicast" { value 1; description "Packets with multicast ethernet address"; } enum "unknown-unicast" { value 2; description "Packets for which destination ethernet address has not been learnt"; } enum "known-unicast" { value 3; description "Packets for which destination ethernet address has been learnt"; } } ordered-by user; } } // choice traffic-type_choice choice ip-protocol_choice { case case_1 { } // case case_1 leaf-list ip-protocol-except { type string; ordered-by user; } } // choice ip-protocol_choice choice dscp_choice { case case_1 { } // case case_1 leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice ip-precedence_choice { case case_1 { } // case case_1 leaf-list ip-precedence-except { type string; ordered-by user; } } // choice ip-precedence_choice choice source-port_choice { case case_1 { } // case case_1 leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { case case_1 { } // case case_1 leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { case case_1 { } // case case_1 leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice icmp-code_choice { case case_1 { } // case case_1 leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice choice icmp-type_choice { case case_1 { } // case case_1 leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface list interface-set { key "name"; ordered-by user; description "Match interface in set"; uses match_interface_set_object; } // list interface-set choice ipv6-next-header_choice { case case_1 { } // case case_1 leaf-list ipv6-next-header-except { type string; ordered-by user; } } // choice ipv6-next-header_choice choice ipv6-payload-protocol_choice { case case_1 { } // case case_1 leaf-list ipv6-payload-protocol-except { type string; ordered-by user; } } // choice ipv6-payload-protocol_choice choice ipv6-traffic-class_choice { case case_1 { } // case case_1 leaf-list ipv6-traffic-class-except { type string; ordered-by user; } } // choice ipv6-traffic-class_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice choice isid_choice { case case_1 { } // case case_1 leaf-list isid-except { type string; ordered-by user; description "Range of values"; } } // choice isid_choice choice isid-priority-code-point_choice { case case_1 { } // case case_1 leaf-list isid-priority-code-point-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice isid-priority-code-point_choice choice isid-dei_choice { case case_1 { } // case case_1 leaf-list isid-dei-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } } // choice isid-dei_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } choice designation { leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation container forwarding-policy { description "Specify forwarding policy for extended port"; uses apply-advanced; leaf uplink-select { type string; description "Specify port group for uplink selection"; } } // container forwarding-policy } // container then } // list term } // grouping bridge_filter grouping ccc_filter { description "Define a CCC firewall filter"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Any counters defined will be interface specific"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "("firewall family ccc filter $$")"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice choice packet-length_choice { case case_1 { } // case case_1 leaf-list packet-length-except { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice packet-length_choice choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice learn-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list learn-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice learn-vlan-1p-priority_choice choice user-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list user-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice user-vlan-1p-priority_choice choice dscp_choice { case case_1 { } // case case_1 leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice ip-precedence_choice { case case_1 { } // case case_1 leaf-list ip-precedence-except { type string; ordered-by user; } } // choice ip-precedence_choice choice ip-protocol_choice { case case_1 { } // case case_1 leaf-list ip-protocol-except { type string; ordered-by user; } } // choice ip-protocol_choice choice icmp-type_choice { case case_1 { } // case case_1 leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { case case_1 { } // case case_1 leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice choice source-port_choice { case case_1 { } // case case_1 leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { case case_1 { } // case case_1 leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice choice user-vlan-id_choice { case case_1 { } // case case_1 leaf-list user-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice user-vlan-id_choice choice ether-type_choice { case case_1 { } // case case_1 leaf-list ether-type-except { type string; ordered-by user; } } // choice ether-type_choice choice learn-vlan-id_choice { case case_1 { } // case case_1 leaf-list learn-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice learn-vlan-id_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to the specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } choice designation { case case_1 { } // case case_1 leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation } // container then } // list term } // grouping ccc_filter grouping cflowd_sampling_inet_lr_inst_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_inet_lr_inst_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 cflowd_sampling_inet_lr_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_inet_lr_type grouping cflowd_sampling_mpls_lr_inst_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_mpls_lr_inst_type grouping cflowd_sampling_mpls_lr_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_mpls_lr_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 es_filter { leaf name { junos:must "(!("firewall family ethernet-switching filter JNPR_RSVD_FILTER_CWA "))"; junos:must-message "This filter is reserved for Central Web Authentication"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf interface-specific { type empty; description "Defined counters are interface specific"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; container from { description "Define match criteria"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface list source-mac-address { key "name"; ordered-by user; description "Match MAC source address"; uses firewall_mac_addr_object; } // list source-mac-address list destination-mac-address { key "name"; ordered-by user; description "Match MAC destination address"; uses firewall_mac_addr_object; } // list destination-mac-address choice ether-type_choice { leaf-list ether-type { type string; ordered-by user; } leaf-list ether-type-except { type string; ordered-by user; } } // choice ether-type_choice choice l2-encap-type_choice { leaf-list l2-encap-type { type string; ordered-by user; } leaf-list l2-encap-type-except { type string; ordered-by user; } } // choice l2-encap-type_choice choice vlan_choice { leaf-list vlan { type string; ordered-by user; description "VLAN name or ID"; } leaf-list vlan-except { type string; ordered-by user; description "VLAN name or ID"; } } // choice vlan_choice choice dot1q-tag_choice { leaf-list dot1q-tag { type string { junos:posix-pattern "^([0-9]{1,3}|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])(-([0-9]{1,3}|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5]))?$"; junos:pattern-message "Must be a numerical value or range between 0-4095"; } ordered-by user; description "Range of values"; } leaf-list dot1q-tag-except { type string { junos:posix-pattern "^([0-9]{1,3}|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5])(-([0-9]{1,3}|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|409[0-5]))?$"; junos:pattern-message "Must be a numerical value or range between 0-4095"; } ordered-by user; description "Range of values"; } } // choice dot1q-tag_choice choice dot1q-user-priority_choice { leaf-list dot1q-user-priority { type string; ordered-by user; } leaf-list dot1q-user-priority-except { type string; ordered-by user; } } // choice dot1q-user-priority_choice list address { key "name"; ordered-by user; description "Match IP source or destination address"; uses firewall_addr_object; } // list address list source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list destination-address choice dscp_choice { leaf-list dscp { type string; ordered-by user; } leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice precedence_choice { leaf-list precedence { type string; ordered-by user; } leaf-list precedence-except { type string; ordered-by user; } } // choice precedence_choice choice ip-options_choice { leaf-list ip-options { type enumeration { enum "any" { value 0; description "Any IP option"; } } ordered-by user; } leaf-list ip-options-except { type enumeration { enum "any" { value 0; description "Any IP option"; } } ordered-by user; } } // choice ip-options_choice leaf fragment-flags { type string { junos:posix-pattern "^(0x4000|0x2000|dont-fragment|more-fragments)$"; junos:pattern-message "fragment-flags must be either dont-fragment(0x4000) or more-fragments(0x2000)"; } description "Match fragment flags (in symbolic or hex formats) - (Ingress only)"; } leaf is-fragment { type empty; description "Match if packet is a fragment"; } choice protocol_choice { leaf-list protocol { type string; ordered-by user; } leaf-list protocol-except { type string; ordered-by user; } } // choice protocol_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { leaf-list port { type string; ordered-by user; } leaf-list port-except { type string; ordered-by user; } } // choice port_choice leaf tcp-flags { type string; description "Match TCP flags (in symbolic or hex formats)"; } leaf tcp-initial { type empty; description "Match initial packet of a TCP connection"; } leaf tcp-established { type empty; description "Match packet of an established TCP connection"; } choice icmp-type_choice { leaf-list icmp-type { type string; ordered-by user; } leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { leaf-list icmp-code { type string; ordered-by user; } leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice list source-prefix-list { key "name"; ordered-by user; description "Match IP source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match IP destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list ip-source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list ip-source-address list ip-destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list ip-destination-address choice ip-protocol_choice { leaf-list ip-protocol { type string; ordered-by user; } leaf-list ip-protocol-except { type string; ordered-by user; } } // choice ip-protocol_choice choice ip-precedence_choice { leaf-list ip-precedence { type string; ordered-by user; } leaf-list ip-precedence-except { type string; ordered-by user; } } // choice ip-precedence_choice choice ipv6-next-header_choice { case case_1 { } // case case_1 leaf-list ipv6-next-header-except { type string; ordered-by user; } } // choice ipv6-next-header_choice choice ipv6-payload-protocol_choice { case case_1 { } // case case_1 leaf-list ipv6-payload-protocol-except { type string; ordered-by user; } } // choice ipv6-payload-protocol_choice choice ipv6-traffic-class_choice { case case_1 { } // case case_1 leaf-list ipv6-traffic-class-except { type string; ordered-by user; } } // choice ipv6-traffic-class_choice choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice choice vlan-ether-type_choice { leaf-list vlan-ether-type { type string; ordered-by user; } leaf-list vlan-ether-type-except { type string; ordered-by user; } } // choice vlan-ether-type_choice choice loss-priority_choice { leaf-list loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice learn-vlan-id_choice { leaf-list learn-vlan-id { type string; ordered-by user; description "Range of values"; } leaf-list learn-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice learn-vlan-id_choice choice learn-vlan-1p-priority_choice { leaf-list learn-vlan-1p-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } leaf-list learn-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice learn-vlan-1p-priority_choice choice learn-vlan-dei_choice { leaf-list learn-vlan-dei { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } leaf-list learn-vlan-dei-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } } // choice learn-vlan-dei_choice choice user-vlan-id_choice { leaf-list user-vlan-id { type string; ordered-by user; description "Range of values"; } leaf-list user-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice user-vlan-id_choice choice user-vlan-1p-priority_choice { leaf-list user-vlan-1p-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } leaf-list user-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice user-vlan-1p-priority_choice choice traffic-type_choice { leaf-list traffic-type { type enumeration { enum "broadcast" { value 0; description "Packets with broadcast ethernet address"; } enum "multicast" { value 1; description "Packets with multicast ethernet address"; } enum "unknown-unicast" { value 2; description "Packets for which destination ethernet address has not been learnt"; } enum "known-unicast" { value 3; description "Packets for which destination ethernet address has been learnt"; } } ordered-by user; } leaf-list traffic-type-except { type enumeration { enum "broadcast" { value 0; description "Packets with broadcast ethernet address"; } enum "multicast" { value 1; description "Packets with multicast ethernet address"; } enum "unknown-unicast" { value 2; description "Packets for which destination ethernet address has not been learnt"; } enum "known-unicast" { value 3; description "Packets for which destination ethernet address has been learnt"; } } ordered-by user; } } // choice traffic-type_choice list ip-address { key "name"; ordered-by user; description "Match IP source or destination address"; uses firewall_addr_object; } // list ip-address list interface-set { key "name"; ordered-by user; description "Match interface in set"; uses match_interface_set_object; } // list interface-set list prefix-list { key "name"; ordered-by user; description "Match IP source or destination prefixes in named list"; uses firewall_prefix_list; } // list prefix-list choice isid_choice { leaf-list isid { type string; ordered-by user; description "Range of values"; } leaf-list isid-except { type string; ordered-by user; description "Range of values"; } } // choice isid_choice choice isid-priority-code-point_choice { leaf-list isid-priority-code-point { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } leaf-list isid-priority-code-point-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice isid-priority-code-point_choice choice isid-dei_choice { leaf-list isid-dei { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } leaf-list isid-dei-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } } // choice isid-dei_choice choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice arp-type_choice { case case_1 { } // case case_1 } // choice arp-type_choice container ip-version { description "Define IP version"; uses apply-advanced; container ipv4 { junos:must "(!(".. ipv6"))"; junos:must-message "Same term cannot have both IPv4 & IPv6 IP version"; description "Define L3/L4 match items to match IPv4 packets"; uses apply-advanced; list source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list destination-address choice dscp_choice { leaf-list dscp { type string; ordered-by user; } leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice precedence_choice { leaf-list precedence { type string; ordered-by user; } leaf-list precedence-except { type string; ordered-by user; } } // choice precedence_choice choice ip-options_choice { case case_1 { } // case case_1 leaf-list ip-options-except { type enumeration { enum "any" { value 0; description "Any IP option"; } } ordered-by user; } } // choice ip-options_choice leaf fragment-flags { type string; description "Match fragment flags (in symbolic or hex formats) - (Ingress only)"; } leaf is-fragment { type empty; description "Match if packet is a fragment"; } choice protocol_choice { leaf-list protocol { type string; ordered-by user; } leaf-list protocol-except { type string; ordered-by user; } } // choice protocol_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { case case_1 { } // case case_1 leaf-list port-except { type string; ordered-by user; } } // choice port_choice leaf tcp-flags { type string; description "Match TCP flags (in symbolic or hex formats) - (Ingress only)"; } leaf tcp-initial { type empty; description "Match initial packet of a TCP connection - (Ingress only)"; } leaf tcp-established { type empty; description "Match packet of an established TCP connection"; } choice icmp-type_choice { leaf-list icmp-type { type string; ordered-by user; } leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { leaf-list icmp-code { type string; ordered-by user; } leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice list source-prefix-list { key "name"; ordered-by user; description "Match IP source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match IP destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list ip-source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list ip-source-address list ip-destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list ip-destination-address choice ip-protocol_choice { leaf-list ip-protocol { type string; ordered-by user; } leaf-list ip-protocol-except { type string; ordered-by user; } } // choice ip-protocol_choice choice ip-precedence_choice { leaf-list ip-precedence { type string; ordered-by user; } leaf-list ip-precedence-except { type string; ordered-by user; } } // choice ip-precedence_choice } // container ipv4 container ipv6 { junos:must "(!(".. ipv4"))"; junos:must-message "Same term cannot have both IPv4 & IPv6 IP version"; description "Define L3/L4 match items to match IPv6 packets"; uses apply-advanced; list source-address { key "name"; ordered-by user; description "Match source address"; uses firewall_addr6_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match destination address"; uses firewall_addr6_object; } // list destination-address choice traffic-class_choice { leaf-list traffic-class { type string; ordered-by user; } leaf-list traffic-class-except { type string; ordered-by user; } } // choice traffic-class_choice choice next-header_choice { leaf-list next-header { type string; ordered-by user; } leaf-list next-header-except { type string; ordered-by user; } } // choice next-header_choice choice payload-protocol_choice { case case_1 { } // case case_1 leaf-list payload-protocol-except { type string; ordered-by user; } } // choice payload-protocol_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { case case_1 { } // case case_1 leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice extension-header_choice { case case_1 { } // case case_1 leaf-list extension-header-except { type string; ordered-by user; } } // choice extension-header_choice leaf tcp-flags { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type string; description "Match TCP flags (in symbolic or hex formats)"; } leaf tcp-initial { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type empty; description "Match initial packet of a TCP connection"; } leaf tcp-established { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type empty; description "Match packet of an established TCP connection"; } choice icmp-type_choice { leaf-list icmp-type { type string; ordered-by user; } leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { leaf-list icmp-code { type string; ordered-by user; } leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice list source-prefix-list { key "name"; ordered-by user; description "Match IP source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match IP destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list ip6-source-address { key "name"; ordered-by user; description "Match source address"; uses firewall_addr6_object; } // list ip6-source-address list ip6-destination-address { key "name"; ordered-by user; description "Match destination address"; uses firewall_addr6_object; } // list ip6-destination-address } // container ipv6 } // container ip-version choice gbp-src-tag_choice { leaf-list gbp-src-tag { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice gbp-src-tag_choice choice gbp-dst-tag_choice { leaf-list gbp-dst-tag { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice gbp-dst-tag_choice choice packet-length_choice { case case_1 { } // case case_1 leaf-list packet-length-except { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice packet-length_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice designation { leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation leaf log { type empty; description "Log the packet"; } leaf pkt-trace { type empty; description "Trace the packet"; } leaf flood { type empty; description "Flood the packet"; } leaf syslog { type empty; description "System log (syslog) information about the packet"; } leaf packet-capture { type empty; description "Enable packet capture for telemetry"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf analyzer { junos:must "("ethernet-switching-options analyzer $$")"; junos:must-message "Named Analyzer must be set"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of analyzer - (Ingress only)"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } leaf next-hop-group { junos:must "("forwarding-options next-hop-group $$")"; junos:must-message "Referenced next-hop group is not defined"; type string; description "Use specified next-hop group"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice leaf vlan { junos:must "(("vlans $$" && !("vlans $$ vlan-range")))"; junos:must-message "Named or Non-range vlan must be set"; junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "Named or Non-vlan-id-list vlan must be set"; type string; description "Name of VLAN - (Ingress only)"; } leaf interface { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Switch traffic to the specified interface by-passing switching lookup - (Ingress only)"; } leaf gbp-src-tag { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Set GBP source tag"; } } // container then } // list term } // grouping es_filter grouping firewall_addr6_object { leaf name { type jt:ipv6prefix; description "Prefix to match"; } leaf except { type empty; description "Match address not in this prefix"; } } // grouping firewall_addr6_object grouping firewall_addr_object { leaf name { type jt:ipv4prefix; description "Prefix to match"; } leaf except { type empty; description "Match address not in this prefix"; } } // grouping firewall_addr_object grouping firewall_flexible_match { description "Define a flexible match"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Flex match template name"; } uses apply-advanced; leaf match-start { type enumeration { enum "layer-2" { value 0; description "Layer-2 match start"; } enum "layer-3" { value 1; description "Layer-3 match start"; } enum "layer-4" { value 2; description "Layer-4 match start"; } enum "payload" { value 3; description "Payload match start"; } } description "Start point to match in packet"; } leaf byte-offset { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Byte offset after the match start point"; } leaf bit-offset { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "Bit offset after the (match-start + byte) offset"; } leaf bit-length { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Length of integer input (1..32 bits), Optional length of string input (1..128 bits)"; } } // grouping firewall_flexible_match grouping firewall_hierpolicer { description "Define a hierarchical policer"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Hierarchical Policer name"; } choice sharing { leaf logical-interface-policer { type empty; description "Hierarchical policer is a logical interface policer"; } leaf physical-interface-policer { type empty; description "Hierarchical policer is a physical interface policer"; } } // choice sharing leaf shared-bandwidth-policer { type empty; description "Share policer bandwidth among bundle links"; } leaf filter-specific { type empty; description "Hierarchical policer is filter-specific"; } container aggregate { presence "enable aggregate"; description "Aggregate definition"; uses hierarchical-policer-aggregate-bucket; } // container aggregate container premium { presence "enable premium"; description "Premium definition"; uses hierarchical-policer-premium-bucket; } // container premium } // grouping firewall_hierpolicer grouping firewall_mac_addr_object { leaf name { type jt:mac-addr-prefix; description "MAC address to match"; } leaf except { type empty; description "Match MAC address not in this range"; } } // grouping firewall_mac_addr_object grouping firewall_policer { description "Define a policer"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policer name"; } uses apply-advanced; leaf filter-specific { type empty; description "Policer is filter-specific"; } leaf logical-interface-policer { type empty; description "Policer is logical interface policer"; } leaf physical-interface-policer { type empty; description "Policer is physical interface policer"; } leaf logical-bandwidth-policer { type empty; description "Policer uses logical interface bandwidth"; } leaf shared-bandwidth-policer { type empty; description "Share policer bandwidth among bundle links"; } choice exceeding { container if-exceeding { presence "enable if-exceeding"; description "Define rate limits"; uses apply-advanced; choice bandwidth { leaf bandwidth-limit { type string; units "bits per second"; description "Bandwidth limit"; } leaf bandwidth-percent { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } units "percent"; description "Bandwidth limit in percentage"; } } // choice bandwidth leaf burst-size-limit { type string; units "bytes"; description "Burst size limit"; } } // container if-exceeding case case_2 { } // case case_2 } // choice exceeding container counter { description "Define policer counter configuration"; uses apply-advanced; leaf counter-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 2"; } } description "Counter Index"; } } // container counter container then { description "Action to take if the rate limits are exceeded"; uses apply-advanced; leaf discard { type empty; description "Discard the packet"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } } // container then } // grouping firewall_policer grouping firewall_prefix_list { leaf name { type string; description "Prefix list to match"; } leaf except { type empty; description "Match addresses not in this prefix list"; } } // grouping firewall_prefix_list grouping hierarchical-policer-aggregate-bucket { uses apply-advanced; choice hp-aggregate-exceeding { container if-exceeding { presence "enable if-exceeding"; description "Define rate limits"; uses apply-advanced; choice bandwidth { leaf bandwidth-limit { type string; units "bits per second"; description "Bandwidth limit"; } } // choice bandwidth leaf burst-size-limit { type string; units "bytes"; description "Burst size limit"; } } // container if-exceeding case case_2 { } // case case_2 } // choice hp-aggregate-exceeding container then { description "Action to take if the rate limits are exceeded"; uses apply-advanced; choice hierarchical-policer-action { leaf discard { type empty; description "Discard the packet"; } case case_2 { } // case case_2 case case_3 { } // case case_3 } // choice hierarchical-policer-action } // container then } // grouping hierarchical-policer-aggregate-bucket grouping hierarchical-policer-premium-bucket { uses apply-advanced; choice hp-premium-exceeding { container if-exceeding { presence "enable if-exceeding"; description "Define rate limits"; uses apply-advanced; choice bandwidth { leaf bandwidth-limit { type string; units "bits per second"; description "Bandwidth limit"; } } // choice bandwidth leaf burst-size-limit { type string; units "bytes"; description "Burst size limit"; } } // container if-exceeding case case_2 { } // case case_2 } // choice hp-premium-exceeding container then { description "Action to take if the rate limits are exceeded"; uses apply-advanced; choice hierarchical-policer-action { leaf discard { type empty; description "Discard the packet"; } } // choice hierarchical-policer-action } // container then } // grouping hierarchical-policer-premium-bucket grouping inet6_filter { description "Define an IPv6 firewall filter"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf enhanced-mode { junos:must "(!(".. enhanced-mode-override"))"; junos:must-message "Cannot configure filter for both enhanced-mode and enhanced-mode-override"; type empty; description "Define filter for chassis network-services enhanced mode"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "("firewall family inet6 filter $$")"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice destination-class_choice { leaf-list destination-class { type string; ordered-by user; description "String name"; } leaf-list destination-class-except { type string; ordered-by user; description "String name"; } } // choice destination-class_choice choice source-class_choice { leaf-list source-class { type string; ordered-by user; description "String name"; } leaf-list source-class-except { type string; ordered-by user; description "String name"; } } // choice source-class_choice choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice list source-address { key "name"; ordered-by user; description "Match source address"; uses firewall_addr6_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match destination address"; uses firewall_addr6_object; } // list destination-address list address { key "name"; ordered-by user; description "Match source or destination address"; uses firewall_addr6_object; } // list address list source-prefix-list { key "name"; ordered-by user; description "Match source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list prefix-list { key "name"; ordered-by user; description "Match source or destination prefixes in named list"; uses firewall_prefix_list; } // list prefix-list choice next-header_choice { leaf-list next-header { type string; ordered-by user; } leaf-list next-header-except { type string; ordered-by user; } } // choice next-header_choice choice payload-protocol_choice { case case_1 { } // case case_1 leaf-list payload-protocol-except { type string; ordered-by user; } } // choice payload-protocol_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { leaf-list port { type string; ordered-by user; } leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice extension-header_choice { case case_1 { } // case case_1 leaf-list extension-header-except { type string; ordered-by user; } } // choice extension-header_choice choice packet-length_choice { leaf-list packet-length { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } leaf-list packet-length-except { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice packet-length_choice choice traffic-class_choice { leaf-list traffic-class { type string; ordered-by user; } leaf-list traffic-class-except { type string; ordered-by user; } } // choice traffic-class_choice choice icmp-type_choice { leaf-list icmp-type { type string; ordered-by user; } leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { leaf-list icmp-code { type string; ordered-by user; } leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice leaf tcp-initial { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type empty; description "Match initial packet of a TCP connection"; } leaf tcp-established { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type empty; description "Match packet of an established TCP connection"; } leaf tcp-flags { junos:must "((".. next-header tcp" || (".. next-header 6" || ".. payload-protocol tcp")))"; junos:must-message "next-header tcp or next-header 6 or payload-protocol tcp must be defined in the same clause"; type string; description "Match TCP flags (in symbolic or hex formats)"; } list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { leaf-list loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice hop-limit_choice { leaf-list hop-limit { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical hop-limit value or range between 0-255"; } ordered-by user; description "Range of values"; } leaf-list hop-limit-except { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical hop-limit value or range between 0-255"; } ordered-by user; description "Range of values"; } } // choice hop-limit_choice choice gre-key_choice { case case_1 { } // case case_1 leaf-list gre-key-except { type string; ordered-by user; description "Range of values"; } } // choice gre-key_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice choice inet6cnt { case case_1 { } // case case_1 leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } } // choice inet6cnt leaf service-accounting { junos:must "(!(".. service-accounting-deferred"))"; junos:must-message "'service-accounting-deferred' and 'service-accounting' cannot coexist"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting' cannot coexist"; type empty; description "Count the packets for service accounting"; } leaf service-accounting-deferred { junos:must "(!(".. service-accounting"))"; junos:must-message "Cannot be both 'service-accounting' and 'service-accounting-deferred'"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting-deferred' cannot coexist"; type empty; description "Count the packets for deferred service accounting"; } leaf log { type empty; description "Log the packet"; } leaf syslog { type empty; description "System log (syslog) information about the packet"; } leaf packet-capture { type empty; description "Enable packet capture for telemetry"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } leaf analyzer { junos:must "("ethernet-switching-options analyzer $$")"; junos:must-message "Named Analyzer must be set"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of analyzer"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf traffic-class { type string; description "Set traffic-class code point"; } leaf skip-services { type empty; description "Skip the services"; } leaf service-filter-hit { type empty; description "Marked when packet processing by the current type of chained filters is done, the packet is directed to the next type of filters"; } choice designation { case case_1 { } // case case_1 case case_2 { } // case case_2 leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } case case_6 { } // case case_6 list logical-system { key "logical-system-name"; max-elements 1; ordered-by user; description "Packets are directed to specified logical system"; leaf logical-system-name { 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"; } container routing-instance { description "Packets are directed to specified routing instance"; leaf routing-instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Name of routing instance"; } leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // list logical-system container routing-instance { description "Packets are directed to specified routing instance"; leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } case case_10 { } // case case_10 case case_11 { } // case case_11 container reject { presence "enable reject"; description "Reject the packet"; choice style { leaf no-route { type empty; description "Send ICMPv6 No Route message"; } leaf administratively-prohibited { type empty; description "Send ICMPv6 Administratively Prohibited message"; } leaf beyond-scope { type empty; description "Send ICMPv6 Beyond Scope of Source Address message"; } leaf address-unreachable { type empty; description "Send ICMPv6 Address Unreachable message"; } leaf port-unreachable { type empty; description "Send ICMPv6 Port Unreachable message"; } leaf policy-failed { type empty; description "Source address failed ingress/egress policy"; } leaf reject-route { type empty; description "Reject route to destination"; } leaf tcp-reset { type empty; description "Send TCP Reset message"; } leaf network-unreachable { type empty; status deprecated; description "Send ICMPv4 Network Unreachable message"; } leaf host-unreachable { type empty; status deprecated; description "Send ICMPv4 Host Unreachable message"; } leaf protocol-unreachable { type empty; status deprecated; description "Send ICMPv4 Protocol Unreachable message"; } leaf source-route-failed { type empty; status deprecated; description "Send ICMPv4 Source Route Failed message"; } leaf network-unknown { type empty; status deprecated; description "Send ICMPv4 Network Unknown message"; } leaf host-unknown { type empty; status deprecated; description "Send ICMPv4 Host Unknown message"; } leaf source-host-isolated { type empty; status deprecated; description "Send ICMPv4 Source Host Isolated message"; } leaf network-prohibited { type empty; status deprecated; description "Send ICMPv4 Network Prohibited message"; } leaf host-prohibited { type empty; status deprecated; description "Send ICMPv4 Host Prohibited message"; } leaf bad-network-tos { type empty; status deprecated; description "Send ICMPv4 Bad Network ToS message"; } leaf bad-host-tos { type empty; status deprecated; description "Send ICMPv4 Bad Host ToS message"; } leaf precedence-violation { type empty; status deprecated; description "Send ICMPv4 Precedence Violation message"; } leaf precedence-cutoff { type empty; status deprecated; description "Send ICMPv4 Precedence Cutoff message"; } } // choice style } // container reject } // choice designation } // container then } // list term } // grouping inet6_filter grouping inet6_fuf { leaf name { junos:must "(unique "firewall family <*> filter $$")"; junos:must-message "Fast update filter can not have the same name as firewall family filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of fast update filter"; } uses apply-advanced; leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf-list match-order { type enumeration { enum "next-header" { value 0; description "Include next header protocol in match set"; } enum "payload-protocol" { value 1; description "Include payload protocol in match set"; } enum "source-address" { value 2; description "Include source-address in match set"; } enum "destination-address" { value 3; description "Include destination-address in match set"; } enum "source-port" { value 4; description "Include source-port in match set"; } enum "destination-port" { value 5; description "Include destination-port in match set"; } enum "traffic-class" { value 6; description "Include traffic-class (DSCP) in match set"; } } ordered-by user; } list term { key "name"; ordered-by user; description "One or more firewall terms"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf only-at-create { type empty; description "Add term only when filter is first created."; } container from { description "Match criteria"; uses apply-advanced; container source-address { description "Match source IP address"; uses firewall_addr6_simple_object; } // container source-address container destination-address { description "Match destination IP address"; uses firewall_addr6_simple_object; } // container destination-address choice source-port_choice { container source-port { description "Match TCP/UDP source port"; uses match_simple_port_value; } // container source-port } // choice source-port_choice choice destination-port_choice { container destination-port { description "Match TCP/UDP destination port"; uses match_simple_port_value; } // container destination-port } // choice destination-port_choice choice next-header_choice { container next-header { description "Match next header protocol type"; uses match_simple_protocol_value; } // container next-header } // choice next-header_choice choice traffic-class_choice { container traffic-class { description "Match Differentiated Services (DiffServ) code point"; uses match_simple_dscp_value; } // container traffic-class } // choice traffic-class_choice leaf match-terms { type string; description "Dynamically supplied list of match criteria"; } } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } } // choice policer-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf service-accounting { junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting' cannot coexist"; type empty; description "Count the packets for service accounting"; } leaf log { type empty; description "Log the packet"; } leaf port-mirror { type empty; description "Port-mirror the packet"; } leaf loss-priority { junos:must "(!(".. three-color-policer"))"; junos:must-message "Configuring loss-priority is incompatible with configuring three-color-policer"; type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf action-terms { type string; description "Dynamically supplied list of actions"; } choice designation { leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } container routing-instance { description "Packets are directed to specified routing instance"; leaf routing-instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Name of routing instance"; } leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance } // choice designation } // container then } // list term } // grouping inet6_fuf grouping firewall_addr6_simple_object { uses apply-advanced; leaf address { type jt:ipv6prefix; description "Prefix to match"; } } // grouping firewall_addr6_simple_object grouping inet6_service_filter { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; list term { key "name"; ordered-by user; description "Service filter term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; container from { description "Match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice list source-address { key "name"; ordered-by user; description "Match source address"; uses firewall_addr6_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match destination address"; uses firewall_addr6_object; } // list destination-address list address { key "name"; ordered-by user; description "Match source or destination address"; uses firewall_addr6_object; } // list address list source-prefix-list { key "name"; ordered-by user; description "Match source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list prefix-list { key "name"; ordered-by user; description "Match source or destination prefixes in named list"; uses firewall_prefix_list; } // list prefix-list choice next-header_choice { leaf-list next-header { type string; ordered-by user; } leaf-list next-header-except { type string; ordered-by user; } } // choice next-header_choice choice payload-protocol_choice { case case_1 { } // case case_1 leaf-list payload-protocol-except { type string; ordered-by user; } } // choice payload-protocol_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { leaf-list port { type string; ordered-by user; } leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice extension-header_choice { case case_1 { } // case case_1 leaf-list extension-header-except { type string; ordered-by user; } } // choice extension-header_choice choice esp-spi_choice { leaf-list esp-spi { type string; ordered-by user; description "Range of values"; } leaf-list esp-spi-except { type string; ordered-by user; description "Range of values"; } } // choice esp-spi_choice choice ah-spi_choice { case case_1 { } // case case_1 leaf-list ah-spi-except { type string; ordered-by user; description "Range of values"; } } // choice ah-spi_choice leaf tcp-flags { type string; description "Match TCP flags (in symbolic or hex formats)"; } choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf log { type empty; description "Log the packet"; } leaf sample { type empty; description "Sample the packet"; } leaf port-mirror { type empty; description "Port-mirror the packet"; } choice designation { leaf service { type empty; description "Forward packets to service processing"; } leaf skip { type empty; description "Skip service processing"; } case case_3 { } // case case_3 } // choice designation } // container then } // list term } // grouping inet6_service_filter grouping inet_filter { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } leaf enhanced-mode { junos:must "(!(".. enhanced-mode-override"))"; junos:must-message "Cannot configure filter for both enhanced-mode and enhanced-mode-override"; type empty; description "Define filter for chassis network-services enhanced mode"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "(("firewall filter $$" || "firewall family inet filter $$"))"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice destination-class_choice { leaf-list destination-class { type string; ordered-by user; description "String name"; } leaf-list destination-class-except { type string; ordered-by user; description "String name"; } } // choice destination-class_choice choice source-class_choice { leaf-list source-class { type string; ordered-by user; description "String name"; } leaf-list source-class-except { type string; ordered-by user; description "String name"; } } // choice source-class_choice choice interface-group_choice { case case_1 { } // case case_1 leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice list source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list destination-address list source-prefix-list { key "name"; ordered-by user; description "Match IP source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match IP destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list choice packet-length_choice { leaf-list packet-length { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } leaf-list packet-length-except { type string { junos:posix-pattern "^([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f])(-([0-9]{1,4}|[1-5][0-9][0-9][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5]|0x[0-f][0-f][0-f][0-f]|0x[0-f]|0x[0-f][0-f]|0x[0-f][0-f][0-f]))?$"; junos:pattern-message "Must be a numeric value or a range between 0-65535"; } ordered-by user; description "Range of values"; } } // choice packet-length_choice choice dscp_choice { leaf-list dscp { type string; ordered-by user; } leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice precedence_choice { leaf-list precedence { type string; ordered-by user; } leaf-list precedence-except { type string; ordered-by user; } } // choice precedence_choice choice ip-options_choice { leaf-list ip-options { type string; ordered-by user; } leaf-list ip-options-except { type string; ordered-by user; } } // choice ip-options_choice leaf is-fragment { type empty; description "Match if packet is a fragment"; } choice fragment-offset_choice { leaf-list fragment-offset { type string { junos:posix-pattern "^[[:digit:]]+(-[[:digit:]]+)?$"; junos:pattern-message "Must be a in form of number or a range in the form '<minimum-value>-<maximum-value>'"; } ordered-by user; description "Range of values"; } leaf-list fragment-offset-except { type string { junos:posix-pattern "^[[:digit:]]+(-[[:digit:]]+)?$"; junos:pattern-message "Must be a in form of number or a range in the form '<minimum-value>-<maximum-value>'"; } ordered-by user; description "Range of values"; } } // choice fragment-offset_choice leaf fragment-flags { type string { junos:posix-pattern "^(0x4000|0x2000|dont-fragment|more-fragments)$"; junos:pattern-message "fragment-flags must be either dont-fragment(0x4000) or more-fragments(0x2000)"; } description "Match fragment flags (in symbolic or hex formats) - (Ingress only)"; } choice protocol_choice { leaf-list protocol { type string; ordered-by user; } leaf-list protocol-except { type string; ordered-by user; } } // choice protocol_choice choice ttl_choice { leaf-list ttl { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical TTL value or range between 0-255"; } ordered-by user; description "Range of values"; } leaf-list ttl-except { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical TTL value or range between 0-255"; } ordered-by user; description "Range of values"; } } // choice ttl_choice choice icmp-type_choice { leaf-list icmp-type { type string; ordered-by user; } leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice choice icmp-code_choice { leaf-list icmp-code { type string; ordered-by user; } leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { case case_1 { } // case case_1 leaf-list port-except { type string; ordered-by user; } } // choice port_choice leaf tcp-initial { type empty; description "Match initial packet of a TCP connection"; } leaf tcp-established { type empty; description "Match packet of an established TCP connection"; } leaf tcp-flags { type string; description "Match TCP flags (in symbolic or hex formats)"; } choice esp-spi_choice { case case_1 { } // case case_1 leaf-list esp-spi-except { type string; ordered-by user; description "Range of values"; } } // choice esp-spi_choice choice ah-spi_choice { case case_1 { } // case case_1 leaf-list ah-spi-except { type string; ordered-by user; description "Range of values"; } } // choice ah-spi_choice list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { leaf-list loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice rat-type_choice { leaf-list rat-type { type string; ordered-by user; } leaf-list rat-type-except { type string; ordered-by user; } } // choice rat-type_choice choice redirect-reason_choice { leaf-list redirect-reason { type enumeration { enum "aoc" { value 0; description "Advice of Charge"; } enum "aolb" { value 1; description "Advice of Low Balance"; } enum "dpi" { value 2; description "Layer7 match required"; } } ordered-by user; } leaf-list redirect-reason-except { type enumeration { enum "aoc" { value 0; description "Advice of Charge"; } enum "aolb" { value 1; description "Advice of Low Balance"; } enum "dpi" { value 2; description "Layer7 match required"; } } ordered-by user; } } // choice redirect-reason_choice choice gre-key_choice { case case_1 { } // case case_1 leaf-list gre-key-except { type string; ordered-by user; description "Range of values"; } } // choice gre-key_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice choice inetcnt { case case_1 { } // case case_1 leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } } // choice inetcnt leaf service-accounting { junos:must "(!(".. service-accounting-deferred"))"; junos:must-message "'service-accounting-deferred' and 'service-accounting' cannot coexist"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting' cannot coexist"; type empty; description "Count the packets for service accounting"; } leaf skip-services { type empty; description "Skip the services"; } leaf service-accounting-deferred { junos:must "(!(".. service-accounting"))"; junos:must-message "Cannot be both 'service-accounting' and 'service-accounting-deferred'"; junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting-deferred' cannot coexist"; type empty; description "Count the packets for deferred service accounting"; } leaf log { type empty; description "Log the packet"; } leaf syslog { type empty; description "System log (syslog) information about the packet"; } leaf packet-capture { type empty; description "Enable packet capture for telemetry"; } leaf sample { junos:must "(!(".. sampling-instance"))"; junos:must-message "'sampling' and 'sampling-instance' are mutually exclusive"; junos:must "(("forwarding-options sampling family inet" || ("forwarding-options packet-capture" || any "forwarding-options sampling instance <*> family inet")))"; junos:must-message "Requires forwarding-options sampling or packet-capture config"; type empty; description "Sample the packet"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } leaf analyzer { junos:must "("ethernet-switching-options analyzer $$")"; junos:must-message "Named Analyzer must be set"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of analyzer - (Ingress only)"; } leaf loss-priority { junos:must "(!(".. three-color-policer"))"; junos:must-message "Configuring loss-priority is incompatible with configuring three-color-policer"; type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf service-filter-hit { type empty; description "Marked when packet processing by the current type of chained filters is done, the packet is directed to the next type of filters"; } choice designation { leaf accept { type empty; description "Accept the packet"; } container discard { presence "enable discard"; description "Discard the packet"; uses apply-advanced; leaf accounting { type string; description "Named discard collector for packet"; } } // container discard leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } list logical-system { key "logical-system-name"; max-elements 1; ordered-by user; description "Packets are directed to specified logical system"; leaf logical-system-name { 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"; } container routing-instance { description "Packets are directed to specified routing instance"; leaf routing-instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Name of routing instance"; } leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // list logical-system container routing-instance { description "Packets are directed to specified routing instance"; leaf routing-instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Name of routing instance"; } leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } case case_7 { } // case case_7 case case_8 { } // case case_8 leaf ipsec-sa { type string; description "Use specified IPSec security association"; } leaf next-hop-group { type string; description "Use specified next-hop group"; } case case_11 { } // case case_11 case case_12 { } // case case_12 container reject { presence "enable reject"; description "Reject the packet"; choice style { leaf network-unreachable { type empty; description "Send ICMP Network Unreachable message"; } leaf host-unreachable { type empty; description "Send ICMP Host Unreachable message"; } leaf protocol-unreachable { type empty; description "Send ICMP Protocol Unreachable message"; } leaf port-unreachable { type empty; description "Send ICMP Port Unreachable message"; } leaf fragmentation-needed { type empty; description "Send ICMP Fragmentation Needed message"; } leaf source-route-failed { type empty; description "Send ICMP Source Route Failed message"; } leaf network-unknown { type empty; description "Send ICMP Network Unknown message"; } leaf host-unknown { type empty; description "Send ICMP Host Unknown message"; } leaf source-host-isolated { type empty; description "Send ICMP Source Host Isolated message"; } leaf network-prohibited { type empty; description "Send ICMP Network Prohibited message"; } leaf host-prohibited { type empty; description "Send ICMP Host Prohibited message"; } leaf bad-network-tos { type empty; description "Send ICMP Bad Network ToS message"; } leaf bad-host-tos { type empty; description "Send ICMP Bad Host ToS message"; } leaf administratively-prohibited { type empty; description "Send ICMP Administratively Prohibited message"; } leaf precedence-violation { type empty; description "Send ICMP Precedence Violation message"; } leaf precedence-cutoff { type empty; description "Send ICMP Precedence Cutoff message"; } leaf tcp-reset { type empty; description "Send TCP Reset message"; } } // choice style } // container reject case case_14 { } // case case_14 } // choice designation leaf dscp { type string; description "Set Differentiated Services (DiffServ) code point"; } leaf prefix-action { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Police or count packets using named prefix action"; } } // container then } // list term } // grouping inet_filter grouping inet_fuf { leaf name { junos:must "(unique "firewall family <*> filter $$")"; junos:must-message "Fast update filter can not have the same name as firewall family filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of fast update filter"; } uses apply-advanced; leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf-list match-order { type enumeration { enum "protocol" { value 0; description "Include IP protocol in match set"; } enum "source-address" { value 1; description "Include source-address in match set"; } enum "destination-address" { value 2; description "Include destination-address in match set"; } enum "source-port" { value 3; description "Include source-port in match set"; } enum "destination-port" { value 4; description "Include destination-port in match set"; } enum "dscp" { value 5; description "Include Differentiated Services (DiffServ) code point in match set"; } } ordered-by user; } list term { key "name"; ordered-by user; description "One or more firewall terms"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf only-at-create { type empty; description "Add term only when filter is first created."; } container from { description "Match criteria"; uses apply-advanced; container source-address { description "Match source IP address"; uses firewall_addr_simple_object; } // container source-address container destination-address { description "Match destination IP address"; uses firewall_addr_simple_object; } // container destination-address choice source-port_choice { container source-port { description "Match TCP/UDP source port"; uses match_simple_port_value; } // container source-port } // choice source-port_choice choice destination-port_choice { container destination-port { description "Match TCP/UDP destination port"; uses match_simple_port_value; } // container destination-port } // choice destination-port_choice choice protocol_choice { container protocol { description "Match IP protocol type"; uses match_simple_protocol_value; } // container protocol } // choice protocol_choice choice dscp_choice { container dscp { description "Match Differentiated Services (DiffServ) code point"; uses match_simple_dscp_value; } // container dscp } // choice dscp_choice leaf match-terms { type string; description "Dynamically supplied list of match criteria"; } } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } } // choice policer-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf service-accounting { junos:must "(!(".. count"))"; junos:must-message "'count' and 'service-accounting' cannot coexist"; type empty; description "Count the packets for service accounting"; } leaf log { type empty; description "Log the packet"; } leaf port-mirror { type empty; description "Port-mirror the packet"; } leaf loss-priority { junos:must "(!(".. three-color-policer"))"; junos:must-message "Configuring loss-priority is incompatible with configuring three-color-policer"; type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf action-terms { type string; description "Dynamically supplied list of actions"; } choice designation { leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } container routing-instance { description "Packets are directed to specified routing instance"; leaf routing-instance-name { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Name of routing instance"; } leaf topology { type string { junos:posix-pattern "!^((.*:.*)|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less"; } description "Packets are directed to specified topology"; } } // container routing-instance } // choice designation } // container then } // list term } // grouping inet_fuf grouping firewall_addr_simple_object { uses apply-advanced; leaf address { type jt:ipv4prefix; description "Prefix to match"; } } // grouping firewall_addr_simple_object grouping inet_service_filter { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; list term { key "name"; ordered-by user; description "Service filter term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; container from { description "Match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice list source-address { key "name"; ordered-by user; description "Match IP source address"; uses firewall_addr_object; } // list source-address list destination-address { key "name"; ordered-by user; description "Match IP destination address"; uses firewall_addr_object; } // list destination-address list address { key "name"; ordered-by user; description "Match IP source or destination address"; uses firewall_addr_object; } // list address list source-prefix-list { key "name"; ordered-by user; description "Match IP source prefixes in named list"; uses firewall_prefix_list; } // list source-prefix-list list destination-prefix-list { key "name"; ordered-by user; description "Match IP destination prefixes in named list"; uses firewall_prefix_list; } // list destination-prefix-list list prefix-list { key "name"; ordered-by user; description "Match IP source or destination prefixes in named list"; uses firewall_prefix_list; } // list prefix-list choice protocol_choice { leaf-list protocol { type string; ordered-by user; } leaf-list protocol-except { type string; ordered-by user; } } // choice protocol_choice choice ip-options_choice { leaf-list ip-options { type enumeration { enum "any" { value 0; description "Any IP option"; } } ordered-by user; } leaf-list ip-options-except { type enumeration { enum "any" { value 0; description "Any IP option"; } } ordered-by user; } } // choice ip-options_choice choice source-port_choice { leaf-list source-port { type string; ordered-by user; } leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { leaf-list destination-port { type string; ordered-by user; } leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { leaf-list port { type string; ordered-by user; } leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice esp-spi_choice { leaf-list esp-spi { type string; ordered-by user; description "Range of values"; } leaf-list esp-spi-except { type string; ordered-by user; description "Range of values"; } } // choice esp-spi_choice leaf is-fragment { type empty; description "Match if packet is a fragment"; } leaf first-fragment { type empty; description "Match if packet is the first fragment"; } choice fragment-offset_choice { leaf-list fragment-offset { type string { junos:posix-pattern "^[[:digit:]]+(-[[:digit:]]+)?$"; junos:pattern-message "Must be a in form of number or a range in the form '<minimum-value>-<maximum-value>'"; } ordered-by user; description "Range of values"; } leaf-list fragment-offset-except { type string { junos:posix-pattern "^[[:digit:]]+(-[[:digit:]]+)?$"; junos:pattern-message "Must be a in form of number or a range in the form '<minimum-value>-<maximum-value>'"; } ordered-by user; description "Range of values"; } } // choice fragment-offset_choice leaf fragment-flags { type string; description "Match fragment flags"; } leaf tcp-flags { type string; description "Match TCP flags (in symbolic or hex formats)"; } choice ah-spi_choice { case case_1 { } // case case_1 leaf-list ah-spi-except { type string; ordered-by user; description "Range of values"; } } // choice ah-spi_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice redirect-reason_choice { leaf-list redirect-reason { type enumeration { enum "aoc" { value 0; description "Advice of Charge"; } enum "aolb" { value 1; description "Advice of Low Balance"; } enum "dpi" { value 2; description "Layer7 match required"; } } ordered-by user; } leaf-list redirect-reason-except { type enumeration { enum "aoc" { value 0; description "Advice of Charge"; } enum "aolb" { value 1; description "Advice of Low Balance"; } enum "dpi" { value 2; description "Layer7 match required"; } } ordered-by user; } } // choice redirect-reason_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf log { type empty; description "Log the packet"; } leaf sample { type empty; description "Sample the packet"; } leaf port-mirror { type empty; description "Port-mirror the packet"; } choice designation { leaf service { type empty; description "Forward packets to service processing"; } leaf skip { type empty; description "Skip service processing"; } case case_3 { } // case case_3 } // choice designation } // container then } // list term } // grouping inet_service_filter grouping interface_set_type { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Interface set name"; } uses apply-advanced; list interface-list { key "name"; ordered-by user; description "Interface list"; leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; } // list interface-list } // grouping interface_set_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-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-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 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 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-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 juniper-def-rtb-switch-options { description "Bridge option 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 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"; } 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 { 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 list interface { key "name"; ordered-by user; description "Interface for configuring bridge-options"; leaf name { junos:must "(("interfaces $$-IFL family bridge interface-mode" || "interfaces $$-IFL family ethernet-switching"))"; junos:must-message "Only interface with 'interface-mode' are allowed in a default routing-instance"; junos:must "("interfaces $$")"; 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 { 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 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 { type empty; description "Disable dynamic MAC address learning"; } leaf persistent-learning { junos:must "(!(".. no-mac-learning"))"; junos:must-message "Persistent learning can not co-exist with no-mac-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 no-mac-notification { type empty; description "Disable mac notification on this interface"; } } // list interface leaf-list remote-vtep-list { type jt:ipaddr; max-elements 1024; description "Configure static remote VXLAN tunnel endpoints"; } leaf interface-shutdown-action { type enumeration { enum "soft-shutdown" { value 0; description "Soft-shutdown restricts data-packets while control-packets are still received"; } enum "hard-shutdown" { value 1; description "Hard-shutdown restricts all packets, port will not be operational"; } } description "Interface shutdown mode for Storm-Control/Mac-Limit/Mac-Move-limit scenario"; } leaf-list remote-vtep-v6-list { type jt:ipv6addr; max-elements 1024; description "Configurate static IPv6 remote VXLAN tunnel endpoints"; } container route-distinguisher { junos:must "(".. .. protocols evpn")"; junos:must-message "protocols evpn must be defined"; 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 { junos:must "(".. route-distinguisher")"; junos:must-message "route-distinguisher must be defined"; type jt:policy-algebra; ordered-by user; description "Import policy for VRF instance RIBs"; } 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 VRF instance RIBs"; } container vrf-target { junos:must "(".. route-distinguisher")"; junos:must-message "route-distinguisher must be defined"; 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"; } container auto { presence "enable auto"; description "Auto derive import and export target community from BGP AS & L2"; uses juniper-def-rtb-auto-import-as; } // container auto } // container vrf-target container redundant-trunk-group { description "Redundant trunk group"; uses apply-advanced; list group { key "name"; ordered-by user; description "Name of Redundant trunk 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 "RTG name"; } uses apply-advanced; leaf preempt-cutover-timer { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 600"; } } units "seconds"; description "Hold timer for primary interface before preempting secondary interface"; } leaf description { 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 .. 127"; } description "Text description of the RTG"; } list interface { key "name"; description "Interfaces that are part of this redundant trunk group"; leaf name { junos:must "(!("switch-options interface $$ persistent-learning"))"; junos:must-message "Persistent learning can not be configured on an interface which is part of RTG"; junos:must "(!(any "forwarding-options analyzer <*> output interface $$"))"; junos:must-message "Analyzer output and RTG can not be enabled on the same interface"; junos:must "(!((any "protocols protection-group ethernet-ring <*> east-interface control-channel $$" || any "protocols protection-group ethernet-ring <*> west-interface control-channel $$")))"; junos:must-message "ERP and RTG can not be enabled on the same interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf primary { type empty; description "Set Primary Redundant Trunk Group interface"; } } // list interface } // list group } // container redundant-trunk-group 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-def-rtb-switch-options grouping juniper-def-rtb-auto-import-as { uses apply-advanced; list import-as { key "name"; description "AS to auto import for a list of VNI ids"; leaf name { 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"; } uses apply-advanced; leaf-list vni-list { type string; description "List of VNI identifiers or all"; } } // list import-as } // grouping juniper-def-rtb-auto-import-as 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-policy-options { uses apply-advanced; container satellite-policies { description "Satellite Policy configuration"; uses satellite-policy-options; } // container satellite-policies list prefix-list { key "name"; ordered-by user; description "Define a named set of address prefixes"; leaf name { type string; description "Prefix list name"; } uses apply-advanced; list prefix-list-item { key "name"; uses prefix_list_items; } // list prefix-list-item leaf apply-path { type string; description "Apply IP prefixes from a configuration statement"; } } // list prefix-list list mac-list { key "name"; ordered-by user; description "Define a named set of mac addresses"; leaf name { type string; description "MAc Address list name"; } uses apply-advanced; list mac-addr-list-item { key "name"; uses mac_addr_list_items; } // list mac-addr-list-item } // list mac-list list vsi-policy { key "name"; ordered-by user; description "Define a named set of VSI policies"; leaf name { type string; description "VSI policy name"; } uses apply-advanced; container from { description "Conditions to match the VSI policy"; uses apply-advanced; list vsi-manager { key "vsi-manager-id vsi-type vsi-version vsi-instance"; ordered-by user; description "VSI manager"; leaf vsi-manager-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "VSI manager ID"; } leaf vsi-type { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777216"; } } description "VSI type"; } leaf vsi-version { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "VSI version"; } leaf vsi-instance { type string; description "VSI instance"; } uses apply-advanced; } // list vsi-manager } // container from container then { description "Actions to take if 'from' conditions match"; uses apply-advanced; leaf filter { junos:must "("firewall family ethernet-switching filter $$")"; junos:must-message "filter should be defined under 'firewall family ethernet-switching filter'"; type string; description "Filter name"; } } // container then } // list vsi-policy leaf skip-then-actions { type empty; description "Skip 'then' actions and allow route actions in 'from'"; } list route-filter-list { key "name"; ordered-by user; description "Define a named set of route-filter address prefixes"; leaf name { type string; description "Route filter list name"; } uses apply-advanced; list rf_list { key "address choice-ident choice-value"; ordered-by user; uses route_filter_list_items; } // list rf_list } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "Define a named set of source address filter address prefixes"; leaf name { type string; description "Source address filter list name"; } uses apply-advanced; list saf_list { key "address choice-ident choice-value"; ordered-by user; uses source_address_filter_list_items; } // list saf_list } // list source-address-filter-list list policy-statement { key "name"; description "Routing policy"; leaf name { type string; description "Name to identify a policy filter"; } uses apply-advanced; container defaults { description "Policy default behaviour"; uses apply-advanced; container route-filter { description "Set route filter behaviour"; choice scope-choice { leaf no-walkup { type empty; description "Route filter walk up disable"; } leaf walkup { type empty; description "Route filter walk up enable"; } } // choice scope-choice } // container route-filter } // container defaults list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string; } uses apply-advanced; container from { description "Conditions to match the source of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path list route-filter { key "address choice-ident choice-value"; ordered-by user; description "List of routes to match"; uses control_route_filter_type; } // list route-filter list source-address-filter { key "address choice-ident choice-value"; ordered-by user; description "List of source addresses to match"; uses control_source_address_filter_type; } // list source-address-filter list prefix-list { key "name"; ordered-by user; description "List of prefix-lists of routes to match"; uses control_prefix_list_type; } // list prefix-list list as-path-neighbors { key "list-type list-name"; ordered-by user; description "List of peer AS to match"; uses control_as_list_type; } // list as-path-neighbors list as-path-origins { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-origins list as-path-transits { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-transits list prefix-list-filter { key "list_name choice-ident choice-value"; ordered-by user; description "List of prefix-list-filters to match"; uses control_prefix_list_filter_type; } // list prefix-list-filter list rtf-prefix-list { key "name"; ordered-by user; description "List of rtf-prefix-lists of routes to match"; uses control_rtf_prefix_list_type; } // list rtf-prefix-list list route-filter-list { key "name"; ordered-by user; description "List of route-filter-lists of routes to match"; uses control_route_filter_list_type; } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "List of source-address-filter-lists of routes to match"; uses control_source_address_filter_list_type; } // list source-address-filter-list container multicast-scope { description "Multicast scope to match"; choice scope-choice { leaf node-local { type empty; description "Node-local scope"; } leaf link-local { type empty; description "Link-local scope"; } leaf site-local { type empty; description "Site-local scope"; } leaf organization-local { type empty; description "Organization-local scope"; } leaf global { type empty; description "Global scope"; } leaf scope_value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15"; } } description "Scope value"; } } // choice scope-choice choice scope-operator { leaf orhigher { type empty; description "Match higher values"; } leaf orlower { type empty; description "Match lower values"; } } // choice scope-operator } // container multicast-scope leaf aggregate-contributor { type empty; description "Match more specifics of an aggregate"; } leaf state { type enumeration { enum "active" { value 0; description "Active route"; } enum "inactive" { value 1; description "Inactive route"; } } description "Route state"; } leaf-list tunnel-type { type enumeration { enum "gre" { value 0; description "GRE tunnel"; } enum "udp" { value 1; description "UDP tunnel"; } enum "ipip" { value 2; description "IPIP tunnel"; } } ordered-by user; description "Tunnel type"; } leaf route-type { type enumeration { enum "internal" { value 0; description "Internal route"; } enum "external" { value 1; description "External route"; } } description "Route type"; } leaf-list nlri-route-type { junos:must "((".. family evpn" || (".. family inet-mvpn" || ".. family inet6-mvpn")))"; junos:must-message "nlri-route-type is only valid with a family qualifier such as evpn, inet-mvpn, inet6-mvpn, or other family that supports a route type"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } ordered-by user; description "Route type from NLRI"; } leaf-list evpn-tag { junos:must "(".. family evpn")"; junos:must-message "evpn-tag is only valid with a family qualifier evpn"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } ordered-by user; description "Tag in EVPN Route"; } leaf-list evpn-esi { junos:must "(".. family evpn")"; junos:must-message "evpn-esi is only valid with a family qualifier evpn"; type string; ordered-by user; description "ESI in EVPN Route"; } list mac-filter-list { junos:must "(".. family evpn")"; junos:must-message "mac-filter is only valid with a family qualifier evpn"; key "name"; ordered-by user; description "List of mac-filter-list macs to match"; uses control_mac_address_filter_list_type; } // list mac-filter-list leaf evpn-mac-route { junos:must "(".. family evpn")"; junos:must-message "evpn-mac-route is only valid with a family qualifier evpn"; type enumeration { enum "mac-only" { value 0; description "MAC route"; } enum "mac-ipv4" { value 1; description "MAC IPV4 route"; } enum "mac-ipv6" { value 2; description "MAC IPV6 route"; } } description "EVPN Mac Route type"; } leaf next-hop-type { type enumeration { enum "merged" { value 0; description "Merged next hop"; } } description "Next-hop type"; } leaf-list condition { type string; ordered-by user; description "Condition to match on"; } list community-count { key "name"; ordered-by user; description "Number of BGP communities"; uses community_count_type; } // list community-count list as-path-unique-count { key "name"; ordered-by user; description "Number of unique BGP ASes excluding confederations"; uses as-path-unique-count-type; } // list as-path-unique-count list as-path-calc-length { key "name"; ordered-by user; description "Number of BGP ASes excluding confederations"; uses as-path-calc-length-type; } // list as-path-calc-length container traffic-engineering { junos:must "(!(".. family"))"; junos:must-message "traffic-engineering family implied"; presence "enable traffic-engineering"; description "Traffic-Engineering related parameters"; uses apply-advanced; leaf-list protocol { type enumeration { enum "direct" { value 0; description "Directly originated"; } enum "ospf" { value 1; description "OSPF originated"; } enum "isis-level-1" { value 2; description "ISIS level-1 originated"; } enum "isis-level-2" { value 3; description "ISIS level-2 originated"; } enum "static" { value 4; description "Statically originated"; } enum "unknown" { value 5; description "Originated by unknown sources"; } } ordered-by user; description "Protocol that originated the entry"; } container node { junos:must "(!((".. link" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable node"; description "Node-related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Real or pseudo-node"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container node container ipv4-prefix { junos:must "(!((".. link" || ".. node")))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable ipv4-prefix"; description "IPV4 prefix-related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf prefix { type jt:ipprefix; description "IP prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv4-prefix container ipv6-prefix { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. srv6-sid")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable ipv6-prefix"; description "IPV6 prefix related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IPv6 prefix to match the router-id against"; } leaf prefix { type jt:ipv6prefix; description "IPv6 prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv6-prefix container srv6-sid { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. ipv6-prefix")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable srv6-sid"; description "SRV6 SID related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "SRv6 SID to match the router-id against"; } leaf sid { type jt:ipv6addr; description "SRv6 SID to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container srv6-sid container link { junos:must "(!((".. node" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable link"; description "Link-related parameters"; uses apply-advanced; container from { description "Specify parameter of the 'from' side"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container from container to { description "Specify parameters of the 'to' side"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container to } // container link } // container traffic-engineering leaf-list route-distinguisher { type string; ordered-by user; description "Name of the route-distinguisher"; } } // container from container to { description "Conditions to match the destination of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path } // container to container then { description "Actions to take if 'from' and 'to' conditions match"; uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // container then } // list term container from { description "Conditions to match the source of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path list route-filter { key "address choice-ident choice-value"; ordered-by user; description "List of routes to match"; uses control_route_filter_type; } // list route-filter list source-address-filter { key "address choice-ident choice-value"; ordered-by user; description "List of source addresses to match"; uses control_source_address_filter_type; } // list source-address-filter list prefix-list { key "name"; ordered-by user; description "List of prefix-lists of routes to match"; uses control_prefix_list_type; } // list prefix-list list as-path-neighbors { key "list-type list-name"; ordered-by user; description "List of peer AS to match"; uses control_as_list_type; } // list as-path-neighbors list as-path-origins { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-origins list as-path-transits { key "list-type list-name"; ordered-by user; description "List of originating AS to match"; uses control_as_list_type; } // list as-path-transits list prefix-list-filter { key "list_name choice-ident choice-value"; ordered-by user; description "List of prefix-list-filters to match"; uses control_prefix_list_filter_type; } // list prefix-list-filter list rtf-prefix-list { key "name"; ordered-by user; description "List of rtf-prefix-lists of routes to match"; uses control_rtf_prefix_list_type; } // list rtf-prefix-list list route-filter-list { key "name"; ordered-by user; description "List of route-filter-lists of routes to match"; uses control_route_filter_list_type; } // list route-filter-list list source-address-filter-list { key "name"; ordered-by user; description "List of source-address-filter-lists of routes to match"; uses control_source_address_filter_list_type; } // list source-address-filter-list container multicast-scope { description "Multicast scope to match"; choice scope-choice { leaf node-local { type empty; description "Node-local scope"; } leaf link-local { type empty; description "Link-local scope"; } leaf site-local { type empty; description "Site-local scope"; } leaf organization-local { type empty; description "Organization-local scope"; } leaf global { type empty; description "Global scope"; } leaf scope_value { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15"; } } description "Scope value"; } } // choice scope-choice choice scope-operator { leaf orhigher { type empty; description "Match higher values"; } leaf orlower { type empty; description "Match lower values"; } } // choice scope-operator } // container multicast-scope leaf aggregate-contributor { type empty; description "Match more specifics of an aggregate"; } leaf state { type enumeration { enum "active" { value 0; description "Active route"; } enum "inactive" { value 1; description "Inactive route"; } } description "Route state"; } leaf-list tunnel-type { type enumeration { enum "gre" { value 0; description "GRE tunnel"; } enum "udp" { value 1; description "UDP tunnel"; } enum "ipip" { value 2; description "IPIP tunnel"; } } ordered-by user; description "Tunnel type"; } leaf route-type { type enumeration { enum "internal" { value 0; description "Internal route"; } enum "external" { value 1; description "External route"; } } description "Route type"; } leaf-list nlri-route-type { junos:must "((".. family evpn" || (".. family inet-mvpn" || ".. family inet6-mvpn")))"; junos:must-message "nlri-route-type is only valid with a family qualifier such as evpn, inet-mvpn, inet6-mvpn, or other family that supports a route type"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } ordered-by user; description "Route type from NLRI"; } leaf-list evpn-tag { junos:must "(".. family evpn")"; junos:must-message "evpn-tag is only valid with a family qualifier evpn"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } ordered-by user; description "Tag in EVPN Route"; } leaf-list evpn-esi { junos:must "(".. family evpn")"; junos:must-message "evpn-esi is only valid with a family qualifier evpn"; type string; ordered-by user; description "ESI in EVPN Route"; } list mac-filter-list { junos:must "(".. family evpn")"; junos:must-message "mac-filter is only valid with a family qualifier evpn"; key "name"; ordered-by user; description "List of mac-filter-list macs to match"; uses control_mac_address_filter_list_type; } // list mac-filter-list leaf evpn-mac-route { junos:must "(".. family evpn")"; junos:must-message "evpn-mac-route is only valid with a family qualifier evpn"; type enumeration { enum "mac-only" { value 0; description "MAC route"; } enum "mac-ipv4" { value 1; description "MAC IPV4 route"; } enum "mac-ipv6" { value 2; description "MAC IPV6 route"; } } description "EVPN Mac Route type"; } leaf next-hop-type { type enumeration { enum "merged" { value 0; description "Merged next hop"; } } description "Next-hop type"; } leaf-list condition { type string; ordered-by user; description "Condition to match on"; } list community-count { key "name"; ordered-by user; description "Number of BGP communities"; uses community_count_type; } // list community-count list as-path-unique-count { key "name"; ordered-by user; description "Number of unique BGP ASes excluding confederations"; uses as-path-unique-count-type; } // list as-path-unique-count list as-path-calc-length { key "name"; ordered-by user; description "Number of BGP ASes excluding confederations"; uses as-path-calc-length-type; } // list as-path-calc-length container traffic-engineering { junos:must "(!(".. family"))"; junos:must-message "traffic-engineering family implied"; presence "enable traffic-engineering"; description "Traffic-Engineering related parameters"; uses apply-advanced; leaf-list protocol { type enumeration { enum "direct" { value 0; description "Directly originated"; } enum "ospf" { value 1; description "OSPF originated"; } enum "isis-level-1" { value 2; description "ISIS level-1 originated"; } enum "isis-level-2" { value 3; description "ISIS level-2 originated"; } enum "static" { value 4; description "Statically originated"; } enum "unknown" { value 5; description "Originated by unknown sources"; } } ordered-by user; description "Protocol that originated the entry"; } container node { junos:must "(!((".. link" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable node"; description "Node-related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Real or pseudo-node"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container node container ipv4-prefix { junos:must "(!((".. link" || ".. node")))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable ipv4-prefix"; description "IPV4 prefix-related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf prefix { type jt:ipprefix; description "IP prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv4-prefix container ipv6-prefix { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. srv6-sid")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable ipv6-prefix"; description "IPV6 prefix related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IPv6 prefix to match the router-id against"; } leaf prefix { type jt:ipv6prefix; description "IPv6 prefix to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container ipv6-prefix container srv6-sid { junos:must "(!((".. link" || (".. node" || (".. ipv4-prefix" || ".. ipv6-prefix")))))"; junos:must-message "Link/prefix/node/srv6-sid parameters cannot be configured at the same time"; presence "enable srv6-sid"; description "SRV6 SID related parameters"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "SRv6 SID to match the router-id against"; } leaf sid { type jt:ipv6addr; description "SRv6 SID to match against"; } leaf sys-id { type jt:sysid; description "ISO address of the node"; } } // container srv6-sid container link { junos:must "(!((".. node" || (".. ipv4-prefix" || ".. ipv6-prefix"))))"; junos:must-message "Link, prefix and node parameters cannot be configured at the same time"; presence "enable link"; description "Link-related parameters"; uses apply-advanced; container from { description "Specify parameter of the 'from' side"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container from container to { description "Specify parameters of the 'to' side"; uses apply-advanced; leaf as { type string { junos:posix-pattern "^[0-9]+(.[0-9]+)?$"; junos:pattern-message "Use format 'x' or 'x.y' to specify number 'x' (Range 1 .. 4294967295) or number with higher 2 bytes 'x' (Range 0 .. 65535) and lower 2 bytes 'y' (Range 0 .. 65535) respectively"; } description "AS number"; } leaf router-id { type jt:ipprefix; description "IP prefix to match the router-id against"; } leaf sys-id { type jt:sysid; description "System-ID of the node"; } leaf node-type { type enumeration { enum "router" { value 0; description "Real node"; } enum "pseudo-node" { value 1; description "Pseudo-node"; } } description "Type of the node"; } leaf link-address { type jt:ipprefix; description "IP prefix to match the link address against"; } } // container to } // container link } // container traffic-engineering leaf-list route-distinguisher { type string; ordered-by user; description "Name of the route-distinguisher"; } } // container from container to { description "Conditions to match the destination of a route"; uses apply-advanced; leaf instance { type string; description "Routing protocol instance"; } leaf instance-any { type empty; description "Any routing protocol instance"; } leaf-list instance-list { type string; description "A list of routing protocol instances"; } leaf-list igp-instance { type string; description "IGP instance"; } leaf family { type enumeration { enum "inet" { value 0; description "IPv4 family"; } enum "inet-vpn" { value 1; description "IPv4-VPN family"; } enum "inet6" { value 2; description "IPv6 family"; } enum "inet6-vpn" { value 3; description "IPv6-VPN family"; } enum "iso-vpn" { value 4; description "ISO-VPN family"; } enum "iso" { value 5; description "ISO family"; } enum "evpn" { value 6; description "EVPN family"; } enum "inet-mvpn" { value 7; description "IPv4 Multicast VPN family"; } enum "inet6-mvpn" { value 8; description "IPv6 Multicast VPN family"; } enum "inet-mdt" { value 9; description "IPv4 MDT Signaling family"; } enum "route-target" { value 10; description "Local route target VPN family"; } enum "traffic-engineering" { value 11; description "Traffic Engineering family"; } enum "inet-srte" { value 12; description "IPv4 srtte family"; } enum "inet6-srte" { value 13; description "IPv6 srte family"; } } } leaf-list protocol { type enumeration { enum "aggregate" { value 0; description "Aggregate routes"; } enum "bgp" { value 1; description "BGP"; } enum "direct" { value 2; description "Directly connected routes"; } enum "dvmrp" { value 3; description "Distance Vector Multicast Routing Protocol"; } enum "isis" { value 4; description "Intermediate System-to-Intermediate System"; } enum "esis" { value 5; description "End System-to-Intermediate System"; } enum "l-isis" { value 6; description "Labelled ISIS"; } enum "l2circuit" { value 7; description "Layer 2 circuits"; } enum "l2vpn" { value 8; description "Layer 2 MPLS virtual private networks"; } enum "local" { value 9; description "Local system addresses"; } enum "ospf" { value 10; description "Open Shortest Path First"; } enum "ospf2" { value 11; description "Open Shortest Path First Version 2"; } enum "ospf3" { value 12; description "Open Shortest Path First Version 3"; } enum "l-ospf" { value 13; description "Labelled OSPF"; } enum "pim" { value 14; description "Protocol Independent Multicast"; } enum "rip" { value 15; description "Routing Information Protocol"; } enum "ripng" { value 16; description "Routing Information Protocol next generation"; } enum "static" { value 17; description "Statically defined addresses"; } enum "arp" { value 18; description "Addresses learned from ARP"; } enum "frr" { value 19; description "Addresses created by Host Fast Re-route"; } enum "mpls" { value 20; description "Multiprotocol Label Switching"; } enum "ldp" { value 21; description "Label Distribution Protocol"; } enum "rsvp" { value 22; description "Resource Reservation Protocol"; } enum "msdp" { value 23; description "Multicast Source Discovery Protocol"; } enum "route-target" { value 24; description "Local route target VPN membership"; } enum "access" { value 25; description "Access server routes"; } enum "access-internal" { value 26; description "Internal routes to directly connected clients"; } enum "anchor" { value 27; description "Anchor routes connected to UEs"; } enum "bgp-static" { value 28; description "BGP static routes"; } enum "vpls" { value 29; description "Virtual Private LAN Service"; } enum "evpn" { value 30; description "Ethernet VPN Service"; } enum "spring-te" { value 31; description "SPRING Traffic-Engineered"; } enum "bgp-ls-epe" { value 32; description "Addresses created by BGP-LS egress TE"; } enum "express-segments" { value 33; description "Express-segment routes"; } enum "rift" { value 34; description "RIFT routes"; } enum "l2-learned-host-routing" { value 35; description "Layer2-learned host routes"; } enum "srv6-isis" { value 36; description "SRV6 ISIS"; } } ordered-by user; description "Protocol from which route was learned"; } leaf rib { type string; description "Routing table"; } leaf-list neighbor { type jt:ipaddr; ordered-by user; description "Neighboring router"; } leaf-list next-hop { type jt:ipaddr; ordered-by user; description "Next-hop router"; } leaf-list interface { type union { type jt:ipaddr-or-interface; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Interface name or address"; } leaf area { type jt:areaid; description "OSPF area identifier"; } leaf-list as-path { type string; ordered-by user; description "Name of AS path regular expression (BGP only)"; } leaf-list as-path-group { type string; ordered-by user; description "Name of AS path group (BGP only)"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP origin attribute"; } leaf-list community { type string; ordered-by user; description "BGP community"; } leaf level { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "IS-IS level"; } container external { presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } } // container external leaf bgp-srte-discriminator { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte discriminator"; } leaf srte-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Srte color"; } leaf programmed { type empty; description "API-programmed route"; } leaf validation-database { type enumeration { enum "valid" { value 0; description "Match for valid database validation-state"; } enum "invalid" { value 1; description "Match for invalid database validation-state"; } enum "unknown" { value 2; description "Match for unknown database validation-state"; } } description "Name to identify a validation-state"; } list nexthop-weight { key "choice-ident choice-value weight"; ordered-by user; description "Weight of the gateway"; leaf choice-ident { type enumeration { enum "equal" { value 0; } enum "greater-than" { value 1; } enum "less-than" { value 2; } enum "greater-than-equal" { value 3; } enum "less-than-equal" { value 4; } enum "weight" { value 5; } enum "apply-advanced" { value 6; } enum "weight_type" { value 7; } enum "all-nexthop" { value 8; } } } leaf choice-value { type string; } leaf weight { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Weight of the gateway"; } uses apply-advanced; choice weight_type { leaf all-nexthop { type empty; description "All the gateway weight should be matched"; } } // choice weight_type } // list nexthop-weight leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value"; } leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 2"; } leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 3"; } leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Metric value 4"; } leaf-list tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Tag string"; } leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tag string 2"; } leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value"; } leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference value 2"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value"; } leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color (preference) value 2"; } leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Local preference associated with a route"; } leaf-list policy { type jt:policy-algebra; ordered-by user; description "Name of policy to evaluate"; } choice lsp-name-type { leaf lsp { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name"; } leaf lsp-regex { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure lsp-regex"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Label switched path name regular expression"; } } // choice lsp-name-type container source-routing-path { junos:must "(".. .. then source-routing-path-template")"; junos:must-message "source-routing-path-template is required to configure source-routing-path in policy"; presence "enable source-routing-path"; description "Spring-te lsp policy attributes"; leaf name-regex { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te lsp name regex"; } leaf dest { type jt:ipaddr; description "Spring-te lsp IPV4/IPV6 destination without color"; } leaf origin { type jt:ipaddr; description "Spring-te lsp origin address"; } leaf tunnel-source { type enumeration { enum "pcep" { value 0; description "Spring-te lsp src pcep"; } enum "bgp" { value 1; description "Spring-te lsp src bgp"; } } description "Spring-te lsp source protocol"; } leaf route-distinguisher { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp route distinguisher"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Spring-te lsp color"; } } // container source-routing-path } // container to container then { description "Actions to take if 'from' and 'to' conditions match"; uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // container then } // list policy-statement container defaults { description "Policy default behaviour"; uses apply-advanced; container route-filter { description "Set route filter behaviour"; leaf walkup { type empty; description "Route filter walk up enable"; } } // container route-filter } // container defaults list tunnel-attribute { key "name"; ordered-by user; description "BGP tunnel attributes definition"; leaf name { type string { junos:posix-pattern "![^a-zA-Z0-9_-]|(^(all|.{64,})$)"; junos:pattern-message "Tunnel attribute name is a string consisting of up to 63 letters, numbers, dashes, and underscores"; } description "Tunnel attribute name"; } uses apply-advanced; leaf tunnel-type { type enumeration { enum "ipip" { value 0; description "Tunnel type IP-IN-IP"; } } description "Tunnel type"; } leaf tunnel-color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Tunnel color"; } leaf remote-end-point { type jt:ipaddr; description "Tunnel remote end point"; } } // list tunnel-attribute list community { key "name"; description "BGP community information"; leaf name { type string; description "Name to identify BGP community"; } uses apply-advanced; leaf invert-match { type empty; description "Invert the result of the community expression matching"; } leaf-list members { type string; ordered-by user; description "Community members"; } } // list community list as-list { key "name"; description "BGP as range list information"; leaf name { type string; description "Name to identify BGP as-list"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Single autonomous system number or range of autonomous system numbers in plain number"; } } // list as-list list as-list-group { key "name"; description "Group a set of as-list"; leaf name { type string; description "Name to identify AS list group"; } uses apply-advanced; list as-list { key "name"; description "BGP as range list information"; leaf name { type string; description "Name to identify BGP as-list"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Single autonomous system number or range of autonomous system numbers"; } } // list as-list } // list as-list-group list route-distinguisher { key "name"; description "Route-distinguisher information"; leaf name { type string; description "Name to identify route-distinguisher"; } uses apply-advanced; leaf-list members { type string; ordered-by user; description "Route distinguisher string in ( *:X ) or ( Y:* ) or (X:Y) format"; } } // list route-distinguisher list as-path { key "name"; ordered-by user; description "BGP autonomous system path regular expression"; leaf name { type string; description "Name to identify AS path regular expression"; } uses apply-advanced; leaf path { type string { junos:posix-pattern "![;#~&<>/a-zA-Z]"; junos:pattern-message "^$-,|*!+?{}.[]()0123456789: Only these characters are allowed"; } description "AS path regular expression"; } } // list as-path list as-path-group { key "name"; ordered-by user; description "Group a set of AS paths"; leaf name { type string; description "Name to identify AS path group"; } uses apply-advanced; list as-path { key "name"; ordered-by user; description "BGP autonomous system path regular expression"; leaf name { type string; description "Name to identify AS path regular expression"; } leaf path { type string { junos:posix-pattern "![;#~&<>/a-zA-Z]"; junos:pattern-message "^$-,|*!+?{}.[]()0123456789: Only these characters are allowed"; } description "AS path regular expression"; } } // list as-path } // list as-path-group list damping { key "name"; ordered-by user; description "BGP route flap damping properties"; leaf name { type string; description "Name to identify route flap damping parameters"; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable damping"; } } // choice enable-disable leaf half-life { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 45"; } } units "minutes"; description "Decay half-life"; } leaf reuse { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 20000"; } } description "Reuse threshold (figure-of-merit value)"; } leaf suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 20000"; } } description "Cutoff threshold (figure-of-merit value)"; } leaf max-suppress { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 720"; } } units "minutes"; description "Maximum hold-down time"; } } // list damping list condition { key "name"; description "Define a route advertisement condition"; leaf name { type string; description "Name to identify Condition"; } uses apply-advanced; choice condition_type { case case_1 { } // case case_1 container if-route-exists { presence "enable if-route-exists"; description "Route exists in a specific routing table"; uses apply-advanced; container address-family { presence "enable address-family"; description "Indicates the address family of the route to match on"; uses apply-advanced; choice address-family { container inet { presence "enable inet"; description "Route to match corresponds to an inet/inet6 prefix"; uses apply-advanced; leaf address { junos:must "(!(".. .. .. address"))"; junos:must-message "A unique address field is allowed per condition"; junos:must "(!((".. .. ccc" || ".. .. mpls")))"; junos:must-message "Only one address-family type can be configured per condition"; type jt:ipprefix; description "Exact address of the route"; } leaf table { type string; description "Routing table in which route should exist"; } } // container inet container ccc { presence "enable ccc"; description "Route to match corresponds to a ccc prefix"; uses apply-advanced; leaf address { junos:must "(!(".. .. .. address"))"; junos:must-message "A unique address field is allowed per condition"; junos:must "(!((".. .. inet" || ".. .. mpls")))"; junos:must-message "Only one address-family type can be configured per condition"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Logical interface used to establish ccc route"; } leaf table { type string; description "Routing table in which route should exist"; } leaf standby { type empty; description "Indicates if route must be in standby state to be considered a match"; } leaf peer-unit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 8192"; } } description "Associated LT ifl's peer-unit. Required for LT-based routes"; } } // container ccc } // choice address-family } // container address-family leaf address { junos:must "(!(".. address-family"))"; junos:must-message "Explicit address-family previously configured. Only one address-family type can be configured per condition"; type jt:ipprefix; description "Exact address of the route"; } leaf table { junos:must "(!(".. address-family"))"; junos:must-message "Explicit address-family previously configured. No route-table is allowed at this level"; type string; description "Routing table in which route should exist"; } } // container if-route-exists } // choice condition_type } // list condition list rtf-prefix-list { key "name"; ordered-by user; description "Define a named set of family route target prefixes"; leaf name { type string; description "RTF prefix list name"; } uses apply-advanced; list prefix-list { key "name"; uses rtf_prefix_list_items; } // list prefix-list } // list rtf-prefix-list list resolution-map { key "name"; ordered-by user; description "Define a set of PNH resolution modes"; leaf name { type string; description "Resolution Map name"; } uses apply-advanced; leaf-list mode { type enumeration { enum "ip-color" { value 0; description "Colored-IP PNH Resolution Mode"; } enum "color-only" { value 1; description "Color-only PNH Resolution Mode"; } } ordered-by user; description "List of resolution modes in order that defines fallback mechanism"; } } // list resolution-map list application-maps { key "name"; ordered-by user; description "Define application maps"; uses application_map_object; } // list application-maps } // grouping juniper-policy-options grouping application_map_object { leaf name { type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes and underscores."; length "1 .. 63"; } description "Name of application map"; } uses apply-advanced; list application { key "name"; ordered-by user; description "Name of the application"; leaf name { junos:must "("applications application $$")"; junos:must-message "The referenced application is not defined"; type string { length "1 .. 63"; } description "Name of the application"; } leaf-list code-points { type string; ordered-by user; description "List of code point bit strings"; } } // list application } // grouping application_map_object grouping as-path-calc-length-type { description "Calculated BGP AS_PATH length per BGP rules"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of ASes"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping as-path-calc-length-type grouping as-path-unique-count-type { description "Number of unique BGP ASes excluding confederation ASes"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of ASes"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping as-path-unique-count-type grouping community_count_type { description "Number of BGP communities"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } description "Number of communities"; } choice count-operator { leaf equal { type empty; description "Match equal values"; } leaf orhigher { type empty; description "Match higher or equal values"; } leaf orlower { type empty; description "Match lower or equal values"; } } // choice count-operator } // grouping community_count_type grouping control_as_list_type { leaf list-type { type enumeration { enum "as-list" { value 0; description " Type as-list"; } enum "as-list-group" { value 1; description "Type as-list-group"; } } description "Type as-list or as-list-group"; } leaf list-name { type string; description "Name of as-list or as-list-group"; } uses apply-advanced; } // grouping control_as_list_type grouping control_mac_address_filter_list_type { leaf name { type string; description "Name of mac-filter-list of macs to match"; } uses apply-advanced; } // grouping control_mac_address_filter_list_type grouping control_prefix_list_filter_type { leaf list_name { type string; description "Name of prefix-list of routes to match"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "apply-advanced" { value 3; } enum "metric" { value 4; } enum "metric2" { value 5; } enum "metric3" { value 6; } enum "metric4" { value 7; } enum "tag" { value 8; } enum "tag2" { value 9; } enum "preference" { value 10; } enum "preference2" { value 11; } enum "color" { value 12; } enum "color2" { value 13; } enum "local-preference" { value 14; } enum "priority" { value 15; } enum "prefix-segment" { value 16; } enum "label-allocation" { value 17; } enum "add-path" { value 18; } enum "validation-state" { value 19; } enum "origin" { value 20; } enum "aigp-originate" { value 21; } enum "aigp-adjust" { value 22; } enum "community" { value 23; } enum "tunnel-attribute" { value 24; } enum "damping" { value 25; } enum "aggregate-bandwidth" { value 26; } enum "limit-bandwidth" { value 27; } enum "no-entropy-label-capability" { value 28; } enum "as-path-prepend" { value 29; } enum "as-path-expand" { value 30; } enum "next-hop" { value 31; } enum "install-nexthop" { value 32; } enum "trace" { value 33; } enum "external" { value 34; } enum "load-balance" { value 35; } enum "no-route-localize" { value 36; } enum "install-to-fib" { value 37; } enum "analyze" { value 38; } enum "class" { value 39; } enum "destination-class" { value 40; } enum "source-class" { value 41; } enum "forwarding-class" { value 42; } enum "map-to-interface" { value 43; } enum "ssm-source" { value 44; } enum "p2mp-lsp-root" { value 45; } enum "cos-next-hop-map" { value 46; } enum "dynamic-tunnel-attributes" { value 47; } enum "tunnel-end-point-address" { value 48; } enum "selected-mldp-egress" { value 49; } enum "mhop-bfd-port" { value 50; } enum "no-backup" { value 51; } enum "default-action" { value 52; } enum "next" { value 53; } enum "accept_reject" { value 54; } enum "bgp-output-queue-priority" { value 55; } enum "multipath-resolve" { value 56; } enum "source-routing-path-template" { value 57; } enum "label-allocation-fallback-reject" { value 58; } enum "resolution-map" { value 59; } enum "ignore-service-label" { value 60; } enum "request-long-lived-ack" { value 61; } enum "send-withdrawal-on-route-change" { value 62; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_prefix_list_filter_type grouping control_prefix_list_type { leaf name { type string; description "Name of prefix-list of routes to match"; } uses apply-advanced; } // grouping control_prefix_list_type grouping control_route_filter_list_type { leaf name { type string; description "Name of route-filter-list of routes to match"; } uses apply-advanced; choice modifier { leaf exact { type empty; description "Exactly match the prefix length"; } leaf longer { type empty; description "Mask is greater than the prefix length"; } leaf orlonger { type empty; description "Mask is greater than or equal to the prefix length"; } leaf upto { type string { junos:posix-pattern "^/[[:digit:]]+$"; junos:pattern-message "Should be number with prefix '/'"; } description "Mask falls between two prefix lengths"; } leaf prefix-length-range { type string { junos:posix-pattern "^/[[:digit:]]+-/[[:digit:]]+$"; junos:pattern-message "Must be in the form '/<minimum-length>-/<maximum-length>'"; } description "Mask falls between two prefix lengths"; } } // choice modifier container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_route_filter_list_type grouping control_route_filter_type { leaf address { type jt:ipprefix; description "IP address or hostname"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "upto" { value 3; } enum "through" { value 4; } enum "prefix-length-range" { value 5; } enum "address-mask" { value 6; } enum "apply-advanced" { value 7; } enum "label" { value 8; } enum "get-route-range" { value 9; } enum "metric" { value 10; } enum "metric2" { value 11; } enum "metric3" { value 12; } enum "metric4" { value 13; } enum "tag" { value 14; } enum "tag2" { value 15; } enum "preference" { value 16; } enum "preference2" { value 17; } enum "color" { value 18; } enum "color2" { value 19; } enum "local-preference" { value 20; } enum "priority" { value 21; } enum "prefix-segment" { value 22; } enum "label-allocation" { value 23; } enum "add-path" { value 24; } enum "validation-state" { value 25; } enum "origin" { value 26; } enum "aigp-originate" { value 27; } enum "aigp-adjust" { value 28; } enum "community" { value 29; } enum "tunnel-attribute" { value 30; } enum "damping" { value 31; } enum "aggregate-bandwidth" { value 32; } enum "limit-bandwidth" { value 33; } enum "no-entropy-label-capability" { value 34; } enum "as-path-prepend" { value 35; } enum "as-path-expand" { value 36; } enum "next-hop" { value 37; } enum "install-nexthop" { value 38; } enum "trace" { value 39; } enum "external" { value 40; } enum "load-balance" { value 41; } enum "no-route-localize" { value 42; } enum "install-to-fib" { value 43; } enum "analyze" { value 44; } enum "class" { value 45; } enum "destination-class" { value 46; } enum "source-class" { value 47; } enum "forwarding-class" { value 48; } enum "map-to-interface" { value 49; } enum "ssm-source" { value 50; } enum "p2mp-lsp-root" { value 51; } enum "cos-next-hop-map" { value 52; } enum "dynamic-tunnel-attributes" { value 53; } enum "tunnel-end-point-address" { value 54; } enum "selected-mldp-egress" { value 55; } enum "mhop-bfd-port" { value 56; } enum "no-backup" { value 57; } enum "default-action" { value 58; } enum "next" { value 59; } enum "accept_reject" { value 60; } enum "bgp-output-queue-priority" { value 61; } enum "multipath-resolve" { value 62; } enum "source-routing-path-template" { value 63; } enum "label-allocation-fallback-reject" { value 64; } enum "resolution-map" { value 65; } enum "ignore-service-label" { value 66; } enum "request-long-lived-ack" { value 67; } enum "send-withdrawal-on-route-change" { value 68; } } } leaf choice-value { type string; } uses apply-advanced; container label { description "Set label for BGP LU label allocation"; choice label_value { container range { description "Label range"; choice range_value { leaf range { type string { junos:posix-pattern "^[0-9]+:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is start of label range and 'y' is end of label range. e.g. 1000000:1000500"; } description "Label range in <start>:<end> format"; } } // choice range_value } // container range leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label value"; } } // choice label_value } // container label leaf get-route-range { type empty; description "Get the range"; } container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_route_filter_type grouping control_rtf_prefix_list_type { description "RTF prefix list"; leaf name { type string; description "Name of rtf-prefix-list of routes to match"; } uses apply-advanced; } // grouping control_rtf_prefix_list_type grouping control_source_address_filter_list_type { leaf name { type string; description "Name of source-address-filter-list of routes to match"; } uses apply-advanced; } // grouping control_source_address_filter_list_type grouping control_source_address_filter_type { leaf address { type jt:ipprefix; description "IP address or hostname"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "upto" { value 3; } enum "through" { value 4; } enum "prefix-length-range" { value 5; } enum "apply-advanced" { value 6; } enum "metric" { value 7; } enum "metric2" { value 8; } enum "metric3" { value 9; } enum "metric4" { value 10; } enum "tag" { value 11; } enum "tag2" { value 12; } enum "preference" { value 13; } enum "preference2" { value 14; } enum "color" { value 15; } enum "color2" { value 16; } enum "local-preference" { value 17; } enum "priority" { value 18; } enum "prefix-segment" { value 19; } enum "label-allocation" { value 20; } enum "add-path" { value 21; } enum "validation-state" { value 22; } enum "origin" { value 23; } enum "aigp-originate" { value 24; } enum "aigp-adjust" { value 25; } enum "community" { value 26; } enum "tunnel-attribute" { value 27; } enum "damping" { value 28; } enum "aggregate-bandwidth" { value 29; } enum "limit-bandwidth" { value 30; } enum "no-entropy-label-capability" { value 31; } enum "as-path-prepend" { value 32; } enum "as-path-expand" { value 33; } enum "next-hop" { value 34; } enum "install-nexthop" { value 35; } enum "trace" { value 36; } enum "external" { value 37; } enum "load-balance" { value 38; } enum "no-route-localize" { value 39; } enum "install-to-fib" { value 40; } enum "analyze" { value 41; } enum "class" { value 42; } enum "destination-class" { value 43; } enum "source-class" { value 44; } enum "forwarding-class" { value 45; } enum "map-to-interface" { value 46; } enum "ssm-source" { value 47; } enum "p2mp-lsp-root" { value 48; } enum "cos-next-hop-map" { value 49; } enum "dynamic-tunnel-attributes" { value 50; } enum "tunnel-end-point-address" { value 51; } enum "selected-mldp-egress" { value 52; } enum "mhop-bfd-port" { value 53; } enum "no-backup" { value 54; } enum "default-action" { value 55; } enum "next" { value 56; } enum "accept_reject" { value 57; } enum "bgp-output-queue-priority" { value 58; } enum "multipath-resolve" { value 59; } enum "source-routing-path-template" { value 60; } enum "label-allocation-fallback-reject" { value 61; } enum "resolution-map" { value 62; } enum "ignore-service-label" { value 63; } enum "request-long-lived-ack" { value 64; } enum "send-withdrawal-on-route-change" { value 65; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping control_source_address_filter_type grouping juniper-protocols { uses apply-advanced; container router-advertisement { description "IPv6 router advertisement options"; uses apply-advanced; container traceoptions { description "Trace options for router advertisement"; 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 advertisement"; leaf name { type string; } uses apply-advanced; leaf preference { type enumeration { enum "medium" { value 0; description "Medium / (Default)"; } enum "high" { value 1; description "High"; } enum "low" { value 2; description "Low"; } } description "Set the Preference for Router Selection"; } leaf max-advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "4 .. 1800"; } } units "seconds"; description "Maximum advertisement interval"; } leaf min-advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 1350"; } } units "seconds"; description "Minimum advertisement interval"; } choice managed-configuration-choice { leaf managed-configuration { type empty; description "Set managed address configuration"; } leaf no-managed-configuration { type empty; description "Don't set managed address configuration"; } } // choice managed-configuration-choice choice other-stateful-configuration-choice { leaf other-stateful-configuration { type empty; description "Set other stateful configuration"; } leaf no-other-stateful-configuration { type empty; description "Don't set other stateful configuration"; } } // choice other-stateful-configuration-choice choice link-mtu-choice { leaf link-mtu { type empty; description "Link MTU"; } leaf no-link-mtu { type empty; description "Don't link MTU"; } } // choice link-mtu-choice leaf solicit-router-advertisement-unicast { type empty; description "Enbale solicited router advertisement as unicast"; } leaf reachable-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600000"; } } units "milliseconds"; description "Reachable time"; } leaf retransmit-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "milliseconds"; description "Retransmit timer"; } leaf virtual-router-only { type empty; description "Send advertisemnets only for vrrp-inet6-group"; } leaf current-hop-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Current hop limit"; } leaf default-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 9000"; } } units "seconds"; description "Router lifetime"; } list dns-server-address { key "name"; max-elements 3; ordered-by user; description "Recursive DNS address configuration"; leaf name { type string; description "DNS address to be advertised"; } uses apply-advanced; leaf lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "seconds"; default "1800"; description "DNS address lifetime"; } } // list dns-server-address list prefix { key "name"; ordered-by user; description "Prefix configuration"; leaf name { type jt:ipv6prefix; description "Prefix to be advertised"; } uses apply-advanced; leaf valid-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "seconds"; description "Valid lifetime (fixed)"; } choice on-link-choice { leaf on-link { type empty; description "Set on-link flag"; } leaf no-on-link { type empty; description "Don't set on-link flag"; } } // choice on-link-choice leaf preferred-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "seconds"; description "Preferred lifetime (fixed)"; } choice autonomous-choice { leaf autonomous { type empty; description "Set autonomous flag"; } leaf no-autonomous { type empty; description "Don't set autonomous flag"; } } // choice autonomous-choice } // list prefix list dns-search-list { key "name"; ordered-by user; description "DNS search list configuration"; leaf name { type string; description "DNS search list name"; } uses apply-advanced; leaf lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "seconds"; default "5400"; description "DNS search list lifetime"; } } // list dns-search-list list rio-prefix { key "name"; ordered-by user; description "Route information option configuration"; leaf name { type jt:ipv6prefix; description "Prefix to be advertised"; } uses apply-advanced; leaf rio-lifetime { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } units "seconds"; description "Route information lifetime"; } leaf rio-preference { type enumeration { enum "medium" { value 0; description "Medium / Default"; } enum "high" { value 1; description "High"; } enum "low" { value 2; description "Low"; } } description "Set the preference for route information"; } } // list rio-prefix } // list interface container ra-secure { description "Protect box against rogue incoming RA messages"; uses apply-advanced; leaf accept-current-hop-limit-min { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } units "uint"; description "Current hop limit acceptable min for incoming RA"; } leaf accept-current-hop-limit-max { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } units "uint"; description "Current hop acceptable min for incoming RA"; } leaf accept-reachable-time-min { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 3600000"; } } units "milliseconds"; description "Reachable Time acceptable min for incoming RA"; } leaf accept-reachable-time-max { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 3600000"; } } units "milliseconds"; description "Reachable Time acceptable max for incoming RA"; } leaf accept-retransmit-time-min { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 3600000"; } } units "milliseconds"; description "Retransmit Time acceptable min for incoming RA"; } leaf accept-retransmit-time-max { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1000 .. 3600000"; } } units "milliseconds"; description "Retransmit Time acceptable min for incoming RA"; } } // container ra-secure } // container router-advertisement container neighbor-discovery { presence "enable neighbor-discovery"; description "IPv6 neighbor discovery"; uses apply-advanced; leaf onlink-subnet-only { type empty; description "Onlink subnet only knob"; } leaf no-dad-on-state-change { type empty; description "Disable DAD on interface state change"; } container ndp-proxy { description "Configure NDP PROXY behaviour"; uses apply-advanced; leaf no-proxy-on-resolve { type empty; description "Disable proxy on unresolved address"; } } // container ndp-proxy container dad-proxy { description "Configure DAD PROXY behaviour"; uses apply-advanced; leaf no-proxy-on-resolve { type empty; description "Disable proxy on unresolved address"; } } // container dad-proxy } // container neighbor-discovery container iccp { description "ICCP options"; uses apply-advanced; leaf local-ip-addr { type jt:ipv4addr; description "Local IP address to use by default for all peers"; } leaf session-establishment-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "45 .. 600"; } } units "seconds"; default "300"; description "Time within which connection must succeed with peers"; } leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key for all peers"; } list peer { key "name"; max-elements 1; description "Redundancy Group Configuration"; uses peer-group; } // list peer container traceoptions { description "Trace options for ICCP"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Trace flag information"; leaf name { type enumeration { enum "error" { value 0; description "Trace all errors"; } enum "event" { value 1; description "Trace all events"; } enum "packet" { value 2; description "Trace all packets"; } enum "pipe" { value 3; description "Trace pipe messages"; } enum "pipe-detail" { value 4; description "Trace pipe messages in detail"; } enum "all" { value 5; description "Trace everything"; } } } } // list flag } // container traceoptions } // container iccp container ilmi { description "Interim Local Management Interface Protocol configuration"; uses apply-advanced; container traceoptions { description "ILMI trace options"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "database" { value 0; description "Trace database events"; } enum "routing-socket" { value 1; description "Trace Routing socket events"; } enum "state" { value 2; description "Trace state change events"; } enum "debug" { value 3; description "Trace debug messages"; } enum "event" { value 4; description "Trace event handler events"; } enum "packet" { value 5; description "Trace packet events"; } enum "all" { value 6; description "Trace all areas of code"; } } } } // list flag } // container traceoptions } // container ilmi container lacp { description "Link Aggregation Control Protocol configuration"; uses apply-advanced; container traceoptions { description "LACP trace options"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Events and packet types to include in the trace"; leaf name { type enumeration { enum "configuration" { value 0; description "Configuration events"; } enum "routing-socket" { value 1; description "Routing socket events"; } enum "process" { value 2; description "Process events"; } enum "startup" { value 3; description "Process startup events"; } enum "protocol" { value 4; description "Protocol events"; } enum "packet" { value 5; description "LACP packets"; } enum "ppm" { value 6; description "LACP PPM messages"; } enum "bfd" { value 7; description "LACP BFD events"; } enum "mc-ae" { value 8; description "Multi-chassis AE messages"; } enum "all" { value 9; description "All events and packets"; } } } } // list flag } // container traceoptions leaf ppm { type enumeration { enum "centralized" { value 0; description "Centralized PPM processing"; } enum "inline" { value 1; description "Distributed inline PPM processing"; } } description "Force PPM processing"; } } // container lacp container oam { description "Operation, Administration, and Management configuration"; uses apply-advanced; container ethernet { description "OAM configuration for Ethernet"; uses apply-advanced; container link-fault-management { description "802.3ah Ethernet OAM configuration"; uses apply-advanced; container traceoptions { description "Trace options for link-fault management"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "configuration" { value 0; description "Trace configuration events"; } enum "routing-socket" { value 1; description "Trace routing socket events"; } enum "protocol" { value 2; description "Trace protocol processing events"; } enum "action-profile" { value 3; description "Trace action profile invocation events"; } enum "all" { value 4; description "Trace everything"; } } } } // list flag } // container traceoptions list action-profile { key "name"; ordered-by user; description "Define an action profile"; leaf name { type string { length "1 .. 32"; } description "Name of action profile"; } uses apply-advanced; container event { description "Events this action profile will check"; uses apply-advanced; leaf link-adjacency-loss { type empty; description "Loss of adjacency with OAM peer"; } leaf protocol-down { type empty; description "Upper layer indication on protocol down"; } container link-event-rate { uses apply-advanced; leaf symbol-period { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 100"; } } units "error(s) per 100 symbol"; description "Rate of receiving symbol period events"; } leaf frame-error { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 1000"; } } units "error(s) per 100 milli-second"; description "Rate of receiving frame error events"; } leaf frame-period { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 100"; } } units "error(s) per 100 frames"; description "Rate of receiving frame period events"; } leaf frame-period-summary { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 1000"; } } units "error(s) per second"; description "Rate of receiving frame period summary events"; } } // container link-event-rate } // container event container action { description "Action to take on specified events"; uses apply-advanced; leaf syslog { type empty; description "Generate syslog message"; } leaf link-down { type empty; description "Mark the interface down for transit traffic"; } leaf send-critical-event { junos:must "(".. .. event protocol-down")"; junos:must-message "send-critical-event action can be configured only with protocol-down event"; type empty; description "Start sending OAM PDUs with critical event bit set"; } } // container action } // list action-profile list interface { key "name"; ordered-by user; description "Interface on which to set Ethernet OAM parameters"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf-list apply-action-profile { type string; ordered-by user; description "Apply the specified action profile on the interface"; } leaf pdu-interval { type union { type string { pattern "<.*>|$.*"; } type int32 { range "100 .. 1000"; } } units "milliseconds"; default "1000"; description "Periodic OAM protocol data unit interval"; } leaf loopback-tracking { type empty; description "Enable link down on loopback detection"; } leaf detect-loc { type empty; description "Detects initial lack of adjacency formation"; } leaf link-discovery { type enumeration { enum "active" { value 0; } enum "passive" { value 1; } } default "active"; description "Mode of discovery"; } leaf pdu-threshold { type union { type string { pattern "<.*>|$.*"; } type int32; } default "3"; description "Number of PDUs missed before declaring peer lost"; } leaf remote-loopback { junos:must "(!(".. link-discovery passive"))"; junos:must-message "remote-loopback request not allowed in passive mode"; type empty; description "Put remote DTE into remote-loopback mode"; } container negotiation-options { description "802.3ah features supported on the interface"; uses apply-advanced; leaf no-allow-link-events { type empty; description "Do not emit periodic PDUs detailing framing and symbol errors"; } leaf allow-remote-loopback { type empty; description "Allow local port to be put into loopback mode"; } } // container negotiation-options container event-thresholds { junos:must "(!(".. negotiation-options no-allow-link-events"))"; junos:must-message "'event-thresholds' statement cannot be included along with 'no-allow-link-events' statement"; description "Thresholds for sending 802.3ah events"; uses apply-advanced; leaf symbol-period { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 100"; } } default "1"; description "Threshold for sending symbol period events"; } leaf frame-error { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 100"; } } default "1"; description "Threshold for sending frame error events"; } leaf frame-period { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 100"; } } default "1"; description "Threshold for sending frame period error events"; } leaf frame-period-summary { type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 100"; } } default "1"; description "Threshold for sending frame period summary error events"; } } // container event-thresholds } // list interface } // container link-fault-management container connectivity-fault-management { description "Configurations related to 802.1ag ethernet oam"; uses apply-advanced; container performance-monitoring { description "Configurations related to ethernet performance monitoring"; uses apply-advanced; leaf hardware-assisted-timestamping { type empty; description "Enable timestamping feature in hardware"; } leaf delegate-server-processing { type empty; description "Delegate performance measurement request handling to PFE"; } leaf hardware-assisted-keepalives { type enumeration { enum "enable" { value 0; description "Enable delegate keepalives handling to Hardware"; } enum "disable" { value 1; description "Disable delegate keepalives handling to Hardware (default)"; } } description "Enable/Disable delegating keepalives to hardware"; } leaf hardware-assisted-pm { junos:must "("protocols oam ethernet connectivity-fault-management enhanced-cfm-mode")"; junos:must-message "enhanced-cfm-mode needs to be configured for inline pm support"; type empty; description "Enable inline support for performance monitoring"; } leaf enhanced-sla-iterator { type empty; description "Enable Enhanced SLA Iterator Cycle-time"; } leaf measurement-interval { junos:must "(".. enhanced-sla-iterator")"; junos:must-message "enhanced-sla-iterator needs to be configured for MEF36 mode"; type enumeration { enum "2" { value 0; description "2 minutes measurement interval"; } enum "5" { value 1; description "5 minutes measurement interval"; } enum "15" { value 2; description "15 minutes measurement interval"; } enum "30" { value 3; description "30 minutes measurement interval"; } enum "60" { value 4; description "1 hour measurement interval"; } } units "minutes"; description "Enables measurement-interval based PM (MEF 36 mode). Default 15 min in enhanced-cfm-mode"; } leaf legacy-pm-display { junos:must "((".. measurement-interval" || ".. .. enhanced-cfm-mode"))"; junos:must-message "measurement-interval or enhanced-cfm-mode needs to be configured for legacy PM output in MEF mode."; type empty; description "Display Legacy PM output (for DM) in MEF mode."; } list sla-iterator-profiles { key "name"; ordered-by user; description "Configuration related to an sla monitoring iterator"; leaf name { type string; } uses apply-advanced; leaf disable { type empty; description "Disable the iterator profile"; } leaf measurement-type { type enumeration { enum "two-way-delay" { junos:must "(!("routing-options ppm no-delegate-processing"))"; junos:must-message "Iterator two-way-delay measurement is not supported with ppm no-delegate-processing"; value 0; description "Y.1731 2-way DM frames are sent for this profile"; } enum "loss" { value 1; description "Y.1731 LM frames are sent for this profile"; } enum "slm" { value 2; description "Y.1731 SLM frames are sent for this profile"; } enum "statistical-frame-loss" { junos:must "(!("routing-options ppm no-delegate-processing"))"; junos:must-message "Iterator statistical-frame-loss measurement is not supported with ppm no-delegate-processing"; value 3; description "Y.1731 2-way DM frames for statistical frame loss are sent for this profile"; } } description "Choice of the type of Y.1731(SLA measurement) frame to be sent"; } leaf flap-trap-monitor { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "seconds"; description "Configurable timer value 1-360"; } leaf cycle-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "milliseconds"; default "1000"; description "Time period of an iterator profile"; } leaf iteration-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000"; } } units "connections"; default "2000"; description "Maximum services under this iterator profile"; } container calculation-weight { junos:must "(".. measurement-type two-way-delay")"; junos:must-message "The measurement type must be two-way-delay"; presence "enable calculation-weight"; description "Configure delay and delay variation calculation weight"; uses apply-advanced; leaf delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } default "1"; description "Weight used in delay calculation"; } leaf delay-variation { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } default "1"; description "Weight used in delay-variation calculation"; } } // container calculation-weight container avg-flr-forward-threshold { junos:must "((".. measurement-type loss" || " .. measurement-type slm"))"; junos:must-message " The measurement type must be either loss or slm"; presence "enable avg-flr-forward-threshold"; description "Avg forward flr threshold"; uses apply-advanced; leaf avg-flr-forward { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100000"; } } description "Avg forward flr threshold value in mili-percent"; } leaf flap-trap-monitor { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "seconds"; description "Configurable timer value 1-360"; } } // container avg-flr-forward-threshold container avg-flr-backward-threshold { junos:must "((".. measurement-type loss" || " .. measurement-type slm"))"; junos:must-message " The measurement type must be either loss or slm"; presence "enable avg-flr-backward-threshold"; description "Avg backward flr threshold"; uses apply-advanced; leaf avg-flr-backward { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100000"; } } description "Avg backward flr threshold value in mili-percent"; } leaf flap-trap-monitor { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "seconds"; description "Configurable timer value 1-360"; } } // container avg-flr-backward-threshold container avg-fd-twoway-threshold { junos:must "(".. measurement-type two-way-delay")"; junos:must-message " The measurement type must be two-way-delay"; presence "enable avg-fd-twoway-threshold"; description "Avg frame delay threshold value"; uses apply-advanced; leaf avg-fd-twoway { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Avg frame delay threshold value in mili-percent"; } leaf flap-trap-monitor { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "seconds"; description "Configurable timer value 1-360"; } } // container avg-fd-twoway-threshold container avg-fdv-twoway-threshold { junos:must "(".. measurement-type two-way-delay")"; junos:must-message " The measurement type must be two-way-delay"; presence "enable avg-fdv-twoway-threshold"; description "Avg frame delay variance threshold"; uses apply-advanced; leaf avg-fdv-twoway { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } units "microseconds"; description "Avg frame delay variance threshold value in mili-percent"; } leaf flap-trap-monitor { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 360"; } } units "seconds"; description "Configurable timer value 1-360"; } } // container avg-fdv-twoway-threshold container frame-delay { description "Bin configuration for frame delay"; uses apply-advanced; leaf num-bins { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 5"; } } description "Max number of bins"; } container two-way { presence "enable two-way"; description "Bin configuration for 2way frame delay"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container two-way container forward { presence "enable forward"; description "Bin configuration for forward frame delay"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container forward container backward { presence "enable backward"; description "Bin configuration for backward frame delay"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container backward } // container frame-delay container frame-delay-range { description "Bin configuration for frame delay range"; uses apply-advanced; leaf num-bins { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 5"; } } description "Max number of bins"; } container two-way { presence "enable two-way"; description "Bin configuration for 2way frame delay range"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container two-way container forward { presence "enable forward"; description "Bin configuration for forward frame delay range"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container forward container backward { presence "enable backward"; description "Bin configuration for backward frame delay range"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container backward } // container frame-delay-range container ifdv { description "Bin configuration for IFDV"; uses apply-advanced; leaf num-bins { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 5"; } } description "Max number of bins"; } container two-way { presence "enable two-way"; description "Bin configuration for 2way IFDV"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container two-way container forward { presence "enable forward"; description "Bin configuration for forward IFDV"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container forward container backward { presence "enable backward"; description "Bin configuration for backward IFDV"; uses apply-advanced; leaf-list lower-threshold-bin { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967294"; } } description "Lower threshold bin configuration in ascending order"; } } // container backward } // container ifdv } // list sla-iterator-profiles list interface { key "name"; ordered-by user; description "Name of interface for the performance monitoring"; leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } leaf enable-multiclass-loss-measurement { junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Disable multiclass loss measurement in hardware"; } leaf code-point-based-lm-accounting { junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. priority-based-lm-accounting"))))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Enable code point based loss measurement in hardware"; } leaf priority-based-lm-accounting { junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. code-point-based-lm-accounting"))))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Enable priority based loss measurement in hardware"; } } // list interface leaf enable-multiclass-loss-measurement { junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Disable multiclass loss measurement in hardware"; } leaf code-point-based-lm-accounting { junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. priority-based-lm-accounting"))))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Enable code point based loss measurement in hardware"; } leaf priority-based-lm-accounting { junos:must "((!(".. enable-multiclass-loss-measurement") && (!(".. colorless-loss-measurement") && !(".. code-point-based-lm-accounting"))))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Enable priority based loss measurement in hardware"; } leaf colorless-loss-measurement { junos:must "((!(".. code-point-based-lm-accounting") && !(".. priority-based-lm-accounting")))"; junos:must-message "loss measurement modes are exclusive with each other"; type empty; description "Enable colorless loss measurement in hardware"; } } // container performance-monitoring leaf no-aggregate-delegate-processing { type empty; description "Do not distribute aggregate session to pfe"; } leaf enhanced-cfm-mode { type empty; description "Enables Enhanced CFM Mode"; } container traceoptions { presence "enable traceoptions"; description "Trace options for connectivity fault management"; uses cfm-traceoptions; } // container traceoptions list action-profile { key "name"; ordered-by user; description "Action profiles to use when one or more remote maintenance association endpoints are down"; leaf name { type string; description "Name of action profile"; } uses apply-advanced; container event { junos:must "(".. action")"; junos:must-message "Cannot configure event without action"; description "Events that need to be monitored"; uses apply-advanced; leaf-list interface-status-tlv { type enumeration { enum "down" { value 0; description "Interface is administratively down"; } enum "lower-layer-down" { value 1; description "Interface is physically down"; } } ordered-by user; description "Values that need to be monitored in interface status TLV"; } leaf-list port-status-tlv { type enumeration { enum "blocked" { value 0; description "Port is blocked"; } } ordered-by user; description "Values that need to be monitored in port status TLV"; } leaf adjacency-loss { type empty; description "Connectivity is lost"; } leaf rdi { type empty; description "RDI received from some MEP"; } leaf connection-protection-tlv { type enumeration { enum "using-working-path" { value 0; description "Service traffic is using working path"; } enum "using-protection-path" { value 1; description "Service traffic is using protection path"; } } description "Values that need to be monitored in connection protection TLV"; } } // container event container action { junos:must "(".. event")"; junos:must-message "Cannot configure action without event"; uses apply-advanced; leaf interface-down { type empty; description "Mark the interface as down"; } leaf revertive-interface-down { junos:must "(!(".. non-revertive-interface-down"))"; junos:must-message "Cannot configure action along with revertive-interface-down"; type empty; description "Wait for CC loss-threshold to bring back the interface up"; } leaf non-revertive-interface-down { junos:must "(!(".. revertive-interface-down"))"; junos:must-message "Cannot configure action along with non-revertive-interface-down"; type empty; description "Interface will not be brought up when CC is received"; } leaf propagate-remote-mac-flush { type empty; description "Remote mac-flush"; } leaf interface-group-down { junos:must "((!(".. .. event interface-status-tlv") && (!(".. .. event port-status-tlv") && (!(".. .. event connection-protection-tlv") && (!(".. .. event server-mep-defects") && !(".. .. event ais-trigger-condition"))))))"; junos:must-message "Cannot configure events other that adjacency-loss or rdi with this action"; junos:must "((!(".. interface-down") && (!(".. revertive-interface-down") && !(".. non-revertive-interface-down"))))"; junos:must-message "Cannot configure action along with other interface down actions"; type empty; description "Mark the interface group as down"; } leaf asynchronous-notification { junos:must "((!(".. .. event port-status-tlv") && (!(".. .. event rdi") && (!(".. .. event connection-protection-tlv") && (!(".. .. event server-mep-defects") && !(".. .. event ais-trigger-condition"))))))"; junos:must-message "Cannot configure events other that adjacency-loss or interface-status-tlv with this action"; junos:must "((!(".. interface-down") && (!(".. revertive-interface-down") && (!(".. non-revertive-interface-down") && !(".. interface-group-down")))))"; junos:must-message "Cannot configure action along with other interface down actions"; type empty; description "Generate asynchronous notification (Laser-off for optical phys)"; } container log-and-generate-ais { uses apply-advanced; leaf-list level { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 7"; } } description "Server maintenance domain levels range"; } leaf interval { type enumeration { enum "1s" { value 0; } enum "1m" { value 1; } } default "1s"; description "Interval between AIS messages"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } default "0"; description "802.1p priority of AIS packet"; } } // container log-and-generate-ais } // container action container clear-action { junos:must "(".. event")"; junos:must-message "Cannot configure action without event"; uses apply-advanced; container interface-down { description "Mark the interface as down"; leaf peer-interface { type empty; description "Mark the interface as down"; } } // container interface-down leaf propagate-remote-mac-flush { type empty; description "Remote mac flush"; } } // container clear-action container default-actions { junos:must "(!(".. event"))"; junos:must-message "Cannot configure default-actions if event is set"; description "Action that needs to be taken"; uses apply-advanced; leaf interface-down { type empty; description "Bring the interface down"; } } // container default-actions } // list action-profile container policer { description "Rate limit Ethernet OAM packets for all sessions"; uses apply-advanced; leaf continuity-check { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit Continuity Check Ethernet OAM messages"; } leaf other { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit non Continuity Check Ethernet OAM messages"; } leaf all { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit all Ethernet OAM messages"; } } // container policer container linktrace { presence "enable linktrace"; description "Linktrace protocol global options"; uses apply-advanced; leaf path-database-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "100"; description "Number of linktrace reply entries to be stored per linktrace request"; } leaf age { type enumeration { enum "10s" { value 0; } enum "30s" { value 1; } enum "1m" { value 2; } enum "10m" { value 3; } enum "30m" { value 4; } } default "10m"; description "Time after which a stale request-response entry is deleted"; } } // container linktrace list maintenance-domain { key "name"; ordered-by user; description "Maintenance domain configuration"; leaf name { type string; } uses apply-advanced; list bridge-domain { key "name"; ordered-by user; description "Bridge-domain information for the default maintenance domain"; leaf name { type string; description "Bridge domain name"; } leaf-list vlan-id { type string; ordered-by user; description "VLAN id"; } } // list bridge-domain list virtual-switch { key "name"; ordered-by user; description "Virtual switch Bridge-domain information for the default maintenance domain"; leaf name { type string; description "Routing instance of type virtual switch"; } uses apply-advanced; list bridge-domain { key "name"; ordered-by user; leaf name { type string; description "Bridge domain name"; } leaf-list vlan-id { type string; ordered-by user; description "VLAN id"; } } // list bridge-domain } // list virtual-switch list instance { key "name"; ordered-by user; description "VPLS instance name for the default maintenance domain"; leaf name { junos:must "(!("routing-instances $$ vlan-id inner-all"))"; junos:must-message "MIPs are not allowed for VPLS with vlan-id inner-all"; junos:must "(!("routing-instances $$ vlan-id all"))"; junos:must-message "MIPs are not allowed for VPLS with vlan-id all"; junos:must "(("routing-instances $$ vlan-id" || "routing-instances $$ vlan-tags"))"; junos:must-message "MIPs are allowed only for VPLS with vlan-id/vlan-tags"; junos:must "("routing-instances $$ instance-type vpls")"; junos:must-message "Only VPLS routing-instances are allowed under default maintenance-domains"; type string; description "VPLS routing instance name"; } } // list instance list interface { key "name"; ordered-by user; description "Name of interface for the default maintenance domain"; leaf name { junos:must "(!("protocols loop-detect enhanced interface $$"))"; junos:must-message "Connectivtiy and loop-detect protocols cannot be enabled on same interface"; junos:must "(!("protocols oam ethernet link-fault-management interface $$"))"; junos:must-message "Connectivtiy and link fault management protocols cannot be enabled on same interface"; junos:must "((!(any "interfaces $$ unit <*> vlan-id 0") && !(any "logical-systems <*> interfaces $$ unit <*> vlan-id 0")))"; junos:must-message "Default maintenance domain cannot be configured with a physical interface which has a logical interface configured with vlan-id 0"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } } // list interface leaf level { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 7"; } } description "Level value for maintenance domain"; } leaf name-format { type enumeration { enum "none" { value 0; description "No format specified"; } enum "dns" { value 1; description "Character string similar to Domain Name System name"; } enum "mac+2oct" { value 2; description "MAC address with 2 octet integer (xx:xx:xx:xx:xx:xx.Y format)"; } enum "character-string" { value 3; description "Character string"; } } description "Format of maintenance domain name"; } leaf mip-half-function { type enumeration { enum "none" { value 0; description "No MHFs should be created"; } enum "default" { value 1; description "Create MHF as per IEEE 802.1ag specifications for defMHFDefault"; } enum "explicit" { value 2; description "Create MHF as per IEEE 802.1ag specifications for defMHFExplicit"; } } default "none"; description "Half function to be implemented by MIP"; } list maintenance-association { key "name"; ordered-by user; description "Maintenance association configuration"; leaf name { type string { length "1 .. 45"; } description "Name of maintenance association in IEEE compliant format"; } uses apply-advanced; leaf debug-session { type empty; description "Debug the CFM session"; } leaf short-name-format { type enumeration { enum "2octet" { value 0; description "An integer in the range 0..65535"; } enum "rfc-2685-vpn-id" { value 1; description "VPN identifier that complies with RFC 2685"; } enum "vlan" { value 2; description "Primary VLAN identifier"; } enum "character-string" { value 3; description "Character string"; } enum "icc" { value 4; description "ITU Carrier Code"; } } description "Format of Maintenance Association Name"; } leaf primary-vid { type string; description "VLAN id"; } container continuity-check { presence "enable continuity-check"; description "Continuity check configuration"; uses apply-advanced; leaf interval { type enumeration { enum "10ms" { junos:must "(!("routing-options ppm no-delegate-processing"))"; junos:must-message "10ms interval for continuity-check is not supported with no-delegate-processing"; value 0; } enum "100ms" { value 1; } enum "1s" { value 2; } enum "10s" { value 3; } enum "1m" { value 4; } enum "10m" { value 5; } enum "3.3ms" { value 6; } } default "1m"; description "Interval between continuity-check messages"; } leaf loss-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 256"; } } default "3"; description "Number of continuity-check messages lost before marking endpoint as down"; } leaf hold-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 30240"; } } units "minutes"; default "10"; description "Time before flushing MEP database if no updates occur"; } leaf port-status-tlv { type empty; description "Include port status TLV in CCM"; } leaf interface-status-tlv { type empty; description "Include interface status TLV in CCM"; } leaf connection-protection-tlv { type empty; description "Include connection protection OUI TLV in CCM"; } leaf convey-loss-threshold { type empty; description "Include Loss Threshold OUI TLV in CCM"; } leaf interface-status-send-rdi { type empty; description "Send RDI on interface operation status down in CCM"; } container sendid-tlv { description "Include sendid-tlv in CCM/LBM/LTM"; uses apply-advanced; leaf send-chassis-tlv { type empty; description "Attach Chassis ID & Mgmt Addr to CCM/LBM/LTM"; } } // container sendid-tlv } // container continuity-check leaf mip-half-function { type enumeration { enum "none" { value 0; description "No MHFs should be created"; } enum "default" { value 1; description "Create MHF as per IEEE 802.1ag specifications for defMHFDefault"; } enum "explicit" { value 2; description "Create MHF as per IEEE 802.1ag specifications for defMHFExplicit"; } enum "defer" { value 3; description "Create MHF as per IEEE 802.1ag specifications for defMHFDefer"; } } default "defer"; description "Half function to be implemented by MIP"; } list mep { key "name"; ordered-by user; description "Maintenance association endpoint configuration"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 8191"; } } description "Identifier for maintenance association endpoint"; } uses apply-advanced; container interface { presence "enable interface"; description "Name of interface"; leaf interface-name { junos:must "(!("protocols oam ethernet link-fault-management interface $$"))"; junos:must-message "Connectivtiy and link fault management protocols cannot be enabled on same interface"; junos:must "((!(any "interfaces $$ unit <*> vlan-id 0") && !(any "logical-systems <*> interfaces $$ unit <*> vlan-id 0")))"; junos:must-message "Cannot create a MEP on a physical interface which has a logical interface configured with vlan-id 0"; junos:must "(!(any "interfaces $$ unit 0 family inet address <*>"))"; junos:must-message "CFM interface cannot be configured with an INET address"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } } leaf vlan { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Trunk port interface VLAN identifier"; } choice connection-type { leaf working { type empty; description "Monitory the primary path"; } leaf protect { type empty; description "Monitory the protect path"; } } // choice connection-type } // container interface leaf direction { type enumeration { enum "up" { value 0; } enum "down" { junos:must "(!(".. .. mip-half-function"))"; junos:must-message "Cannot specify MA MHF with down MEP"; junos:must "(!(".. .. .. mip-half-function"))"; junos:must-message "Cannot specify MD MHF with down MEP"; value 1; } } default "down"; description "Direction of maintenance endpoint"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } default "0"; description "802.1p priority of continuity-check and link-trace packet"; } leaf auto-discovery { type empty; description "Accept continuity-check messages from all remote MEPs"; } leaf action-profile { junos:must "(!("protocols oam ethernet connectivity-fault-management action-profile $$ action asynchronous-notification"))"; junos:must-message "Action asynchronous-notificaiton can not be configured at mep level"; junos:must "("protocols oam ethernet connectivity-fault-management action-profile $$")"; junos:must-message "Action profile not configured"; type string; description "Name of the action profile"; } list remote-mep { key "name"; ordered-by user; description "Remote maintenance association endpoint configuration"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 8191"; } } description "Identifier for remote maintenance association endpoint"; } uses apply-advanced; leaf action-profile { junos:must "("protocols oam ethernet connectivity-fault-management action-profile $$")"; junos:must-message "Action profile not configured"; type string; description "Name of the action profile"; } container interface-group { presence "enable interface-group"; description "Mark this interface group down Profile configured with action interface-group-down"; uses apply-advanced; leaf interface-device-name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Interface device name"; } leaf-list unit-list { type jt:range; description "One or more logical interface unit numbers"; } } // container interface-group list sla-iterator-profile { key "name"; ordered-by user; description "Name of the iterator profile"; leaf name { junos:must "((!(".. .. .. no-delegate-processing") || ("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type loss" || "protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type slm")))"; junos:must-message "Iterator two-way-delay or statistical-frame-loss measurement is not supported with mep level no-delegate-processing"; junos:must "("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles $$")"; junos:must-message "The SLA iterator profile must be configured"; type string; } uses apply-advanced; leaf iteration-count { junos:must "(!("protocols oam ethernet connectivity-fault-management performance-monitoring measurement-interval"))"; junos:must-message "Iteration-count not supported with measurement-interval"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "frames"; description "Iterations to partake for acquiring SLA measurements"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "The vlan pcp value to be sent in the Y.1731 frame"; } leaf data-tlv-size { junos:must "(("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type two-way-delay" || ("protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type statistical-frame-loss" || "protocols oam ethernet connectivity-fault-management performance-monitoring sla-iterator-profiles ${sla-iterator-profile} measurement-type slm")))"; junos:must-message "The measurement type must be two-way-delay or statistical-frame-loss or slm"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1400"; } } units "bytes"; description "Size of the data-tlv portion of Y.1731 frame"; } } // list sla-iterator-profile leaf detect-loc { type empty; description "Detects initial loss of connectivity with remote mep"; } } // list remote-mep leaf lowest-priority-defect { type enumeration { enum "all-defects" { value 0; description "Allows all defects"; } enum "mac-rem-err-xcon" { value 1; description "Allows only MAC, not receiving CCM, erroneous CCM and cross connect defects"; } enum "rem-err-xcon" { value 2; description "Allows only not receiving CCM, erroneous CCM and cross connect CCM defects"; } enum "err-xcon" { value 3; description "Allows only erroneous CCM and cross connect CCM defects"; } enum "xcon" { value 4; description "Allows only cross connect CCM defect"; } enum "no-defect" { value 5; description "Allows no defect"; } } description "Lowest priority defect that is allowed to generate a fault alarm"; } } // list mep container policer { description "Rate limit Ethernet OAM packets for this session"; uses apply-advanced; leaf continuity-check { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit Continuity Check Ethernet OAM messages"; } leaf other { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit non Continuity Check Ethernet OAM messages"; } leaf all { junos:must "("firewall policer $$")"; junos:must-message "referenced policer must be defined"; type string; description "Policer to rate limit all Ethernet OAM messages"; } } // container policer } // list maintenance-association } // list maintenance-domain container sendid-tlv { description "Include sendid-tlv in CCM/LBM/LTM"; uses apply-advanced; leaf send-chassis-tlv { type empty; description "Attach Chassis ID & Mgmt Addr to CCM/LBM/LTM"; } } // container sendid-tlv } // container connectivity-fault-management list evcs { key "name"; description "Ethernet virtual circuits configuration"; leaf name { type string { junos:posix-pattern "!^((__.*__)|(.{100,})|(.*[+].*))$"; junos:pattern-message "Must be a non-reserved string of 100 characters or less"; length "1 .. 100"; } description "EVC id"; } uses apply-advanced; container evc-protocol { description "Signaling protocol to monitor EVC status"; choice protocol { container cfm { presence "enable cfm"; description "Connectivity fault management"; leaf maintenance-domain { junos:must "("protocols oam ethernet connectivity-fault-management maintenance-domain $$")"; junos:must-message "referenced maintenance-domain must be defined"; type string; description "Maintenance domain name"; } leaf maintenance-association { junos:must "(any "protocols oam ethernet connectivity-fault-management maintenance-domain <*> maintenance-association $$")"; junos:must-message "referenced maintenance-association must be defined"; type string; description "Maintenance association name"; } leaf mep { junos:must "(any "protocols oam ethernet connectivity-fault-management maintenance-domain <*> maintenance-association <*> mep $$")"; junos:must-message "referenced maintenance association endpoint must be defined"; type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 8191"; } } description "Identifier for maintenance association endpoint"; } } // container cfm container vpls { presence "enable vpls"; description "Virtual private LAN service (BGP/LDP)"; leaf routing-instance { junos:must "(("routing-instances $$ instance-type vpls" || ("routing-instances $$ instance-type virtual-switch" && "routing-instances $$ protocols vpls")))"; junos:must-message "referenced routing-instnace must be of instance-type vpls or instance-type virtual-swicth with protocols vpls configured"; junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))"; junos:must-message "referenced routing-instance must be defined"; type string; description "Routing instance name"; } } // container vpls case case_3 { } // case case_3 case case_4 { } // case case_4 } // choice protocol } // container evc-protocol leaf remote-uni-count { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 255"; } } default "1"; description "Number of remote UNIs in the EVC"; } leaf multipoint-to-multipoint { type empty; description "Multipoint to Multipoint EVC"; } } // list evcs container lmi { presence "enable lmi"; description "Ethernet local management interface configuration"; uses apply-advanced; container traceoptions { description "Trace options for ethernet local management interface"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "configuration" { value 0; description "Trace configuration events"; } enum "routing-socket" { value 1; description "Trace routing socket events"; } enum "protocol" { value 2; description "Trace protocol processing events"; } enum "init" { value 3; description "Trace events related to protocol daemon start-up"; } enum "error" { value 4; description "Trace events related to catestrophic errors in daemon"; } enum "packet" { value 5; description "Trace events related to packet flow"; } enum "all" { value 6; description "Trace everything"; } } } } // list flag } // container traceoptions leaf status-counter { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "2 .. 10"; } } default "4"; description "E-LMI status counter (N393)"; } leaf polling-verification-timer { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "5 .. 30"; } } units "seconds"; default "15"; description "Polling verification timer (T392)"; } list interface { key "name"; description "Interface options"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } } uses apply-advanced; leaf uni-id { type string { length "1 .. 64"; } description "UNI identifier"; } leaf status-counter { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "2 .. 10"; } } default "4"; description "E-LMI status counter (N393)"; } leaf polling-verification-timer { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "5 .. 30"; } } units "seconds"; default "15"; description "Polling verification timer (T392)"; } leaf evc-map-type { type enumeration { enum "all-to-one-bundling" { value 0; description "All to one bundling"; } enum "service-multiplexing" { value 1; description "Service multiplexing with no bundling"; } enum "bundling" { value 2; description "Bundling with service multiplexing"; } } default "bundling"; description "CE-VLAN ID/EVC map type"; } list evc { key "name"; description "EVC configuration"; leaf name { junos:must "("protocols oam ethernet evcs $$")"; junos:must-message "referenced evc must be defined"; type string { length "1 .. 100"; } description "EVC identifier"; } uses apply-advanced; leaf default-evc { type empty; description "Default EVC"; } leaf-list vlan-list { type jt:vlan-range; description "Vlans mapped to this EVC"; } } // list evc } // list interface } // container lmi container fnp { presence "enable fnp"; description "Failure notification protocol configuration"; uses apply-advanced; container traceoptions { description "Tracing options for FNP"; 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 "events" { value 0; description "Trace protocol events"; } enum "pdu" { value 1; description "Trace PDU reception and transmission"; } enum "timers" { value 2; description "Trace protocol timers"; } enum "error" { value 3; description "Trace all failure conditions"; } enum "all" { value 4; description "Trace all"; } } } } // list flag } // container traceoptions leaf interval { type enumeration { enum "100ms" { value 0; } enum "1s" { value 1; } enum "10s" { value 2; } enum "1m" { value 3; } enum "10m" { value 4; } } default "1s"; description "Interval between FNP messages"; } leaf loss-threshold { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "3 .. 255"; } } default "4"; description "Number of FNP messages lost before clearing FNP state"; } list interface { key "name"; ordered-by user; description "Interface configuration"; leaf name { junos:must "("interfaces $$ encapsulation vlan-vpls")"; junos:must-message "FNP is allowed on interfaces with vlan-vpls encapsulation only."; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } } uses apply-advanced; leaf domain-id { type union { type uint32; type string { pattern "<.*>|$.*"; } } default "0"; description "Ethernet domain identifier"; } } // list interface } // container fnp } // container ethernet } // container oam container ancp { description "Access Node Control Protocol options"; uses juniper-protocols-ancp; } // container ancp container bfd { description "Bidirectional Forwarding Detection (BFD) options"; uses apply-advanced; container traceoptions { description "Trace options for BFD"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Trace flag information"; leaf name { type enumeration { enum "adjacency" { value 0; description "Trace adjacency messages"; } enum "event" { value 1; description "Trace all events"; } enum "error" { value 2; description "Trace all errors"; } enum "rtsock" { value 3; description "Trace all rtscok messages"; } enum "packet" { value 4; description "Trace all packets"; } enum "ppm-packet" { value 5; description "Trace packet activity by periodic packet management"; } enum "pipe" { value 6; description "Trace pipe messages"; } enum "pipe-detail" { value 7; description "Trace pipe messages in detail"; } enum "state" { value 8; description "Trace state transitions"; } enum "timer" { value 9; description "Trace timer processing"; } enum "nsr-synchronization" { value 10; description "Trace NSR synchronization events"; } enum "nsr-packet" { value 11; description "Trace packet activity of NSR"; } enum "issu" { value 12; description "Trace ISSU packet activity"; } enum "slow-start" { value 13; description "Trace slow-start activity"; } enum "session" { value 14; description "Per session activity"; } enum "all" { value 15; description "Trace everything"; } } } } // list flag } // container traceoptions leaf no-issu-timer-negotiation { type empty; description "Disable ISSU timer negotiation"; } 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 } // container bfd container ptp { description "Precision Time Protocol v2 options"; uses apply-advanced; leaf clock-mode { type enumeration { enum "ordinary" { value 0; description "PTP Ordinary clock"; } enum "boundary" { value 1; description "PTP Boundary clock"; } } description "Clock mode"; } leaf priority1 { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || ("protocols ptp profile-type $$={g.8275.2}" || "protocols ptp profile-type $$={g.8275.2.enh}")))))"; junos:must-message "Attribute not supported with profile-type g.8275.1, g.8275.1 Enhanced, g.8275.2 or g.8275.2 Enhanced"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 255"; } } description "Used in selecting best master clock"; } leaf priority2 { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 255"; } } description "Tie-breaker in selecting best master clock"; } leaf local-priority { junos:must "(("protocols ptp profile-type" && ("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || "protocols ptp profile-type $$={g.8275.2.enh}"))))"; junos:must-message "Attribute only supported with profile-type g.8275.1, g.8275.1 Enhanced or g.8275.2 Enhanced"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Priority assigned to the local clock"; } leaf domain { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "0 .. 127"; } } description "PTP domain number"; } leaf path-trace { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || "protocols ptp profile-type $$={g.8275.1.enh}")))"; junos:must-message "Attribute not supported with profile-type g.8275.1 or g.8275.1 Enhanced"; type empty; description "Enable path tracing"; } leaf unicast-negotiation { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; junos:must "(!(("protocols ptp profile-type $$={g.8275.1}" || ("protocols ptp profile-type $$={g.8275.1.enh}" || "protocols ptp profile-type $$={g.8275.2}"))))"; junos:must-message "Attribute not supported with profile-type g.8275.1 or g.8275.1 Enhanced or g.8275.2 "; type empty; description "Enable unicast negotiation"; } container slave { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; description "PTP Slave parameters"; uses apply-advanced; leaf frequency-only { type empty; description "Only for frequency syntonization"; } leaf delay-request { junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "-7 .. 7"; } } description "Log mean interval between delay requests"; } leaf announce-timeout { junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Timeout period for announce messages"; } list interface { junos:must "(!((("protocols ptp profile-type $$={g.8275.1}" || "protocols ptp profile-type $$={g.8275.1.enh}") && "protocols ptp stateful interface")))"; junos:must-message "Attribute not supported with profile-type g.8275.1 or g.8275.1 Enhanced when stateful ifl is configured"; key "name"; description "Interface on which to respond to upstream PTP master"; leaf name { junos:must "(!("interfaces $$-IFD gigether-options 802.3ad"))"; junos:must-message "PTP not allowed on member links of AE interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container unicast-mode { junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; description "Configure upstream unicast PTP master clock sources"; uses apply-advanced; leaf transport { type enumeration { enum "ipv4" { value 0; description "Use IPv4 as transport"; } enum "ipv6" { value 1; description "Use IPv6 as transport"; } } description "Encapsulation for PTP packet transport"; } leaf local-priority { junos:must "(("protocols ptp profile-type" && ("protocols ptp profile-type g.8275.1" || ("protocols ptp profile-type g.8275.1.enh" || ("protocols ptp profile-type g.8275.2" || "protocols ptp profile-type g.8275.2.enh")))))"; junos:must-message "Attribute only supported with profile-type g.8275.1, g.8275.1 Enhanced, g.8275.2 or g.8275.2 Enhanced"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Priority assigned to the port"; } list clock-source { key "ip-address local-ip-address"; description "Configure PTP master parameters"; leaf ip-address { type jt:ipaddr; description "IP address of PTP master"; } leaf local-ip-address { type jt:ipaddr; description "Must be IP address on local interface"; } uses apply-advanced; leaf asymmetry { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100000000 .. 100000000"; } } description "Adjust the slave-to-master delay by value specified in nanoseconds"; } } // list clock-source } // container unicast-mode } // list interface } // container slave container master { junos:must "("protocols ptp clock-mode")"; junos:must-message "Must configure 'protocols ptp clock-mode'"; description "PTP Master parameters"; uses apply-advanced; leaf announce-interval { junos:must "(!("protocols ptp profile-type $$={g.8275.2}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.2'"; junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "-3 .. 4"; } } description "Log mean interval between announce messages"; } leaf sync-interval { junos:must "(!("protocols ptp profile-type $$={g.8275.2}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.2'"; junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; type union { type string { pattern "<.*>|$.*"; } type int32 { range "-7 .. 7"; } } description "Log mean interval between sync messages"; } list interface { key "name"; description "Interface on which to respond to downstream PTP slaves"; leaf name { junos:must "(!("interfaces $$-IFD gigether-options 802.3ad"))"; junos:must-message "PTP not allowed on member links of AE interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; container unicast-mode { junos:must "(!("protocols ptp profile-type $$={g.8275.1}"))"; junos:must-message "Attribute not supported with 'profile-type g.8275.1'"; description "Configure downstream PTP clock slaves"; uses apply-advanced; leaf transport { type enumeration { enum "ipv4" { value 0; description "Use IPv4 as transport"; } enum "ipv6" { value 1; description "Use IPv6 as transport"; } } description "Encapsulation for PTP packet transport"; } list clock-client { key "ip-address local-ip-address"; description "Configure PTP master parameters"; leaf ip-address { type jt:ipprefix; description "IP address or subnet of remote PTP slave"; } leaf local-ip-address { type jt:ipaddr; description "IP address of local PTP master interface"; } uses apply-advanced; leaf manual { junos:must "(!(("protocols ptp unicast-negotiation" && "protocols ptp profile-type $$={g.8275.2.enh}")))"; junos:must-message "Attribute not supported when unicast-negotiation is configured with profile-type g.8275.2.enh"; type empty; description "This slave does not use unicast negotiation"; } container l2-ifl { uses apply-advanced; } // container l2-ifl } // list clock-client } // container unicast-mode } // list interface } // container master } // container ptp container dot1x { description "802.1X options"; uses juniper-protocols-dot1x; } // container dot1x container ppp-service { description "Configure PPP service"; uses apply-advanced; container traceoptions { description "Trace options for PPP 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 PPP service to enable debugging output"; leaf name { type enumeration { enum "accounting-statistics" { value 0; description "Trace accounting statistics events"; } enum "authentication" { value 1; description "Trace authentication code"; } enum "chap" { value 2; description "Trace CHAP code"; } enum "events" { value 3; description "Trace interface events"; } enum "gres" { value 4; description "Trace GRES events"; } enum "init" { value 5; description "Trace daemon initialization"; } enum "interface-db" { value 6; description "Trace interface database code"; } enum "lcp" { value 7; description "Trace LCP state machine code"; } enum "memory" { value 8; description "Trace memory management code"; } enum "ncp" { value 9; description "Trace NCP state machine code"; } enum "packet-error" { value 10; description "Trace Packet error events"; } enum "pap" { value 11; description "Trace PAP code"; } enum "parse" { value 12; description "Trace parsing events"; } enum "profile" { value 13; description "Trace libdynamic-profile events"; } enum "receive-packets" { value 14; description "Trace received PPP packets"; } enum "routing-process" { value 15; description "Trace routing process interactions"; } enum "rtp" { value 16; description "Trace RealTimePriority code"; } enum "rtsock" { value 17; description "Trace routing socket code"; } enum "session-db" { value 18; description "Trace session database interactions"; } enum "smi-services-sentry" { value 19; description "Trace SMI services requests/retries"; } enum "states" { value 20; description "Trace state machine events"; } enum "transmit-packets" { value 21; description "Trace tranmitted PPP packets"; } enum "tunnel" { value 22; description "Trace l2tp tunneling"; } enum "all" { value 23; description "Trace all areas of code"; } } } } // list flag container filter { presence "enable filter"; description "Trace filtering"; uses apply-advanced; leaf aci { type string { junos:posix-pattern "^[*]*.[^*]*[*]*$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Regular expression to match ACI"; } leaf ari { type string { junos:posix-pattern "^[*]*.[^*]*[*]*$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Regular expression to match ARI"; } leaf service-name { type string { junos:posix-pattern "^([[:alnum:]][[:alnum:]_-]*)|([*][[:alnum:]_-]{1,})[*]?$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Service name"; } leaf underlying-interface { junos:must "(("interfaces $$-IFL encapsulation ppp-over-ether" || ("interfaces $$-IFL encapsulation ppp-over-ether-over-atm-llc" || "interfaces $$-IFL family pppoe")))"; junos:must-message "Underlying interface must be configured"; type string; description "Underlying interface name"; } } // container filter } // container traceoptions leaf on-demand-ip-address { type empty; description "Enable On-Demand IPv4 address allocation and de-allocation"; } leaf reject-unauthorized-ipv6cp { type empty; description "Reject IPv6 NCP if no appropriate IPv6 address or prefix is authorized"; } container required-address { presence "enable required-address"; description "Session address requirement"; uses apply-advanced; leaf ip { type empty; description "Terminate session if no appropriate IP address is authorized"; } } // container required-address leaf pppoe-lcp-options-strict { type empty; description "Enforce RFC 2516 MUST requirements for FCS, ACFC and ACCM"; } leaf source-interface-set-at-login { type enumeration { enum "svlan" { value 0; description "Compose interface-set name from physical IFD and outer VLAN tag"; } } description "Generate interface-set name for use during login"; } } // container ppp-service container overlay { description "Overlay protocol"; uses juniper-protocols-overlayd; } // container overlay container vrrp { description "VRRP options"; uses apply-advanced; container traceoptions { description "Trace options for VRRP"; 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 "0 .. 4294967295"; } } 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"; } leaf microsecond-stamp { type empty; description "Timestamp with microsecond granularity"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "database" { value 0; description "Trace database"; } enum "general" { value 1; description "Trace general events"; } enum "interfaces" { value 2; description "Trace interface messages"; } enum "normal" { value 3; description "Trace normal events"; } enum "packets" { value 4; description "Trace packets"; } enum "state" { value 5; description "Trace state transitions"; } enum "timer" { value 6; description "Trace timer events"; } enum "ppm" { value 7; description "VRRP PPM related messages"; } enum "all" { value 8; description "Trace all events"; } } } } // list flag } // container traceoptions leaf failover-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "50 .. 100000"; } } units "milliseconds"; description "Additional failover delay timer"; } leaf startup-silent-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000"; } } units "seconds"; description "Period for ignoring master down timer at device startup"; } leaf asymmetric-hold-time { type empty; description "Priority hold time asymmetric behaviour"; } container delegate-processing { presence "enable delegate-processing"; description "Switch to distributed PPMD"; uses apply-advanced; } // container delegate-processing leaf skew-timer-disable { type empty; description "Disable the skew timer"; } leaf global-advertisements-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } default "3"; description "Number of vrrp advertisements missed before declaring master down"; } leaf inherit-advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 120"; } } default "120"; description "Advertisement interval for inherit sessions"; } leaf version-3 { type empty; description "VRRPv3 conformance"; } } // container vrrp container pgm { presence "enable pgm"; status deprecated; description "PGM options"; uses juniper-protocols-pgm; } // container pgm container amt { description "AMT configuration"; uses juniper-protocols-amt; } // container amt container bgp { description "BGP options"; uses juniper-protocols-bgp; } // container bgp container bgpmcast { presence "enable bgpmcast"; description "BGP multicast options"; uses juniper-protocols-bgpmcast; } // container bgpmcast container connections { description "Circuit cross-connect configuration"; uses apply-advanced; list interface-switch { key "name"; ordered-by user; description "Bidirectional switch between interfaces"; leaf name { type string { junos:posix-pattern "^.{1,128}$"; junos:pattern-message "Must be a string of 128 characters or less"; } description "Name of interface switch"; } uses apply-advanced; list interface { key "name"; ordered-by user; description "Interface to be switched"; leaf name { junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))"; junos:must-message "interface cannot be specified in another l2circuit"; junos:must "(!(any "routing-instances <*> interface $$"))"; junos:must-message "interface cannot be specified in another routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; } // list interface } // list interface-switch list remote-interface-switch { key "name"; ordered-by user; description "Bidirectional switch between a local and a remote interface"; leaf name { type string { junos:posix-pattern "^.{1,128}$"; junos:pattern-message "Must be a string of 128 characters or less"; } description "Name of remote interface switch"; } uses apply-advanced; leaf interface { junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))"; junos:must-message "interface cannot be specified in another l2circuit"; junos:must "(!(any "routing-instances <*> interface $$"))"; junos:must-message "interface cannot be specified in another routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Local interface name"; } leaf transmit-lsp { junos:must "(!(".. .. .. mpls label-switched-path $$ ultimate-hop-popping"))"; junos:must-message "Circuit cross-connect cannot use referenced ultimate-hop-poping ingress LSP"; junos:must "(!(".. .. .. mpls ultimate-hop-popping"))"; junos:must-message "Circuit cross-connect cannot use any ultimate-hop-popping ingress LSP"; type string; description "Name of outgoing label-switched path"; } leaf receive-lsp { type string; description "Name of incoming label-switched path"; } } // list remote-interface-switch list lsp-switch { key "name"; ordered-by user; description "Unidirectional switch between two label-switched paths"; leaf name { type string { junos:posix-pattern "^.{1,128}$"; junos:pattern-message "Must be a string of 128 characters or less"; } description "Name of label-switched path switch"; } uses apply-advanced; leaf transmit-lsp { junos:must "(!(".. .. .. mpls label-switched-path $$ ultimate-hop-popping"))"; junos:must-message "Circuit cross-connect cannot use referenced ultimate-hop-poping ingress LSP"; junos:must "(!(".. .. .. mpls ultimate-hop-popping"))"; junos:must-message "Circuit cross-connect cannot use any ultimate-hop-popping ingress LSP"; type string; description "Name of outgoing label-switched path"; } leaf receive-lsp { type string; description "Name of incoming label-switched path"; } } // list lsp-switch list p2mp-transmit-switch { key "name"; ordered-by user; description "Local interface to point-to-multipoint LSP switch"; leaf name { type string { junos:posix-pattern "^.{1,128}$"; junos:pattern-message "Must be a string of 128 characters or less"; } description "Point-to-multipoint switch name on which to transmit"; } uses apply-advanced; leaf input-interface { junos:must "(!(any "protocols l2circuit neighbor <*> interface $$"))"; junos:must-message "interface cannot be specified in another l2circuit"; junos:must "(!(any "routing-instances <*> interface $$"))"; junos:must-message "interface cannot be specified in another routing instance"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Input interface name"; } leaf transmit-p2mp-lsp { type string; description "Point-to-multipoint LSP name on which to transmit"; } leaf-list output-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } max-elements 16; ordered-by user; description "Outgoing interface name"; } } // list p2mp-transmit-switch list p2mp-receive-switch { key "name"; ordered-by user; description "Point-to-multipoint LSP to local interfaces switch"; leaf name { type string { junos:posix-pattern "^.{1,128}$"; junos:pattern-message "Must be a string of 128 characters or less"; } description "Point-to-multipoint switch name on which to receive"; } uses apply-advanced; leaf receive-p2mp-lsp { type string; description "Point-to-multipoint LSP name on which to receive"; } leaf-list output-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Next outgoing interface name"; } } // list p2mp-receive-switch } // container connections container dvmrp { presence "enable dvmrp"; status deprecated; description "DVMRP options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable DVMRP"; } } // choice enable-disable container traceoptions { description "Trace options for DVMRP"; 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 "poison" { value 1; description "Trace poison-route-reverse packets"; } enum "packets" { value 2; description "Trace all DVMRP packets"; } enum "probe" { value 3; description "Trace probe packets"; } enum "report" { value 4; description "Trace DVMRP route report packets"; } enum "neighbor" { value 5; description "Trace neighbor probe packets"; } enum "prune" { value 6; description "Trace prune messages"; } enum "graft" { value 7; description "Trace graft messages"; } 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 container rib-group { description "Routing table group"; uses rib_group_inet_type; } // container rib-group 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"; } list interface { key "name"; ordered-by user; description "DVMRP 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 DVMRP on this interface"; } } // choice enable-disable leaf mode { type enumeration { enum "forwarding" { junos:must "(("protocols pim interface ${interface} disable" || (!(("protocols pim interface ${interface}" || ("protocols pim interface ${interface} enable" || ("protocols pim interface all" || "protocols pim interface all enable")))) || ("protocols pim interface all disable" && (!("protocols pim interface ${interface}") && !("protocols pim interface ${interface} enable"))))))"; junos:must-message "Cannot enable PIM and DVMRP in forwarding mode at the same time"; value 0; description "Use DVMRP for multicast forwarding"; } enum "unicast-routing" { value 1; description "Use DVMRP for unicast routing only"; } } description "Mode of interface"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "DVMRP metric value"; } leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } units "seconds"; description "When neighbors think the interface is down"; } } // list interface } // container dvmrp container esis { description "End system-intermediate system options"; uses juniper-protocols-esis; } // container esis container evpn { description "Configuration EVPN default routing instance"; uses apply-advanced; 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 mac-history { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 255"; } } description "Number of history entries to be maitained per mac"; } list mac-list { key "name"; description "Configure MAC lists"; leaf name { type string { length "1 .. 128"; } description "List name"; } uses apply-advanced; leaf-list mac-address { type jt:mac-addr; description "MAC address"; } } // list mac-list container mac-mobility { description "MAC mobility settings"; uses apply-advanced; leaf no-sequence-numbers { type empty; description "Don't use sequence numbers for MAC mobility"; } } // container mac-mobility leaf no-core-isolation { type empty; description "Disable EVPN Core isolation"; } leaf leave-sync-route-oldstyle { type empty; description "Originate leave sync route oldstyle"; } leaf es-import-oldstyle { type empty; description "Enable noncompliant ES import route-target computation"; } leaf es-label-oldstyle { type empty; description "Enable noncompliant ESI 24 bit label"; } 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"; } 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 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)"; } container remote-ip-host-routes { junos:must "(!(".. .. .. instance-type vrf"))"; junos:must-message "remote-ip-host-routes knob is for virtual-switch, EVPN or default instance"; presence "enable remote-ip-host-routes"; description "Virtual machine traffic optimization(VMTO) for EVPN"; uses apply-advanced; leaf-list import { type jt:policy-algebra; ordered-by user; description "Policy to control the creation of remote IP host routes"; } leaf no-advertise-community { type empty; description "Don't advertise Type 2 route's community"; } } // container remote-ip-host-routes leaf pmsi-tunnel-endpoint { junos:must "(!(".. pbb-evpn-core"))"; junos:must-message "Not Supported for PBB EVPN"; 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 label-allocation { type enumeration { enum "per-bridge-domain" { value 0; description "Allocate one label for each bridge-domain"; } } description "Label allocation policy"; } leaf esi-resolution-per-bridge-domain { type empty; description "Enable ESI Resolution Per BD"; } leaf riot-loopback { type empty; description "Track loopback irb interface state on RIOT platform"; } container interconnect { junos:must "((".. .. .. switch-options vrf-target" || ".. .. .. switch-options vrf-export"))"; junos:must-message "Switch-options vrf-target or vrf-export must be configured"; junos:must "(".. .. .. switch-options route-distinguisher")"; junos:must-message "Switch-options route-distinguisher must be configured"; description "Interconnect"; uses juniper-protocols-evpn-interconnect; } // container interconnect 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 vni-options { junos:must "((".. .. .. switch-options vrf-target" || ".. .. .. switch-options vrf-export"))"; junos:must-message "Switch-options vrf-target or vrf-export must be configured"; junos:must "(".. .. .. switch-options route-distinguisher")"; junos:must-message "Switch-options route-distinguisher must be configured"; junos:must "(".. extended-vni-list")"; junos:must-message "Extended-vni-list must be configured"; description "Vni options"; uses juniper-protocols-vni-options; } // container vni-options } // container evpn container express-segments { description "Configuration for Express Segments"; uses apply-advanced; list segment-template { key "name"; max-elements 64; ordered-by user; description "Express Segments Template Definition"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Express Segment Template Name"; } uses apply-advanced; 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"; } leaf-list srlg { type string; max-elements 16; ordered-by user; description "SRLG Name"; } container metric { description "Metric values for Express Segment Template"; uses apply-advanced; leaf te { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "TE metric value"; } leaf igp { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "IGP metric value"; } } // container metric } // list segment-template list segment-set { key "name"; max-elements 64; ordered-by user; description "Express Segments Set Definition"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Express Segment Set Name"; } uses apply-advanced; leaf-list membership-policy { type jt:policy-algebra; ordered-by user; description "Policy for matching specific LSPs to this express segment"; } container template { description "Template for Express Segment Attribute Selection"; uses apply-advanced; leaf template-name { junos:must "("protocols express-segments segment-template $$")"; junos:must-message "Referenced Express Segment template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of Express Segment template"; } } // container template } // list segment-set container traffic-engineering { presence "enable traffic-engineering"; description "Enable Import of all Express Segments into TED"; uses apply-advanced; } // container traffic-engineering container traceoptions { description "Trace options for Express Segment"; 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 everything"; } enum "error" { value 1; description "Trace errors"; } enum "route" { value 2; description "Trace route-related changes"; } enum "state" { value 3; description "Trace state transitions"; } } } 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 express-segments container igmp { presence "enable igmp"; description "IGMP options"; uses apply-advanced; container traceoptions { description "Trace options for IGMP"; 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 "mtrace" { value 4; description "Trace mtrace packets"; } enum "group" { value 5; description "Trace group operations"; } enum "client-notification" { value 6; description "Trace notifications"; } enum "host-notification" { value 7; description "Trace host notifications"; } 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 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 maximum-transmit-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Maximum transmission rate (packets per second)"; } leaf accounting { type empty; description "Enable join and leave event notification"; } list interface { key "name"; ordered-by user; description "Interface options for IGMP"; leaf name { type string; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable IGMP on this interface"; } } // choice enable-disable leaf version { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 3"; } } description "Set IGMP version number on this 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; leaf group-increment { type jt:ipv4addr; description "Mask for the incrementing group IP address"; } leaf group-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 512"; } } description "Number of groups"; } leaf exclude { type empty; description "Exclude sources"; } 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; leaf source-increment { type jt:ipv4addr; description "Mask for the incrementing source IP address"; } leaf source-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } description "Number of sources"; } } // list source } // list group } // container static leaf ssm-map { type string; description "Map for SSM translation of IGMPv1 or IGMPv2 messages"; } leaf-list ssm-map-policy { type jt:policy-algebra; ordered-by user; description "SSM map policy name"; } leaf immediate-leave { type empty; description "Group removed immediately, last membership query not sent"; } leaf promiscuous-mode { type empty; description "Accept igmp messages coming from different subnet"; } choice accounting-choice { leaf accounting { type empty; description "Enable join and leave event notification"; } leaf no-accounting { type empty; description "Don't enable join and leave event notification"; } } // choice accounting-choice leaf-list group-policy { type jt:policy-algebra; ordered-by user; description "Group filter applied to incoming IGMP report messages"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } description "Maximum number of (source,group) per interface"; } leaf group-threshold { junos:must "(" .. group-limit")"; junos:must-message "To configure group-threshold, group-limit must be set"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to generate warnings"; } leaf log-interval { junos:must "(" .. group-limit")"; junos:must-message "To configure log-interval, group-limit must be set"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between consecutive log messages"; } container passive { presence "enable passive"; description "Suppress sending and receiving IGMP messages"; leaf allow-receive { type empty; description "Allow receiving IGMP messages"; } leaf send-general-query { type empty; description "Send IGMP general query messages"; } leaf send-group-query { type empty; description "Send IGMP group query messages"; } } // container passive leaf-list oif-map { type jt:policy-algebra; ordered-by user; description "Output interface map"; } leaf distributed { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "distributed is supported only in enhanced-ip mode"; type empty; description "Distributed IGMP interface"; } } // list interface container amt { description "Automatic Multicast Tunnel options for IGMP"; uses apply-advanced; container relay { description "AMT relay options for IGMP"; uses apply-advanced; container defaults { presence "enable defaults"; description "Default AMT relay options for IGMP"; uses apply-advanced; leaf version { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 3"; } } description "Set IGMP version number on AMT interfaces"; } leaf ssm-map { type string; description "Map for SSM translation of IGMPv1 or IGMPv2 messages"; } leaf-list ssm-map-policy { type jt:policy-algebra; ordered-by user; description "SSM map policy name"; } choice accounting-choice { leaf accounting { type empty; description "Enable join and leave event notification"; } leaf no-accounting { type empty; description "Don't enable join and leave event notification"; } } // choice accounting-choice leaf-list group-policy { type jt:policy-algebra; ordered-by user; description "Group filter applied to incoming IGMP report messages"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } description "Maximum number of (source,group) per interface"; } leaf group-threshold { junos:must "(" .. group-limit")"; junos:must-message "To configure group-threshold, group-limit must be set"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100"; } } description "Percentage of limit at which to generate warnings"; } leaf log-interval { junos:must "(" .. group-limit")"; junos:must-message "To configure log-interval, group-limit must be set"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between consecutive log messages"; } leaf robust-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } description "Expected packet loss on a subnet"; } 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"; } } // container defaults } // container relay } // container amt } // container igmp container router-discovery { description "ICMP router discovery options"; uses juniper-protocols-router-discovery; } // container router-discovery container isis { description "IS-IS options"; uses juniper-protocols-isis; } // container isis list isis-instance { key "name"; ordered-by user; description "Multi-instance IS-IS configuration"; leaf name { type string; description "IS-IS instance name"; } 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 } // list isis-instance container l2iw { presence "enable l2iw"; description "Configuration for Layer 2 interworking"; uses apply-advanced; container traceoptions { description "Trace options for Layer 2 circuits"; 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 "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 l2iw container l2circuit { description "Configuration for Layer 2 circuits over MPLS"; uses apply-advanced; container traceoptions { description "Trace options for Layer 2 circuits"; 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 circuit topology changes"; } enum "fec" { value 2; description "Trace Layer 2 circuit VC FEC advertisements"; } enum "connections" { value 3; description "Trace Layer 2 circuit connections"; } enum "oam" { value 4; description "Trace Layer 2 circuit OAM messages"; } enum "egress-protection" { value 5; description "Trace Layer 2 circuit egress protection messages"; } enum "auto-sensing" { value 6; description "Trace Layer 2 circuit PW auto-sensing"; } enum "sdb" { value 7; description "Trace SDB"; } 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 neighbor { key "name"; ordered-by user; description "List of Layer 2 circuits to this neighbor"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; list interface { key "name"; ordered-by user; description "Interface forming the Layer 2 circuit"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; 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 Pseudowire"; uses apply-advanced; leaf incoming-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Layer 2 circuit incoming static label"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Layer 2 circuit outgoing static label"; } leaf send-oam { type empty; description "Turn on sending of l2ckt ping"; } } // container static leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the remote PE"; } leaf protect-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } leaf virtual-circuit-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Identifier for this Layer 2 circuit"; } leaf description { type string; description "Text description of Layer 2 circuit"; } choice control-word-choice { leaf control-word { type empty; description "Add control word to the Layer 2 encapsulation"; } leaf no-control-word { type empty; description "Don't add control word to the Layer 2 encapsulation"; } } // choice control-word-choice leaf flow-label-transmit { junos:must "(!(".. egress-protection"))"; junos:must-message "Can't configure flow-label with egress-protection"; junos:must "(!(".. connection-protection"))"; junos:must-message "Can't configure flow-label with connection-protection"; type empty; description "Advertise capability to push Flow Label in transmit direction to remote PE"; } leaf flow-label-transmit-static { junos:must "(!(".. static"))"; junos:must-message "Can't configure flow-label for static pseudowire"; junos:must "(!(".. egress-protection"))"; junos:must-message "Can't configure flow-label with egress-protection"; junos:must "(!(".. connection-protection"))"; junos:must-message "Can't configure flow-label with connection-protection"; junos:must "(!(".. backup-neighbor"))"; junos:must-message "Can't configure flow-label with backup-neighbor"; 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 { junos:must "(!(".. egress-protection"))"; junos:must-message "Can't configure flow-label with egress-protection"; junos:must "(!(".. connection-protection"))"; junos:must-message "Can't configure flow-label with connection-protection"; type empty; description "Advertise capability to pop Flow Label in receive direction to remote PE"; } leaf flow-label-receive-static { junos:must "(!(".. static"))"; junos:must-message "Can't configure flow-label for static pseudowire"; junos:must "(!(".. egress-protection"))"; junos:must-message "Can't configure flow-label with egress-protection"; junos:must "(!(".. connection-protection"))"; junos:must-message "Can't configure flow-label with connection-protection"; junos:must "(!(".. backup-neighbor"))"; junos:must-message "Can't configure flow-label with backup-neighbor"; 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"; } leaf community { type string; description "Community associated with this Layer 2 circuit"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 65535"; } } description "MTU to be advertised for this Layer 2 circuit"; } 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 { junos:must "(!(".. static"))"; junos:must-message "not supported for static pseudowires"; type empty; description "Allow different encapsulation types on local and remote end"; } leaf ignore-mtu-mismatch { junos:must "(!(".. static"))"; junos:must-message "not supported for static pseudowires"; type empty; description "Allow different MTUs on interfaces"; } leaf no-revert { junos:must "(".. protect-interface")"; junos:must-message "no-revert cannot be configured without protect-interface"; type empty; description "Don't revert to primary-interface"; } container bandwidth { description "Bandwidth to reserve (bps)"; uses bandwidth-type; } // container bandwidth leaf send-ip-addr-list-tlv { type empty; description "Send IP ADDR LIST TLV to remote side"; } container pseudowire-status-tlv { presence "enable pseudowire-status-tlv"; description "Send pseudowire status TLV"; uses apply-advanced; leaf hot-standby-vc-on { junos:must "(!(".. .. static"))"; junos:must-message "not supported for static pseudowires"; 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 "Layer 2 circuit switchover delay"; } container revert-time { presence "enable revert-time"; description "Enable pseudowire redundancy reversion"; 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 Pseudo wire has to be static"; presence "enable static"; description "Configuration of static Pseudowire"; uses apply-advanced; leaf incoming-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Layer 2 circuit incoming static label"; } leaf outgoing-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Layer 2 circuit outgoing static label"; } } // container static leaf virtual-circuit-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Identifier for this Layer 2 circuit"; } 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 "(".. .. 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 Layer 2 circuit"; 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 container egress-protection { junos:must "(!(".. backup-neighbor"))"; junos:must-message "Can't configure both backup-neighbor and egress-protection"; junos:must "(!(".. protect-interface"))"; junos:must-message "Can't configure both protect-interface and egress-protection"; description "Egress protection for Layer 2 circuit"; uses apply-advanced; choice protection-type { leaf protector-interface { junos:must "(!(".. protected-l2circuit"))"; junos:must-message "Can't configure both protector-interface and protected-l2circuit"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of the protector interface for local protection"; } container protector-pe { junos:must "(".. .. .. .. .. ldp upstream-label-assignment")"; junos:must-message "LDP upstream-label-assignment capability must be enabled"; description "Address of the protector PE"; leaf address { type jt:ipv4addr; description "Address of the protector PE"; } leaf context-identifier { type jt:ipv4addr; description "Identifier of the context used for this protection"; } leaf lsp { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of the label-switched path used for the protection"; } } // container protector-pe } // choice protection-type container protected-l2circuit { junos:must "(".. .. .. .. .. ldp upstream-label-assignment")"; junos:must-message "LDP upstream-label-assignment capability must be enabled"; description "Primary Layer 2 circuit to be protected"; leaf l2circuit-name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be a string of 64 characters or less"; } description "Name of the protected Layer 2 circuit"; } leaf ingress-pe { type jt:ipv4addr; description "Ingress PE address of the protected Layer 2 circuit"; } leaf egress-pe { type jt:ipv4addr; description "Egress PE address of the protected Layer 2 circuit"; } leaf virtual-circuit-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Identifier of the protected Layer 2 circuit"; } } // container protected-l2circuit } // container egress-protection } // list interface } // list neighbor container local-switching { description "Configuration of Layer 2 circuits local switching"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Interface forming the local Layer 2 circuit"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf no-revert { junos:must "(".. protect-interface")"; junos:must-message "no-revert cannot be configured without protect-interface"; type empty; description "Do not revert to primary-interface"; } leaf protect-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } leaf connection-protection { junos:must "((".. neighbor" || (".. backup-neighbor" || ".. end-interface backup-interface")))"; junos:must-message "Connection-protection can be configured only when neighbor/backup-neighbor/backup-interface is present"; type empty; description "End-2-end protection via OAM failure detection"; } list neighbor { junos:must "(".. end-interface backup-interface")"; junos:must-message "Backup-interface must be configured when neighbor is present"; junos:must "(".. connection-protection")"; junos:must-message "Connection-protection must be configured when neighbor is present"; junos:must "(!(".. end-interface interface"))"; junos:must-message "Neighbor cannot be configured along with end-interface interface"; junos:must "(!(".. backup-neighbor"))"; junos:must-message "Neighbor cannot be configured along with backup-neighbor"; key "name"; ordered-by user; description "Configuration of Layer 2 circuit"; leaf name { type jt:ipv4addr; description "Neighbor ID"; } uses apply-advanced; leaf virtual-circuit-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Identifier for this Layer 2 circuit"; } leaf community { 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 neighbor PE"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 65535"; } } description "MTU to be advertised for this Layer 2 circuit"; } } // list neighbor list backup-neighbor { junos:must "(".. end-interface interface")"; junos:must-message "End-interface interface must be configured when backup-neighbor is present"; junos:must "(".. connection-protection")"; junos:must-message "Connection-protection must be configured when backup-neighbor is present"; junos:must "(!(".. end-interface backup-interface"))"; junos:must-message "Backup-neighbor cannot be configured along with backup-interface"; junos:must "(!(".. neighbor"))"; junos:must-message "Backup-neighbor cannot be configured along with neighbor"; key "name"; ordered-by user; description "Configuration of redundant l2circuit"; leaf name { type jt:ipv4addr; description "Backup Neighbor ID"; } uses apply-advanced; leaf virtual-circuit-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Identifier for this Layer 2 circuit"; } leaf psn-tunnel-endpoint { type jt:ipv4addr; description "Endpoint of the transport tunnel on the backup neighbor PE"; } leaf community { type string; description "Community associated with this Layer 2 circuit"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "512 .. 65535"; } } description "MTU to be advertised for this Layer 2 circuit"; } } // list backup-neighbor container end-interface { description "Interface name of the other end point"; uses apply-advanced; leaf interface { junos:must "(!(".. .. neighbor"))"; junos:must-message "end-interface interface cannot be configured along with neighbor"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } leaf no-revert { junos:must "(".. protect-interface")"; junos:must-message "no-revert cannot be configured without protect-interface"; type empty; description "Do not revert to primary-interface"; } leaf protect-interface { junos:must "(".. interface")"; junos:must-message "Protect-interface can be configured only when end-interface interface is present"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of protect interface"; } leaf backup-interface { junos:must "((".. interface" || ".. .. neighbor"))"; junos:must-message "Backup-interface can be configured only when neighbor/end-interface interface is present"; junos:must "(".. .. connection-protection")"; junos:must-message "Connection-protection must be configured when backup-interface is present"; junos:must "(!(".. .. backup-neighbor"))"; junos:must-message "Backup-interface cannot be configured along with backup-neighbor"; junos:must "(!(".. protect-interface"))"; junos:must-message "Backup-interface cannot be configured along with protect-interface"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of backup interface"; } } // container end-interface leaf description { type string; description "Text description of Layer 2 circuit"; } 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 ignore-mtu-mismatch { type empty; description "Allow different MTUs on interfaces"; } } // list interface } // container local-switching container auto-sensing { presence "enable auto-sensing"; description "Configuration of PW auto-sensing"; uses apply-advanced; leaf password { type jt:unreadable; description "Password for authentication with Radius server; 1 to 15 characters long"; } } // container auto-sensing container resolution { description "Configuration of PW nexthop resolution"; uses apply-advanced; leaf preserve-nexthop-heirarchy { type empty; description "Install expanded heirarchy"; } } // container resolution } // container l2circuit container l2vpn { description "Configuration for Layer 2 VPN circuits over MPLS"; uses apply-advanced; container resolution { description "Configuration of PW nexthop resolution"; uses apply-advanced; leaf preserve-nexthop-heirarchy { type empty; description "Install expanded heirarchy"; } } // container resolution } // container l2vpn container ldp { description "LDP options"; uses juniper-protocols-ldp; } // container ldp container link-management { description "LMP options"; uses juniper-protocols-lmp; } // container link-management container mld { presence "enable mld"; description "MLD options"; uses apply-advanced; container traceoptions { description "Trace options for MLD"; 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 "mtrace" { value 4; description "Trace mtrace packets"; } enum "group" { value 5; description "Trace group operations"; } enum "client-notification" { value 6; description "Trace notifications"; } enum "host-notification" { value 7; description "Trace host notifications"; } 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 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 maximum-transmit-rate { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10000"; } } description "Maximum transmission rate (packets per second)"; } leaf accounting { type empty; description "Enable join and leave event notification"; } list interface { key "name"; ordered-by user; description "Interface options for MLD"; leaf name { type string; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable MLD on this interface"; } } // choice enable-disable leaf version { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 2"; } } description "Set mld version number on this 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; leaf group-increment { type jt:ipv6addr; description "Mask for the incrementing group IP address"; } leaf group-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 512"; } } description "Number of groups"; } leaf exclude { type empty; description "Exclude sources"; } 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; leaf source-increment { type jt:ipv6addr; description "Mask for the incrementing source IP address"; } leaf source-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1024"; } } description "Number of sources"; } } // list source } // list group } // container static leaf ssm-map { type string; description "Map for ssm translation of mld v1 messages"; } leaf-list ssm-map-policy { type jt:policy-algebra; ordered-by user; description "SSM map policy name"; } leaf immediate-leave { type empty; description "Group removed immediately, last membership query not sent"; } leaf-list group-policy { type jt:policy-algebra; ordered-by user; description "Group filter applied to incoming mld report messages"; } leaf group-limit { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } description "Maximum number of (source,group) per interface"; } leaf group-threshold { junos:must "(".. group-limit")"; junos:must-message "To configure group-threshold, group-limit must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 100"; } } description "Percentage of group-limit at which to start generating warnings"; } leaf log-interval { junos:must "(".. group-limit")"; junos:must-message "To configure log-interval, group-limit must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "6 .. 32767"; } } description "Time between consecutive log messages"; } choice accounting-choice { leaf accounting { type empty; description "Enable join and leave event notification"; } leaf no-accounting { type empty; description "Don't enable join and leave event notification"; } } // choice accounting-choice container passive { presence "enable passive"; description "Suppress sending and receiving mld messages"; leaf allow-receive { type empty; description "Allow receiving mld messages"; } leaf send-general-query { type empty; description "Send mld general query messages"; } leaf send-group-query { type empty; description "Send mld group query messages"; } } // container passive leaf-list oif-map { type jt:policy-algebra; ordered-by user; description "Output interface map"; } leaf distributed { junos:must "("chassis network-services enhanced-ip")"; junos:must-message "distributed is supported only in enhanced-ip mode"; type empty; description "Distributed MLD interface"; } } // list interface } // container mld container mpls { description "Multiprotocol Label Switching options"; uses juniper-protocols-mpls; } // container mpls container msdp { description "MSDP configuration"; uses juniper-protocols-msdp; } // container msdp container mvpn { description "BGP-MVPN configuration"; uses juniper-protocols-mvpn; } // container mvpn container ospf { description "OSPF configuration"; uses juniper-protocols-ospf; } // container ospf container ospf3 { description "OSPFv3 configuration"; uses juniper-protocols-ospf3; } // container ospf3 container pim { description "PIM configuration"; uses juniper-protocols-pim; } // container pim container ripng { description "RIPng options"; uses juniper-protocols-ripng; } // container ripng container rip { description "RIP options"; uses juniper-protocols-rip; } // container rip container rsvp { description "RSVP options"; uses juniper-protocols-rsvp; } // container rsvp container sap { presence "enable sap"; description "Session Advertisement Protocol options"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable SAP"; } } // choice enable-disable list listen { key "name"; ordered-by user; description "Address for SAP and SDP to listen on"; leaf name { type jt:ipv4addr; description "IP address"; } leaf port { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Port to listen for session advertisements"; } } // list listen } // container sap container source-packet-routing { presence "enable source-packet-routing"; description "Enable source packet routing (SPRING)"; uses apply-advanced; container traceoptions { description "Trace options for soure-packet-routing"; 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 "controller" { value 0; description "Trace controller-related activity"; } enum "state" { value 1; description "Trace LSP state-related activity"; } enum "route" { value 2; description "Trace route-related activity"; } enum "general" { value 3; description "Trace general activity"; } enum "interface" { value 4; description "Trace interface-related activity"; } enum "dtm" { value 5; description "Trace dtm-related activity"; } enum "bfd" { value 6; description "Trace bfd-related activity"; } enum "translation" { value 7; description "Trace translation-related activity"; } enum "srv6-te" { value 8; description "Trace srv6-te activity"; } enum "telemetry-statistics" { value 9; description "Trace telemetry statistics related activity"; } enum "compute" { value 10; description "Trace compute profile and computed lsp related activity"; } enum "nsr-replication" { value 11; description "Trace NSR replication activity"; } enum "all" { value 12; description "Trace everything"; } } } leaf detail { type empty; description "Trace detailed information"; } } // list flag } // container traceoptions list lsp-external-controller { junos:must "(".. .. mpls lsp-external-controller")"; junos:must-message "To enable spring, mpls lsp-external-controller must be configure"; key "name"; ordered-by user; description "External path computing entity"; leaf name { type string { length "1 .. 64"; } description "Name of the external path computing entity"; } uses apply-advanced; } // list lsp-external-controller leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Route preference for SPRING-TE routes"; } leaf sr-preference-override { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "SR-preference override for static SR-policies.Higher value is more preferred"; } leaf sr-preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "SR-preference for static SR-policies.Higher value is more preferred"; } leaf maximum-segment-list-depth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Maximum segment list depth for SR-TE policies"; } leaf maximum-srv6-te-segment-list-depth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 6"; } } description "Maximum segment list depth for SRv6-TE policies"; } leaf no-chained-composite-next-hop { type empty; description "Do not use chained composite next hops for SRTE routes"; } leaf tunnel-tracking { type empty; description "Track route status for first hop label based tunnels"; } list segment-list { key "name"; ordered-by user; description "Explicit path for SR-TE segments"; leaf name { type string { length "1 .. 64"; } description "Name of SR-TE segment-list"; } uses apply-advanced; leaf inherit-label-nexthops { junos:must "(!(".. srv6"))"; junos:must-message "Inherit label nexthops functionality can't be used with a segment-list for SRv6"; junos:must "(!(".. compute"))"; junos:must-message "Inherit label nexthops functionality can't be used with a segment-list for compute"; type empty; description "Inherit label nexthops for first hop in this segment list"; } choice translation-type { container auto-translate { junos:must "(!(".. srv6"))"; junos:must-message "Please use non SRv6 segment lists for auto-translate"; junos:must "(!(".. compute"))"; junos:must-message "Please use different segment lists for compute and auto-translate"; presence "enable auto-translate"; description "Enable auto translation from IP address to labels"; uses apply-advanced; choice protection-choice { container protected { presence "enable protected"; description "Choose protected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose protected labels"; } } // container protected container unprotected { presence "enable unprotected"; description "Choose unprotected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose unprotected labels"; } } // container unprotected } // choice protection-choice } // container auto-translate container dynamic { junos:must "(!(".. srv6"))"; junos:must-message "Please use non SRv6 segment lists for dynamic"; junos:must "(!(".. compute"))"; junos:must-message "Please use different segment lists for compute and dynamic template"; presence "enable dynamic"; description "Enable dynamic last hop computation"; uses apply-advanced; choice protection-choice { container protected { presence "enable protected"; description "Choose protected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose protected labels"; } } // container protected container unprotected { presence "enable unprotected"; description "Choose unprotected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose unprotected labels"; } } // container unprotected } // choice protection-choice } // container dynamic } // choice translation-type leaf compute { junos:must "(!(".. srv6"))"; junos:must-message "Please use non SRv6 segment lists for compute"; type empty; description "Segment list used for specifying explicit path for computed paths"; } leaf srm6 { junos:must "((!(".. compute") && (!(".. dynamic") && (!(".. inherit-label-nexthops") && (!(".. auto-translate") && !(".. srv6"))))))"; junos:must-message "SRm6 segment-list cannot be configured with SR-TE combination"; type empty; description "Segment list used for SRm6"; } leaf srv6 { junos:must "(".. .. srv6")"; junos:must-message "Please enable srv6 under protocols source-packet-routing"; junos:must "(!(".. srm6"))"; junos:must-message "SRv6 segment-list cannot be configured with srm6"; junos:must "(!(".. auto-translate"))"; junos:must-message "SRv6 segment-list cannot be configured with auto-translate"; junos:must "(!(".. inherit-label-nexthops"))"; junos:must-message "SRv6 segment-list cannot be configured with inherit-label-nexthops"; junos:must "(!(".. dynamic"))"; junos:must-message "SRv6 segment-list cannot be configured with dynamic"; junos:must "(!(".. compute"))"; junos:must-message "SRv6 segment-list cannot be configured with compute"; type empty; description "Segment list used for SRv6"; } list hop-list { key "name"; max-elements 16; ordered-by user; leaf name { type string { length "1 .. 64"; } description "Next hop in segment-list"; } uses apply-advanced; leaf label { junos:must "(!(".. .. srv6"))"; junos:must-message "label hop can't be used with a segment-list for srv6"; junos:must "(!(".. .. srm6"))"; junos:must-message "label hop can't be used with a segment-list for srm6"; junos:must "(!(".. .. compute"))"; junos:must-message "label hops can't be used with a segment-list for compute"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Next label in SR-TE segment-list"; } leaf ip-address { junos:must "(!(".. .. srv6"))"; junos:must-message "ip address hop can't be used with a segment-list for srv6"; junos:must "(!(".. .. srm6"))"; junos:must-message "ip address hop can't be used with a segment-list for srm6"; type jt:ipaddr; description "IP address of the hop"; } leaf sid { junos:must "(!(".. .. srv6"))"; junos:must-message "sid can't be used with a segment-list for srv6"; junos:must "(".. .. srm6")"; junos:must-message "srm6 must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Next sid in SRm6 segment-list"; } leaf srv6-sid { junos:must "(".. .. srv6")"; junos:must-message "srv6 must be configured"; junos:must "(!(".. .. srm6"))"; junos:must-message "srm6 can't be used with a segment-list for srv6"; type jt:ipaddr; description "Sid for SRv6 segment-list in form of ipv6 address"; } choice hop-choice { leaf strict { junos:must "(!(".. .. srv6"))"; junos:must-message "Hop choice only for compute-type segment-list not for srv6"; junos:must "(!(".. .. srm6"))"; junos:must-message "Hop choice only for compute-type segment-list not for srm6"; junos:must "(".. .. compute")"; junos:must-message "Hop choice only for compute-type segment-list"; type empty; description "Strict hop"; } leaf loose { junos:must "(!(".. .. srv6"))"; junos:must-message "Hop choice only for compute-type segment-list not for srv6"; junos:must "(!(".. .. srm6"))"; junos:must-message "Hop choice only for compute-type segment-list not for srm6"; junos:must "(".. .. compute")"; junos:must-message "Hop choice only for compute-type segment-list"; type empty; description "Loose hop"; } } // choice hop-choice container label-type { junos:must "(!(".. .. srv6"))"; junos:must-message "label-type functionality can't be used with a segment-list for srv6"; junos:must "(!(".. .. srm6"))"; junos:must-message "label-type functionality can't be used with a segment-list for srm6"; junos:must "(!(".. .. compute"))"; junos:must-message "label-type functionality can't be used with a segment-list for compute"; description "Type of label for the hop"; uses apply-advanced; leaf node { type empty; description "Hop represents a node"; } } // container label-type } // list hop-list } // list segment-list list compute-profile { key "name"; ordered-by user; description "Compute profile for dynamically computed paths"; leaf name { type string { length "1 .. 64"; } description "Name of the computation-profile"; } uses apply-advanced; container admin-group { description "Administrative group policy"; uses admin_group_include_exclude; } // container admin-group leaf maximum-segment-list-depth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Maximum depth of computed path"; } leaf no-label-stack-compression { type empty; description "Provide fully expanded path, using adjacency segment identifiers"; } choice protection-choice { container protected { presence "enable protected"; description "Choose protected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose protected labels"; } } // container protected container unprotected { presence "enable unprotected"; description "Choose unprotected labels if available"; uses apply-advanced; leaf mandatory { type empty; description "Mandatorily choose unprotected labels"; } } // container unprotected } // choice protection-choice leaf compute-segment-list { junos:must "(".. .. segment-list $$ compute")"; junos:must-message "Compute segment list can only be referenced by this compute profile"; type string { length "1 .. 64"; } description "Name of the compute type segmentlist"; } leaf maximum-computed-segment-lists { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 128"; } } description "Maximum number of segment-lists(ECMP paths) to be computed"; } container metric-type { description "Metric type used for computaion"; uses apply-advanced; choice metric-choice { leaf te { type empty; description "TE metric"; } leaf igp { type empty; description "IGP metric"; } container delay { presence "enable delay"; description "Delay metric"; uses apply-advanced; choice metric-choice { leaf minimum { type empty; description "Minimum delay metric type"; } leaf maximum { type empty; description "Maximum delay metric type"; } leaf average { type empty; description "Average delay metric type"; } } // choice metric-choice leaf delay-variation-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Link delay variation threshold"; } } // container delay } // choice metric-choice } // container metric-type } // list compute-profile leaf srv6 { junos:must "("routing-options forwarding-table srv6-chain-merge")"; junos:must-message "SRv6 can only be enabled with srv6-chain-merge"; junos:must "(("routing-options resolution preserve-nexthop-hierarchy" || ("protocols source-packet-routing preserve-nexthop-hierarchy" && !("protocols source-packet-routing preserve-nexthop-hierarchy srv6 disable"))))"; junos:must-message "SRv6 can only be enabled with preserve-nexthop-hierarchy"; type empty; description "Enable srv6 support for source-packet-routing"; } container preserve-nexthop-hierarchy { presence "enable preserve-nexthop-hierarchy"; description "Enable preserve-nexthop-hierarchy for source-packet-routing"; uses apply-advanced; container sr-mpls { description "Disable preserve-nexthop-hierarchy for sr-mpls"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable preserve-nexthop-hierarchy for sr-mpls"; } } // choice enable-disable } // container sr-mpls container srv6 { description "Disable preserve-nexthop-hierarchy for srv6"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable preserve-nexthop-hierarchy for srv6"; } } // choice enable-disable } // container srv6 } // container preserve-nexthop-hierarchy list source-routing-path { key "name"; ordered-by user; description "Configure a source-routing-path"; leaf name { type string { length "1 .. 64"; } description "Name of the source routing path"; } uses apply-advanced; leaf srm6 { junos:must "(".. from")"; junos:must-message "From address mandatory for srm6 tunnel"; junos:must "((!(".. ldp-tunneling") && (!(".. color") && (!(".. no-ingress") && (!(".. binding-sid") && (!(".. preference") && (!(".. metric") && (!(".. sr-preference") && (!(".. lsp-external-controller") && (!(".. install") && (!(".. secondary") && (!(".. srv6") && !(".. use-for-shortcut")))))))))))))"; junos:must-message "SRm6 tunnel cannot be configured with SR-TE combination"; type empty; description "Tunnel type SRm6"; } leaf srv6 { junos:must "(!(".. use-for-shortcut"))"; junos:must-message "SRv6 tunnel cannot be configured with use-for-shortcut"; junos:must "(".. from")"; junos:must-message "From address mandatory for srv6 tunnel"; junos:must "(".. .. srv6")"; junos:must-message "Srv6 knob under source-packet-routing mandatory for SRv6 tunnel"; junos:must "(!(".. srm6"))"; junos:must-message "SRv6 tunnel cannot be configured with srm6"; junos:must "(!(".. lsp-external-controller"))"; junos:must-message "SRv6 tunnel cannot be configured with lsp-external-controller"; junos:must "(!(".. binding-sid"))"; junos:must-message "SRv6 tunnel cannot be configured with binding-sid"; junos:must "(!(".. no-ingress"))"; junos:must-message "SRv6 tunnel cannot be configured with no-ingress"; junos:must "(!(".. ldp-tunneling"))"; junos:must-message "SRv6 tunnel cannot be configured with ldp-tunneling"; type empty; description "Tunnel type SRv6"; } leaf ldp-tunneling { junos:must "(!(".. color"))"; junos:must-message "LDP tunneling is not supported for colored source-routing paths"; type empty; description "Allow LDP to use this LSP for tunneling"; } leaf use-for-shortcut { junos:must "(!(".. srv6"))"; junos:must-message "Shortcut usage is not supported with SRv6 tunnel"; junos:must "(!(".. srm6"))"; junos:must-message "Shortcut usage is not supported with SRm6 tunnel"; junos:must "(!(".. color"))"; junos:must-message "Shortcut usage is not supported for colored source-routing paths"; type empty; description "Allow this LSP to be used as a shortcut tunnel"; } leaf to { type jt:ipaddr; description "Ip-address of the tunnel end-point"; } leaf from { junos:must "((".. srm6" || ".. srv6"))"; junos:must-message "Tunnel must be of type srm6 or srv6"; type jt:ipaddr; description "Ip-address of the tunnel start-point"; } leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Color identifier for the tunnel end-point"; } leaf no-ingress { junos:must "(!(".. color"))"; junos:must-message "Ingress functionlity is required for colored source-routing paths"; junos:must "((".. binding-sid" || ".. install"))"; junos:must-message "Please configure the binding-label or install prefixes if ingress functinality is not required"; type empty; description "Disable ingress functionality for this tunnel"; } leaf binding-sid { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "16 .. 1048575"; } } description "Specify the binding-label to enable transit functionality for this tunnel"; } list install { key "name"; ordered-by user; description "Install prefix"; leaf name { junos:must "(!(".. .. to $$"))"; junos:must-message "Install and to address must be different"; type jt:ipaddr; description "Destination prefix"; } } // list install leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } status deprecated; description "Preference for routes downloaded for this tunnel"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for routes downloaded for this tunnel"; } leaf sr-preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "SR-preference for SPRING-TE routes. Higher value is more preferred"; } leaf lsp-external-controller { junos:must "("protocols source-packet-routing lsp-external-controller $$")"; junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy"; type string { length "1 .. 64"; } description "Name of the external path computing entity"; } list primary { key "name"; max-elements 128; ordered-by user; description "Configure a primary segment list for this source-routing-path"; leaf name { junos:must "(!(".. .. .. segment-list $$ dynamic"))"; junos:must-message "Dynamic segment list cannot be referenced by this static policy"; junos:must "(!(".. .. .. segment-list $$ compute"))"; junos:must-message "compute segment list cannot be referenced by this static policy"; junos:must "(((".. .. .. segment-list $$" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))"; junos:must-message "Please either use defined segment list without compute or undefined segment list with compute"; type string { length "1 .. 64"; } description "Name of SR-TE segment-list"; } uses apply-advanced; leaf weight { junos:must "(!(".. .. srm6"))"; junos:must-message "Balance factor cannot be configured with SRm6 tunnel"; type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Specify the balance factor for this segment list in SR-TE tunnel"; } container bfd-liveness-detection { junos:must "(!(".. .. srv6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel"; description "Bidirectional forwarding detection options"; uses apply-advanced; container sbfd { presence "enable sbfd"; description "Seamless BFD parameters"; uses apply-advanced; leaf remote-discriminator { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Remote discriminator of reflector"; } } // container sbfd leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } leaf no-router-alert-option { type empty; description "Do not set the router alert option in IP header"; } } // container bfd-liveness-detection container compute { junos:must "(!(".. .. srv6"))"; junos:must-message "Computation cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Computation cannot be configured with SRm6 tunnel"; presence "enable compute"; description "Enable computation"; uses apply-advanced; leaf compute-profile-name { junos:must "(".. .. .. .. compute-profile $$")"; junos:must-message "Please define the compute-profile referenced by this policy"; type string { length "1 .. 64"; } description "Name of compute-profile"; } } // container compute leaf lsp-external-controller { junos:must "("protocols source-packet-routing lsp-external-controller $$")"; junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy"; type string { length "1 .. 64"; } description "Name of the external path computing entity"; } } // list primary list secondary { key "name"; max-elements 1; ordered-by user; description "Configure a secondary segment list for this source-routing-path"; leaf name { junos:must "(!(".. .. .. segment-list $$ dynamic"))"; junos:must-message "Dynamic segment list cannot be referenced by this static policy"; junos:must "(!(".. .. .. segment-list $$ compute"))"; junos:must-message "compute segment list cannot be referenced by this static policy"; junos:must "(((".. .. .. segment-list $$" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))"; junos:must-message "Please either use defined segment list without compute or undefined segment list with compute"; type string { length "1 .. 64"; } description "Name of SR-TE segment-list"; } uses apply-advanced; container bfd-liveness-detection { junos:must "(!(".. .. srv6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel"; description "Bidirectional forwarding detection options"; uses apply-advanced; container sbfd { presence "enable sbfd"; description "Seamless BFD parameters"; uses apply-advanced; leaf remote-discriminator { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Remote discriminator of reflector"; } } // container sbfd leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } leaf no-router-alert-option { type empty; description "Do not set the router alert option in IP header"; } } // container bfd-liveness-detection container compute { junos:must "(!(".. .. srv6"))"; junos:must-message "Computation cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Computation cannot be configured with SRm6 tunnel"; presence "enable compute"; description "Enable computation"; uses apply-advanced; leaf compute-profile-name { junos:must "(".. .. .. .. compute-profile $$")"; junos:must-message "Please define the compute-profile referenced by this policy"; type string { length "1 .. 64"; } description "Name of compute-profile"; } } // container compute } // list secondary } // list source-routing-path list source-routing-path-template { key "name"; ordered-by user; description "Configure a source-routing-path-template"; leaf name { type string { length "1 .. 64"; } description "Name of the source routing path"; } uses apply-advanced; leaf no-ingress { type empty; description "Disable ingress functionality for this tunnel"; } leaf use-for-shortcut { junos:must "(!(".. srv6"))"; junos:must-message "Shortcut usage is not supported with SRv6 tunnel"; junos:must "(!(".. srm6"))"; junos:must-message "Shortcut usage is not supported with SRm6 tunnel"; junos:must "(!(".. color"))"; junos:must-message "Shortcut usage is not supported for colored source-routing paths"; type empty; description "Allow this LSP to be used as a shortcut tunnel"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16777215"; } } description "Metric for routes downloaded for this tunnel"; } leaf sr-preference { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "SR-preference for SPRING-TE routes. Higher value is more preferred"; } leaf ldp-tunneling { type empty; description "Allow LDP to use this LSP for tunneling"; } leaf lsp-external-controller { junos:must "("protocols source-packet-routing lsp-external-controller $$")"; junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy"; type string { length "1 .. 64"; } description "Name of the external path computing entity"; } list primary { key "name"; max-elements 128; ordered-by user; description "Configure a primary segment list for this source-routing-path"; leaf name { junos:must "(!(".. .. .. segment-list $$ compute"))"; junos:must-message "compute segment list cannot be referenced by this static policy"; junos:must "(((".. .. .. segment-list $$ dynamic" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))"; junos:must-message "Please either define dynamic type segment list without compute or undefined segment list with compute"; type string { length "1 .. 64"; } description "Name of SR-TE segment-list"; } uses apply-advanced; leaf weight { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Specify the balance factor for this segment list in SR-TE tunnel"; } container compute { junos:must "(!(".. .. srv6"))"; junos:must-message "Computation cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Computation cannot be configured with SRm6 tunnel"; presence "enable compute"; description "Enable computation"; uses apply-advanced; leaf compute-profile-name { junos:must "(".. .. .. .. compute-profile $$")"; junos:must-message "Please define the compute-profile referenced by this policy"; type string { length "1 .. 64"; } description "Name of compute-profile"; } } // container compute leaf lsp-external-controller { junos:must "("protocols source-packet-routing lsp-external-controller $$")"; junos:must-message "Please define the lsp-external-controller under 'protocols source-packet-routing' hierarchy"; type string { length "1 .. 64"; } description "Name of the external path computing entity"; } } // list primary list secondary { key "name"; max-elements 1; ordered-by user; description "Configure a secondary segment list for this source-routing-path"; leaf name { junos:must "(!(".. .. .. segment-list $$ compute"))"; junos:must-message "compute segment list cannot be referenced by this static policy"; junos:must "(((".. .. .. segment-list $$ dynamic" && !(".. compute")) || (!(".. .. .. segment-list $$") && ".. compute")))"; junos:must-message "Please either define dynamic type segment list without compute or undefined segment list with compute"; type string { length "1 .. 64"; } description "Name of SR-TE segment-list"; } uses apply-advanced; container compute { junos:must "(!(".. .. srv6"))"; junos:must-message "Computation cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Computation cannot be configured with SRm6 tunnel"; presence "enable compute"; description "Enable computation"; uses apply-advanced; leaf compute-profile-name { junos:must "(".. .. .. .. compute-profile $$")"; junos:must-message "Please define the compute-profile referenced by this policy"; type string { length "1 .. 64"; } description "Name of compute-profile"; } } // container compute } // list secondary container bfd-liveness-detection { junos:must "(!(".. .. srv6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRv6 tunnel"; junos:must "(!(".. .. srm6"))"; junos:must-message "Bidirectional forwarding detection cannot be configured with SRm6 tunnel"; description "Bidirectional forwarding detection options"; uses apply-advanced; container sbfd { presence "enable sbfd"; description "Seamless BFD parameters"; uses apply-advanced; leaf remote-discriminator { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Remote discriminator of reflector"; } } // container sbfd leaf minimum-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255000"; } } units "milliseconds"; description "Minimum transmit and receive interval"; } leaf multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } default "3"; description "Detection time multiplier"; } leaf no-router-alert-option { type empty; description "Do not set the router alert option in IP header"; } } // container bfd-liveness-detection } // list source-routing-path-template leaf inherit-label-nexthops { type empty; description "Inherit label nexthops for first hop in segment lists"; } container rib-group { description "Enable rib-group import poilicies on SR-TE"; uses apply-advanced; container ipv4 { presence "enable ipv4"; description "Import policy to be applied on ipv4 uncolored route"; uses apply-advanced; leaf rib-group-name { type string { length "1 .. 64"; } description "Rib-group import policy"; } } // container ipv4 container ipv6 { presence "enable ipv6"; description "Import policy to be applied on ipv6 uncolored route"; uses apply-advanced; leaf rib-group-name { type string { length "1 .. 64"; } description "Rib-group import policy"; } } // container ipv6 container ipv4-color { presence "enable ipv4-color"; description "Import policy to be applied on ipv4 colored route"; uses apply-advanced; leaf rib-group-name { type string { length "1 .. 64"; } description "Rib-group import policy"; } } // container ipv4-color container ipv6-color { presence "enable ipv6-color"; description "Import policy to be applied on ipv6 colored route"; uses apply-advanced; leaf rib-group-name { type string { length "1 .. 64"; } description "Rib-group import policy"; } } // container ipv6-color container tag { presence "enable tag"; description "Import policy to be applied on mpls route"; uses apply-advanced; leaf rib-group-name { type string { length "1 .. 64"; } description "Rib-group import policy"; } } // container tag } // container rib-group container telemetry { description "Enable telemetry on SR-TE policies"; uses apply-advanced; container statistics { presence "enable statistics"; description "Enable traffic-statistics collection on SR-TE policies"; uses apply-advanced; leaf no-transit { junos:must "(!(".. no-ingress"))"; junos:must-message "Please enable ingress statistics if no transit statistics is required"; type empty; description "Disable statistics collection on binding sid route"; } leaf no-ingress { junos:must "(!(".. no-transit"))"; junos:must-message "Please enable transit statistics if no ingress statistics is required"; type empty; description "Disable statistics collection on destination route"; } container per-source { description "Enable traffic-statistics collection per source"; uses apply-advanced; leaf per-segment-list { type empty; description "Enable per path level traffic-statistics collection"; } } // container per-source } // container statistics leaf uncolored-rib-stat { type empty; description "Enable rib-stat for uncolored tunnel"; } } // container telemetry container use-transport-class { junos:must "(!((".. rib-group ipv4-color" || ".. rib-group ipv6-color")))"; junos:must-message "Transport Class and color based rib-groups cannot be configured at the same time"; junos:must "("routing-options transport-class")"; junos:must-message "Please enable required Transport Class configs under routing-options transport-class hierarchy"; presence "enable use-transport-class"; description "Enable transport class on SR-TE colored policies"; uses apply-advanced; leaf fib-install { type empty; description "Install SRTE routes in FIB"; } leaf inet3-install { type empty; description "Install SRTE routes in inet{6}.3 table"; } } // container use-transport-class leaf inet-color-append-explicit-null { type empty; description "Enable appending explicit NULL for inet SRTE policy"; } leaf retry-timer { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 600"; } } units "seconds"; description "Time before retrying auto-translation failed paths"; } leaf import-color-only-cross-af { type empty; description "Enable importing of Null Endpoint color route for cross address family"; } leaf inet6-color-append-explicit-null { type empty; description "Enable appending explicit NULL for inet6 SRTE policy"; } leaf ipv6-tunneling-append-explicit-null { type empty; description "Enable appending explicit NULL for v4ov6 SRTE routes "; } container source-routing-path-template-map { description "Configure a source routing path template map"; uses apply-advanced; leaf-list policy { type jt:policy-algebra; ordered-by user; description "Configure policy"; } } // container source-routing-path-template-map } // container source-packet-routing container l2-learning { description "Layer 2 forwarding configuration"; uses juniper-protocols-bridge; } // container l2-learning container dcbx { presence "enable dcbx"; } // container dcbx container lldp { description "Link Layer Detection Protocol"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable LLDP"; } } // choice enable-disable container traceoptions { description "Trace options for LLDP"; 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"; description "Tracing parameters"; leaf name { type enumeration { enum "all" { value 0; description "Trace configuration events"; } enum "configuration" { value 1; description "Log configuration events"; } enum "rtsock" { value 2; description "Trace rtsock message events"; } enum "packet" { value 3; description "Trace packet information"; } enum "protocol" { value 4; description "Trace protocol information"; } enum "interface" { value 5; description "Trace interface update events"; } enum "vlan" { value 6; description "Trace VLAN update events"; } enum "snmp" { value 7; description "Trace SNMP events"; } enum "jvision" { value 8; description "Trace Jvision events"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf management-address { type jt:ipaddr; description "LLDP management address"; } leaf advertisement-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 32768"; } } units "seconds"; default "30"; description "Transmit interval for LLDP messages"; } leaf transmit-delay { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8192"; } } units "seconds"; description "Transmit delay time interval for LLDP messages"; } leaf hold-multiplier { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 10"; } } default "4"; description "Hold timer interval for LLDP messages"; } leaf ptopo-configuration-trap-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600"; } } units "seconds"; default "0"; description "Interval for physical topology configuration change trap"; } leaf ptopo-configuration-maximum-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2147483647"; } } units "seconds"; default "300"; description "Hold time for physical topology connection entries"; } leaf lldp-configuration-notification-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 3600"; } } units "seconds"; default "5"; description "Time interval for LLDP notification"; } leaf port-id-subtype { type enumeration { enum "locally-assigned" { value 0; description "Locally assigned value (SNMP index of the interface)"; } enum "interface-name" { value 1; description "Interface name on which LLDPDU is sent"; } } default "locally-assigned"; description "Sub-type to be used for Port ID TLV generation"; } leaf port-description-type { type enumeration { enum "interface-alias" { value 0; description "Use object ifAlias value for TLV generation"; } enum "interface-description" { value 1; description "Use object ifDescr value for TLV generation"; } } default "interface-alias"; description "The Interfaces Group MIB object to be used for Port Description TLV generation"; } leaf neighbour-port-info-display { type enumeration { enum "port-id" { value 0; description "Display port-id information of neighbor in port info"; } enum "port-description" { value 1; description "Display port description of neighbor in port info"; } } description "Show lldp neighbors to display port-id or port-description "; } leaf vlan-name-tlv-option { type enumeration { enum "vlan-id" { value 0; description "Use vlan-id for tlv"; } enum "name" { value 1; description "Use vlan-name for tlv"; } } default "vlan-id"; description "Vlan tlv options to transmit vlan name or vlan-id"; } leaf lldp-tx-fast-init { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 8"; } } description "Transmission count in fast transmission mode"; } leaf fast-rx-processing { type empty; description "Start optimised processing of received pdu"; } leaf-list tlv-select { type enumeration { enum "port-description" { value 0; description "Port Description"; } enum "system-name" { value 1; description "System Name"; } enum "system-description" { value 2; description "System Description"; } enum "system-capabilities" { value 3; description "System Capabilities"; } enum "management-address" { value 4; description "Management Address"; } enum "mac-phy-config-status" { value 5; description "OUI IEEE 802.3 mac-phy-config-status"; } enum "power-vi-mdi" { value 6; description "OUI IEEE 802.3 power-vi-mdi"; } enum "link-aggregation" { value 7; description "OUI IEEE 802.3 link-aggregation"; } enum "maximum-frame-size" { value 8; description "OUI IEEE 802.3 maximum-frame-size"; } enum "jnpr-chassis-serial" { value 9; description "OUI Juniper chassis-serial"; } enum "jnpr-vcp" { value 10; description "OUI Juniper vcp"; } enum "jnpr-mode-change" { value 11; description "OUI Juniper mode-change"; } enum "jnpr-mode-change-error" { value 12; description "OUI Juniper mode-change-error"; } enum "jnpr-mode-change-ip-address" { value 13; description "OUI Juniper mode-change-ip-address"; } enum "jnpr-mode-change-image-name" { value 14; description "OUI Juniper mode-change-image-name"; } enum "jnpr-mode-change-ftp-login" { value 15; description "OUI Juniper mode-change-ftp-login"; } enum "jnpr-mode-change-image-md5" { value 16; description "OUI Juniper mode-change-image-md5"; } enum "jnpr-mode-change-ftp-server" { value 17; description "OUI Juniper mode-change-ftp-server"; } enum "port-vid" { value 18; description "OUI IEEE 802.1 port-vid"; } enum "port-protocol-vid" { value 19; description "OUI IEEE 802.1 port-procol-vid"; } enum "vlan-name" { value 20; description "OUI IEEE 802.1 vlan-name"; } enum "protocol-id" { value 21; description "OUI IEEE 802.1 protocol-id"; } enum "evb" { value 22; description "OUI IEEE 82.1QBG evb"; } enum "power-via-mdi-measurements" { value 23; description "OUI IEEE 802.3 power-via-mdi-measurements"; } enum "cloud-reach-event" { value 24; description "Cloud reachability event"; } enum "phone-home-active" { value 25; description "Phone-home active configuration"; } } ordered-by user; description "Select TLVs to be sent"; } leaf-list tlv-filter { junos:must "(!(".. tlv-select"))"; junos:must-message "tlv-select or tlv-filter is allowed, not both."; type enumeration { enum "all" { value 0; description "Filter all non mandatory TLVs"; } enum "port-description" { value 1; description "Port Description"; } enum "system-name" { value 2; description "System Name"; } enum "system-description" { value 3; description "System Description"; } enum "system-capabilities" { value 4; description "System Capabilities"; } enum "management-address" { value 5; description "Management Address"; } enum "mac-phy-config-status" { value 6; description "OUI IEEE 802.3 mac-phy-config-status"; } enum "power-vi-mdi" { value 7; description "OUI IEEE 802.3 power-vi-mdi"; } enum "link-aggregation" { value 8; description "OUI IEEE 802.3 link-aggregation"; } enum "maximum-frame-size" { value 9; description "OUI IEEE 802.3 maximum-frame-size"; } enum "jnpr-chassis-serial" { value 10; description "OUI Juniper chassis-serial"; } enum "jnpr-vcp" { value 11; description "OUI Juniper vcp"; } enum "jnpr-mode-change" { value 12; description "OUI Juniper mode-change"; } enum "jnpr-mode-change-error" { value 13; description "OUI Juniper mode-change-error"; } enum "jnpr-mode-change-ip-address" { value 14; description "OUI Juniper mode-change-ip-address"; } enum "jnpr-mode-change-image-name" { value 15; description "OUI Juniper mode-change-image-name"; } enum "jnpr-mode-change-ftp-login" { value 16; description "OUI Juniper mode-change-ftp-login"; } enum "jnpr-mode-change-image-md5" { value 17; description "OUI Juniper mode-change-image-md5"; } enum "jnpr-mode-change-ftp-server" { value 18; description "OUI Juniper mode-change-ftp-server"; } enum "port-vid" { value 19; description "OUI IEEE 802.1 port-vid"; } enum "port-protocol-vid" { value 20; description "OUI IEEE 802.1 port-procol-vid"; } enum "vlan-name" { value 21; description "OUI IEEE 802.1 vlan-name"; } enum "protocol-id" { value 22; description "OUI IEEE 802.1 protocol-id"; } enum "evb" { value 23; description "OUI IEEE 802.1QBG evb"; } enum "power-via-mdi-measurements" { value 24; description "OUI IEEE 802.3 power-via-mdi-measurements"; } enum "cloud-reach-event" { value 25; description "Cloud reachability event"; } enum "phone-home-active" { value 26; description "Phone-home active configuration"; } } ordered-by user; description "Filter TLVs to be sent"; } list interface { key "name"; ordered-by user; description "Interface configuration"; leaf name { type string; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable LLDP"; } } // choice enable-disable container power-negotiation { presence "enable power-negotiation"; description "LLDP power negotiation"; uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable power negotiation"; } } // choice enable-disable } // container power-negotiation leaf-list tlv-select { type enumeration { enum "port-description" { value 0; description "Port Description"; } enum "system-name" { value 1; description "System Name"; } enum "system-description" { value 2; description "System Description"; } enum "system-capabilities" { value 3; description "System Capabilities"; } enum "management-address" { value 4; description "Management Address"; } enum "mac-phy-config-status" { value 5; description "OUI IEEE 802.3 mac-phy-config-status"; } enum "power-vi-mdi" { value 6; description "OUI IEEE 802.3 power-vi-mdi"; } enum "link-aggregation" { value 7; description "OUI IEEE 802.3 link-aggregation"; } enum "maximum-frame-size" { value 8; description "OUI IEEE 802.3 maximum-frame-size"; } enum "jnpr-chassis-serial" { value 9; description "OUI Juniper chassis-serial"; } enum "jnpr-vcp" { value 10; description "OUI Juniper vcp"; } enum "jnpr-mode-change" { value 11; description "OUI Juniper mode-change"; } enum "jnpr-mode-change-error" { value 12; description "OUI Juniper mode-change-error"; } enum "jnpr-mode-change-ip-address" { value 13; description "OUI Juniper mode-change-ip-address"; } enum "jnpr-mode-change-image-name" { value 14; description "OUI Juniper mode-change-image-name"; } enum "jnpr-mode-change-ftp-login" { value 15; description "OUI Juniper mode-change-ftp-login"; } enum "jnpr-mode-change-image-md5" { value 16; description "OUI Juniper mode-change-image-md5"; } enum "jnpr-mode-change-ftp-server" { value 17; description "OUI Juniper mode-change-ftp-server"; } enum "port-vid" { value 18; description "OUI IEEE 802.1 port-vid"; } enum "port-protocol-vid" { value 19; description "OUI IEEE 802.1 port-procol-vid"; } enum "vlan-name" { value 20; description "OUI IEEE 802.1 vlan-name"; } enum "protocol-id" { value 21; description "OUI IEEE 802.1 protocol-id"; } enum "evb" { value 22; description "OUI IEEE 82.1QBG evb"; } enum "power-via-mdi-measurements" { value 23; description "OUI IEEE 802.3 power-via-mdi-measurements"; } enum "cloud-reach-event" { value 24; description "Cloud reachability event"; } enum "phone-home-active" { value 25; description "Phone-home active configuration"; } } ordered-by user; description "Select TLV(s) to be sent"; } leaf-list tlv-filter { junos:must "(!(".. tlv-select"))"; junos:must-message "tlv-select or tlv-filter is allowed, not both."; type enumeration { enum "all" { value 0; description "Filter all non mandatory TLVs"; } enum "port-description" { value 1; description "Port Description"; } enum "system-name" { value 2; description "System Name"; } enum "system-description" { value 3; description "System Description"; } enum "system-capabilities" { value 4; description "System Capabilities"; } enum "management-address" { value 5; description "Management Address"; } enum "mac-phy-config-status" { value 6; description "OUI IEEE 802.3 mac-phy-config-status"; } enum "power-vi-mdi" { value 7; description "OUI IEEE 802.3 power-vi-mdi"; } enum "link-aggregation" { value 8; description "OUI IEEE 802.3 link-aggregation"; } enum "maximum-frame-size" { value 9; description "OUI IEEE 802.3 maximum-frame-size"; } enum "jnpr-chassis-serial" { value 10; description "OUI Juniper chassis-serial"; } enum "jnpr-vcp" { value 11; description "OUI Juniper vcp"; } enum "jnpr-mode-change" { value 12; description "OUI Juniper mode-change"; } enum "jnpr-mode-change-error" { value 13; description "OUI Juniper mode-change-error"; } enum "jnpr-mode-change-ip-address" { value 14; description "OUI Juniper mode-change-ip-address"; } enum "jnpr-mode-change-image-name" { value 15; description "OUI Juniper mode-change-image-name"; } enum "jnpr-mode-change-ftp-login" { value 16; description "OUI Juniper mode-change-ftp-login"; } enum "jnpr-mode-change-image-md5" { value 17; description "OUI Juniper mode-change-image-md5"; } enum "jnpr-mode-change-ftp-server" { value 18; description "OUI Juniper mode-change-ftp-server"; } enum "port-vid" { value 19; description "OUI IEEE 802.1 port-vid"; } enum "port-protocol-vid" { value 20; description "OUI IEEE 802.1 port-procol-vid"; } enum "vlan-name" { value 21; description "OUI IEEE 802.1 vlan-name"; } enum "protocol-id" { value 22; description "OUI IEEE 802.1 protocol-id"; } enum "evb" { value 23; description "OUI IEEE 802.1QBG evb"; } enum "power-via-mdi-measurements" { value 24; description "OUI IEEE 802.3 power-via-mdi-measurements"; } enum "cloud-reach-event" { value 25; description "Cloud reachability event"; } enum "phone-home-active" { value 26; description "Phone-home active configuration"; } } ordered-by user; description "Filter TLV(s) to be sent"; } leaf trap-notification { type enumeration { enum "enable" { value 0; description "Enable trap notification"; } enum "disable" { value 1; description "Disable trap notification"; } } default "enable"; description "To enable or disable for lldp-trap notification"; } } // list interface } // container lldp container lldp-med { presence "enable lldp-med"; description "LLDP Media Endpoint Discovery"; uses apply-advanced; leaf fast-start { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Discovery count for MED"; } list interface { key "name"; ordered-by user; description "Interface configuration"; leaf name { type string; } uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable LLDP"; } } // choice enable-disable container location { presence "enable location"; uses apply-advanced; choice location-type { container civic-based { presence "enable civic-based"; description "Postal address"; uses civic-address-elements; } // container civic-based leaf elin { type string; description "Emergency line identification (ELIN) string"; } case case_3 { } // case case_3 } // choice location-type } // container location leaf-list tlv-select { type enumeration { enum "med-capabilities" { value 0; description "OUI TIA med-capabilities"; } enum "network-policy" { value 1; description "OUI TIA network-policy"; } enum "location-id" { value 2; description "OUI TIA location-id"; } enum "ext-power-via-mdi" { value 3; description "OUI TIA ext-power-via-mdi"; } } ordered-by user; description "Select TLV(s) to be sent"; } leaf-list tlv-filter { junos:must "(!(".. tlv-select"))"; junos:must-message "tlv-select or tlv-filter is allowed, not both."; type enumeration { enum "all" { value 0; description "Filter all non mandatory TLVs"; } enum "med-capabilities" { value 1; description "OUI TIA med-capabilities"; } enum "network-policy" { value 2; description "OUI TIA network-policy"; } enum "location-id" { value 3; description "OUI TIA location-id"; } enum "ext-power-via-mdi" { value 4; description "OUI TIA ext-power-via-mdi"; } } ordered-by user; description "Filter TLV(s) to be sent"; } } // list interface leaf-list tlv-select { type enumeration { enum "med-capabilities" { value 0; description "OUI TIA med-capabilities"; } enum "network-policy" { value 1; description "OUI TIA network-policy"; } enum "location-id" { value 2; description "OUI TIA location-id"; } enum "ext-power-via-mdi" { value 3; description "OUI TIA ext-power-via-mdi"; } } ordered-by user; description "Select MED TLVs to be sent"; } leaf-list tlv-filter { junos:must "(!(".. tlv-select"))"; junos:must-message "tlv-select or tlv-filter is allowed, not both."; type enumeration { enum "all" { value 0; description "Filter all non mandatory TLVs"; } enum "med-capabilities" { value 1; description "OUI TIA med-capabilities"; } enum "network-policy" { value 2; description "OUI TIA network-policy"; } enum "location-id" { value 3; description "OUI TIA location-id"; } enum "ext-power-via-mdi" { value 4; description "OUI TIA ext-power-via-mdi"; } } ordered-by user; description "Filter MED TLVs to be sent"; } } // container lldp-med container igmp-snooping { description "IGMP snooping configuration"; uses juniper-default-ri-protocols-igmp-snooping; } // container igmp-snooping container mld-snooping { description "MLD snooping configuration"; uses juniper-default-ri-protocols-mld-snooping; } // container mld-snooping container openflow { description "OpenFlow protocol"; uses juniper-protocols-openflow; } // container openflow container ppp { description "Configure PPP process"; uses apply-advanced; container traceoptions { description "PPP trace options"; uses ppp-traceoptions-type; } // container traceoptions list monitor-session { key "session-name"; description "Monitor packet exchange for PPP session"; leaf session-name { type string; description "PPP session name"; } uses apply-advanced; } // list monitor-session } // container ppp container pppoe { junos:must "(!("forwarding-options hyper-mode"))"; junos:must-message "To configure pppoe, 'forwarding-options hyper-mode' should not be configured"; description "Configure PPPoE process"; uses apply-advanced; container traceoptions { description "PPPoE trace options"; uses pppoe-traceoptions-type; } // container traceoptions leaf pado-advertise { type empty; description "Enable PADO advertising of PPPoE Service-Names"; } } // container pppoe container sflow { presence "enable sflow"; description "SFLOW protocol"; uses apply-advanced; container traceoptions { description "Trace options for SFLOW"; 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 "configuration" { value 0; description "Trace sflow configuration"; } enum "rtsock" { value 1; description "Trace rtsock events"; } enum "interface" { value 2; description "Trace interface events"; } enum "client-server" { value 3; description "Trace sflow client-server events"; } enum "all" { value 4; description "Trace all sflow events"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container agent-id { description "Sflow agent id configuration"; leaf inet { type jt:ipv4addr; description "Sflow agent ipv4 address"; } } // container agent-id leaf polling-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600"; } } units "seconds"; default "20"; description "Interval between port statistics"; } container adaptive-sample-rate { description "Trigger adaptive sampling"; leaf sample-rate { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Sflow adaptive sampling rate configuration"; } leaf fallback { type empty; description "Enable fallback to previous adapted sample rates"; } leaf sample-limit-threshold { junos:must "(".. fallback")"; junos:must-message "Adaptive sample rate fallback must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Per FPC Sample limits in pps "; } } // container adaptive-sample-rate leaf inline-sampling { type empty; description "Enable inline sampling of packets"; } container sample-rate { description "Sampling rate"; uses apply-advanced; leaf ingress { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ingress direction"; } leaf egress { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Egress direction"; } } // container sample-rate container source-ip { description "Sflow agent id configuration"; leaf inet { type jt:ipv4addr; description "Sflow datagram source ipv4 address"; } } // container source-ip list collector { key "name"; max-elements 4; ordered-by user; description "SFLOW collector configuration"; leaf name { junos:must "(!(("protocols sflow source-ip $$" || "protocols sflow source-ip inet6 $$")))"; junos:must-message "sFlow collector address and source ip cannot be same"; type jt:ipaddr; description "Collector IP v4/v6 address"; } uses apply-advanced; leaf udp-port { type union { type uint16; type string { pattern "<.*>|$.*"; } } default "6343"; description "Collector UDP port"; } } // list collector list interfaces { key "name"; description "Enable SFLOW on this interface"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf polling-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600"; } } units "seconds"; description "Interval between port statistics"; } container sample-rate { description "Sampling rate"; uses apply-advanced; leaf ingress { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Ingress direction"; } leaf egress { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Egress direction"; } } // container sample-rate } // list interfaces leaf disable-sw-rate-limiter { type empty; description "Disable sw rate limiter"; } } // container sflow container protection-group { presence "enable protection-group"; description "Protection group"; uses juniper-protocols-protection-group; } // container protection-group 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 not allowed"; description "MVRP configuration"; uses juniper-protocols-mvrp; } // container mvrp container layer2-control { description "Global options for layer 2 protocols"; uses juniper-protocols-l2control; } // container layer2-control container rstp { description "Rapid Spanning Tree Protocol options"; uses juniper-protocols-stp; } // container rstp container mstp { description "Multiple Spanning Tree Protocol options"; 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"; description "VLAN Spanning Tree Protocol options"; uses juniper-protocols-vstp; } // container vstp container loop-detect { presence "enable loop-detect"; description "Layer2 Loop Detect on interface with non-IP L2 Multicast mac as destination mac"; uses apply-advanced; list interface { junos:must "(any ".. destination-mac <*>")"; junos:must-message "destination-mac is mandatory for enabling loop-detect"; key "name"; ordered-by user; description "Interface name to block Loop Detect PDUs on"; leaf name { type string; } uses apply-advanced; leaf disable { type empty; description "Disable loop detect feature on a port"; } } // list interface container enhanced { description "Enhanced loop detect configuration"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Name of interface"; leaf name { type string; } uses apply-advanced; leaf vlan-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "VLAN identifier for trunk interface"; } leaf loop-detect-action { type enumeration { enum "interface-down" { value 0; description "Interface down action"; } enum "laser-off" { value 1; description "Laser off action"; } } default "interface-down"; description "Action that needs to be taken"; } leaf transmit-interval { type enumeration { enum "1s" { value 0; } enum "10s" { value 1; } enum "1m" { value 2; } enum "10m" { value 3; } } default "1s"; description "Interval between loop-detect messages"; } leaf revert-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 300"; } } units "seconds"; default "0"; description "Interval after which action will be reverted"; } } // list interface } // container enhanced leaf destination-mac { type jt:mac-multicast; description "Destination non-IP L2 multicast mac to be used for transmitting Loop Detect PDUs"; } leaf transmit-interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "5 .. 3600"; } } units "seconds"; description "Loop Detect PDU TX interval in sec --default 30s"; } } // container loop-detect container uplink-failure-detection { description "Uplink failure detection configuration"; uses apply-advanced; container group { description "Uplink failure detection group"; uses apply-advanced; list ufd-group-name { key "name"; description "Uplink failure detection group name"; uses ufd-group-type; } // list ufd-group-name } // container group container traceoptions { description "Trace options for uplink failure detection"; 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 "interface" { value 1; description "Trace interface notifcation handlers of ufd"; } enum "dcd" { value 2; description "Trace ufdd interaction with dcd"; } enum "groups" { value 3; description "Trace uplink failure detection group handling"; } enum "all" { value 4; description "Trace everything"; } } } } // list flag } // container traceoptions container action { description "Define action on ufd group state change"; uses apply-advanced; leaf log { type empty; description "Log a message"; } } // container action } // container uplink-failure-detection } // grouping juniper-protocols 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 cfm-traceoptions { description "Trace options for connectivity fault management"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "configuration" { value 0; description "Trace configuration events"; } enum "routing-socket" { value 1; description "Trace routing socket events"; } enum "protocol" { value 2; description "Trace protocol processing events"; } enum "init" { value 3; description "Trace events related to protocol daemon start-up"; } enum "error" { value 4; description "Trace events related to catestrophic errors in daemon"; } enum "issu" { value 5; description "Trace ISSU related events"; } enum "all" { value 6; description "Trace everything"; } } } } // list flag } // grouping cfm-traceoptions grouping civic-address-elements { uses apply-advanced; leaf what { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 2"; } } default "1"; description "Type of address"; } leaf country-code { type string { length "2"; } description "Two-letter country code"; } list ca-type { key "name"; ordered-by user; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 255"; } } description "Address element type"; } uses apply-advanced; leaf ca-value { type string; description "Address element value"; } } // list ca-type } // grouping civic-address-elements grouping juniper-default-ri-protocols-igmp-snooping { description "IGMP snooping options"; uses apply-advanced; 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"; junos:must "((!(".. .. .. .. vlans ${vlan} vlan-id-list") && (!(".. .. .. .. vlans ${vlan} vxlan") || ".. .. .. .. protocols evpn")))"; junos:must-message "Snooping must be configured on specific vlans which is not vxlan enabled (not on vlan list)"; type string; description "VLAN name"; } 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 "route" { value 6; description "Trace routing information"; } 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 "task" { value 10; description "Trace routing protocol task processing"; } enum "timer" { value 11; description "Trace routing protocol timer processing"; } enum "all" { value 12; 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 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"))"; junos:must-message "With qualified-learning source-address should be configured under qualified 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 interface"; } 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 interface to be treated as host-side interface"; } leaf group-limit { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Maximum number of groups an interface can join"; } 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 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"; } 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"; 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 interface"; } 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 interface to be treated as host-side interface"; } leaf group-limit { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Maximum number of groups an interface can join"; } 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 qualified-vlan } // list vlan 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"; } 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 { 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 family bridge interface-mode" && !(any "routing-instances <*> interface $$")))"; junos:must-message "interface options can be specified for access/trunk interfaces in this routing instance only"; 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 } // grouping juniper-default-ri-protocols-igmp-snooping grouping juniper-default-ri-protocols-mld-snooping { description "MLD snooping options"; uses apply-advanced; 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"; junos:must "((!(".. .. .. .. vlans ${vlan} vlan-id-list") && (!(".. .. .. .. vlans ${vlan} vxlan") || ".. .. .. .. protocols evpn")))"; junos:must-message "Snooping must be configured on specific vlans which is not vxlan enabled(not on vlan list)"; type string; description "VLAN name"; } 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 (MLDv1 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"; } container proxy { presence "enable proxy"; description "Enable proxy mode"; uses apply-advanced; leaf source-address { junos:must "(!(".. .. .. .. .. vlans ${vlan} 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"; } } // 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 { type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Maximum number of groups an interface can join"; } 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 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"; } container l2-querier { 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"; 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 { type empty; description "Enable interfaces to be treated as host-side interfaces"; } leaf group-limit { type union { type uint16; type string { pattern "<.*>|$.*"; } } description "Maximum number of groups an interface can join"; } 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 qualified-vlan } // list vlan 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"; } 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 { 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 family bridge interface-mode" && !(any "routing-instances <*> interface $$")))"; junos:must-message "interface options can be specified for access/trunk interfaces in this routing instance only"; 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 } // grouping juniper-default-ri-protocols-mld-snooping 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-ancp { uses apply-advanced; container traceoptions { description "Trace options for ANCP"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "config" { value 0; description "Trace config events"; } enum "cos" { value 1; description "Trace CoS events"; } enum "routing-socket" { value 2; description "Trace routing-socket events"; } enum "packet" { value 3; description "Trace ANCP packet Transmit/Receive"; } enum "protocol" { value 4; description "Trace protocol events"; } enum "process" { value 5; description "Trace process internals"; } enum "startup" { value 6; description "Trace ANCP startup events/flow"; } enum "session" { value 7; description "Trace connection events/sessions"; } enum "general" { value 8; description "Trace general flow"; } enum "restart" { value 9; description "Trace process restart flow"; } enum "subscriber" { value 10; description "Trace subscriber events"; } enum "timer" { value 11; description "Trace timer processing"; } enum "all" { value 12; description "Trace everything"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions container qos-adjust { presence "enable qos-adjust"; description "Enable QoS adjust for interfaces and interface-sets"; uses apply-advanced; leaf sdsl-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set SDSL byte adjust value"; } leaf sdsl-overhead-adjust { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "80 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set SDSL overhead adjusted"; } leaf vdsl-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set VDSL byte adjust value"; } leaf vdsl-overhead-adjust { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "80 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set VDSL overhead adjusted"; } leaf vdsl2-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set VDSL2 byte adjust value"; } leaf vdsl2-overhead-adjust { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "80 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set VDSL2 overhead adjusted"; } leaf adsl-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set ADSL byte adjust value"; } leaf adsl2-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set ADSL2 byte adjust value"; } leaf adsl2-plus-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set ADSL-PLUS byte adjust value"; } leaf other-bytes { type union { type string { pattern "<.*>|$.*"; } type int32 { range "-100 .. 100"; } } units "bytes"; default "0"; status deprecated; description "Set OTHER byte adjust value"; } leaf other-overhead-adjust { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "80 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set OTHER overhead adjusted"; } } // container qos-adjust leaf pre-ietf-mode { type empty; description "Enable backward compatibility mode"; } leaf maximum-discovery-table-entries { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100000"; } } description "Maximum number of discovery table entries per neighbor"; } leaf adjacency-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 25"; } } description "Set adjacency timer in seconds"; } leaf maximum-helper-restart-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "45 .. 600"; } } units "seconds"; description "Set maximum helper restart timer"; } leaf qos-adjust-adsl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set ADSL QoS adjustment factor"; } leaf qos-adjust-adsl2 { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set ADSL2 QoS adjustment factor"; } leaf qos-adjust-adsl2-plus { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set ADSL2+ QoS adjustment factor"; } leaf qos-adjust-vdsl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set VDSL QoS adjustment factor"; } leaf qos-adjust-vdsl2 { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set VDSL2 QoS adjustment factor"; } leaf qos-adjust-sdsl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set SDSL QoS adjustment factor"; } leaf qos-adjust-other { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 100"; } } units "percent"; default "100"; status deprecated; description "Set OTHER QoS adjustment factor"; } leaf gsmp-syn-wait { type empty; description "Enable partition ID learning"; } leaf gsmp-syn-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; default "30"; description "Set partition ID learning timeout"; } leaf adjacency-loss-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1800"; } } units "seconds"; default "0"; description "Audit duration upon adjacency loss"; } container interfaces { description "ANCP interface config options"; uses apply-advanced; list interface-set { key "name"; description "ANCP interface-set specific options"; leaf name { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Name of the interface set"; } uses apply-advanced; leaf access-identifier { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Subscriber specific access identifier information"; } leaf neighbor { type jt:ipaddr; status deprecated; description "Neighbor IP address"; } } // list interface-set list interface { key "name"; uses ancp_interfaces_type; } // list interface } // container interfaces list neighbor { key "name"; description "ANCP neighbor config options"; leaf name { type jt:ipaddr; description "IP address of neighbor"; } uses apply-advanced; leaf discovery-mode { type empty; status deprecated; description "Enable topology discovery"; } choice ietf-mode-option { leaf pre-ietf-mode { type empty; description "Enable backward compatibility mode"; } leaf ietf-mode { type empty; description "Enable IETF mode"; } } // choice ietf-mode-option leaf adjacency-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 25"; } } description "Set adjacency timer in seconds"; } leaf maximum-discovery-table-entries { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 100000"; } } description "Maximum number of discovery table entries"; } container auto-configure-trigger { presence "enable auto-configure-trigger"; description "Auto-configure trigger support"; uses apply-advanced; leaf interface { junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } } } // container auto-configure-trigger leaf adjacency-loss-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1800"; } } units "seconds"; description "Audit duration upon adjacency loss"; } } // list neighbor } // grouping juniper-protocols-ancp grouping ancp_interfaces_type { description "Physical interface"; leaf name { junos:must "("interfaces $$")"; junos:must-message "Interface must be defined"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } } uses apply-advanced; leaf access-identifier { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Subscriber specific access identifier information"; } leaf neighbor { type jt:ipaddr; status deprecated; description "Neighbor IP address"; } leaf overhead-accounting { type empty; status deprecated; description "Enable overhead accounting on per ACI basis"; } } // grouping ancp_interfaces_type 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-bgpmcast { description "BGP Multicast configuration"; uses apply-advanced; container traceoptions { description "Trace options for BGP Multicast"; 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"; } } } 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 } // grouping juniper-protocols-bgpmcast grouping juniper-protocols-bridge { uses apply-advanced; container traceoptions { description "Trace options for Layer 2 address 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 "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 "routing-instance" { value 6; description "Routing instance operations"; } enum "bridge-interface" { value 7; description "Interface bridge operations"; } enum "learning-domain" { value 8; description "Learning domain operations"; } enum "ipc" { value 9; description "Inter-process communications operations"; } enum "mac-learning" { value 10; description "MAC address learning operations"; } enum "initialization" { value 11; description "Initialization operations"; } enum "flood-next-hop" { value 12; description "Flood next hop operations"; } enum "irb" { value 13; description "Integrated routing and bridging operations"; } enum "vpls-ping" { value 14; description "VPLS ping operations"; } enum "vpls-loop-prev" { value 15; description "VPLS loop prevention"; } enum "logical-system" { value 16; description "Logical system operations"; } enum "bmac-next-hop" { value 17; description "Backbone Mac Next hop operations "; } enum "bridge-bmac-next-hop" { value 18; description "Bmac Next hop bridge operations"; } enum "isid" { value 19; description "I-Tagged Service ID"; } enum "mc-ae" { value 20; description "Multi-chassis AE"; } enum "kack" { value 21; description "Kernel-acknowledgment"; } enum "storm-control" { value 22; description "Storm-control"; } enum "redundant-trunk-group" { value 23; description "Redundant trunk group"; } enum "unknown-unicast-forwarding" { value 24; description "Trace unknown unicast forwarding events"; } enum "vxlan" { value 25; description "VXLAN"; } enum "l2-license" { value 26; description "L2 license trace"; } enum "telemetry" { value 27; description "Telemetry"; } enum "network-isolation" { value 28; description "Network isolation detection"; } enum "all" { value 29; description "All operations"; } } } } // list flag container in-memory-debug { presence "enable in-memory-debug"; description "Enable trace parameters in the memory"; } // container in-memory-debug } // container traceoptions container global-mac-move { presence "enable global-mac-move"; description "Enable mac move related options at global level"; uses apply-advanced; leaf notification-time { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Periodical time interval in secs during which MAC move notification occurs"; } leaf threshold-time { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Time during which if certain number of MAC moves happen warrant recording"; } leaf reopen-time { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Time after which a blocked interface is reopened"; } leaf threshold-count { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Count of MAC moves which warrant recording when happen in certain time"; } container traceoptions { description "Enable logging for the MAC moves"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file } // container traceoptions leaf log { type empty; description "Syslog all the MAC moves as stored in the mac-move-buffer"; } leaf disable-action { type empty; description "Disable mac move action globally"; } list exclusive-mac { key "name"; ordered-by user; description "MAC addresses to be excluded in mac-move-limit or in VPLS loop prevention algorithm"; leaf name { type jt:mac-addr-prefix; description "Source MAC address"; } uses apply-advanced; } // list exclusive-mac } // container global-mac-move leaf global-mac-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32; } units "seconds"; description "System level MAC table aging time"; } leaf global-mac-ip-table-aging-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 1000000"; } } units "seconds"; description "System level MAC+IP table aging time"; } leaf mclag-arpreq-sync { type empty; description "Enable syncing ARP REQ packets to peer MCLAG PE"; } leaf global-mac-pinning-discard-notification-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 86400"; } } units "seconds"; description "Set interval for MAC Pinning discard notification"; } container global-ctx-limit { presence "enable global-ctx-limit"; description "Debug context history limit"; uses apply-advanced; leaf ctx-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 5000000"; } } description "Debug context history limit"; } } // container global-ctx-limit container global-mac-limit { presence "enable global-mac-limit"; description "System level MAC limit options"; uses apply-advanced; leaf mac-limit { type union { type string { pattern "<.*>|$.*"; } type uint64; } description "System level MAC limit"; } leaf packet-action { type enumeration { enum "drop" { value 0; description "Enable packet-action drop when MAC limit is reached"; } } } } // container global-mac-limit container global-mac-ip-limit { presence "enable global-mac-ip-limit"; description "System level MAC+IP limit options"; uses apply-advanced; leaf mac-ip-limit { type union { type string { pattern "<.*>|$.*"; } type uint64 { range "20 .. 1048575"; } } description "System level MAC+IP limit"; } } // container global-mac-ip-limit leaf global-mac-statistics { type empty; description "Enable MAC address statistics at system level"; } leaf global-no-mac-learning { type empty; description "Disable dynamic MAC address learning at system level"; } leaf global-no-hw-mac-learning { type empty; description "Disable hardware MAC-address learning at system level"; } leaf global-no-control-mac-aging { type empty; description "Disable control MAC-address aging from software"; } leaf mclag-arp-nd-sync { type empty; description "Arp and ND entry sync from peer device."; } container crb-proxy-mac { description "Configure proxy MAC address to be used in MAC-IP refresh"; uses apply-advanced; container family { description "Address family"; uses apply-advanced; container inet { description "Inet version 4 family"; uses apply-advanced; leaf mac-address { type jt:mac-unicast; description "Proxy MAC address"; } } // container inet container inet6 { description "Inet version 6 family"; uses apply-advanced; leaf mac-address { type jt:mac-unicast; description "Proxy MAC address"; } } // container inet6 } // container family } // container crb-proxy-mac } // grouping juniper-protocols-bridge grouping juniper-protocols-dot1x { uses apply-advanced; container traceoptions { description "Trace options for 802.1X"; 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 "dot1x-debug" { junos:must "(!("protocols dot1x traceoptions flag dot1x-event"))"; junos:must-message "Can not configure dot1x-event with dot1x-debug flag"; value 0; description "Trace dot1x events"; } enum "parse" { value 1; description "Trace configuration parsing"; } enum "esw-if" { junos:must "(!("protocols dot1x traceoptions flag dot1x-ipc"))"; junos:must-message "Can not configure dot1x-ipc with esw-if flag"; value 2; description "Trace ESW Interactions"; } enum "eapol" { value 3; description "Trace EAPOL Transmit/Receive"; } enum "config-internal" { value 4; description "Trace configuration internals"; } 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 "task" { value 8; description "Trace routing protocol task processing"; } enum "timer" { value 9; description "Trace routing protocol task timer processing"; } enum "vlan" { value 10; description "Trace VLAN transactions"; } enum "all" { value 11; description "Trace everything"; } enum "dot1x-ipc" { value 12; description "Trace dot1x IPC interactions"; } enum "dot1x-event" { value 13; description "Trace dot1x events"; } enum "iccp" { value 14; description "Trace iccp events"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf ssl-certificate-path { type string; default "/var/tmp/"; description "Load SSL certificates for authentication"; } container authenticator { presence "enable authenticator"; description "802.1X authenticator options"; uses apply-advanced; leaf authentication-profile-name { junos:must "("access profile $$")"; junos:must-message "Access profile name must be defined in the [edit access profile] hierarchy"; type string { length "1 .. 63"; } description "Access profile name to use for authentication"; } leaf no-mac-table-binding { type empty; description "Disable association between mac table and dot1x"; } leaf ip-mac-session-binding { junos:must "(".. no-mac-table-binding")"; junos:must-message "no-mac-table-binding must be defined in the [edit protocols dot1x authenticator] hierarchy"; type empty; description "DHCP or DHCPv6 or SLAAC snooping checking for mac ageout"; } leaf dynamic-vlan-cleanup-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 86400"; } } units "seconds"; description "Dynamic vlan cleanup interval"; } container radius-reachability { presence "enable radius-reachability"; description "Enable radius-rechability feature"; uses apply-advanced; leaf query-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "20 .. 65535"; } } units "seconds"; default "120"; description "Query period interval"; } } // container radius-reachability container radius-options { presence "enable radius-options"; description "Info sent to radius server"; uses apply-advanced; leaf add-interface-text-description { type empty; description "Appends interface text description to NAS-Port-Id"; } choice vlan { leaf use-vlan-name { type empty; description "Vlan name"; } leaf use-vlan-id { type empty; description "Vlan id"; } } // choice vlan } // container radius-options list static { key "name"; ordered-by user; description "Static MAC configuration needed to bypass 802.1X"; leaf name { type jt:mac-addr-prefix; description "MAC addresses to bypass authentication"; } uses apply-advanced; leaf vlan-assignment { junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "vlan with vlan-id-list not supported under static MAC vlan-assignment"; junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))"; junos:must-message "vlan assigned is not configured"; type string; description "VLAN name or 802.1q tag for the MAC address"; } leaf interface { junos:must "(".. .. interface $$ supplicant multiple")"; junos:must-message "Static MAC cannot be configured on interface in single or single-secure mode"; junos:must "((!("interfaces ${interface} vlan-tagging") || (!("interfaces ${interface} flexible-vlan-tagging") || !("interfaces ${interface} stacked-vlan-tagging"))))"; junos:must-message "Cannot configure dot1x on this interface since flexible-vlan-tagging / vlan-tagging / stacked-vlan-tagging is configured"; junos:must "(("interfaces $$-IFL family ethernet-switching" || "interfaces $$-IFL family bridge"))"; junos:must-message "Interface must be defined in the interfaces hierarchy with family ethernet-switching/bridge"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface on which authentication is bypassed"; } } // list static list interface { key "name"; description "802.1X interface specific options"; leaf name { junos:must "(!("switch-options interface $$ no-mac-learning"))"; junos:must-message "no-mac-learning can not be configured on dot1x enabled interface"; junos:must "(!("switch-options interface $$ persistent-learning"))"; junos:must-message "persistent learning can not be configured on dot1x enabled interface"; type string; } uses apply-advanced; leaf ignore-port-bounce { type empty; description "To ignore the port-bounce request received from RADIUS server"; } leaf-list authentication-order { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; type enumeration { enum "dot1x" { value 0; description "Dot1x mode"; } enum "mac-radius" { junos:must "(!("protocols dot1x supplicant interface ${interface}"))"; junos:must-message "Must not configure supplicant and mac-radius on same interface"; value 1; description "Mac radius mode"; } enum "captive-portal" { junos:must "(!("system phone-home"))"; junos:must-message "Can't configure captive-portal along with Phone-home. Delete phone-home config to enable captive-portal"; junos:must "(!("protocols dot1x supplicant interface ${interface}"))"; junos:must-message "Must not configure supplicant and captive-portal on same interface"; junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))"; junos:must-message "Must not configure captive-portal on trunk interface"; value 2; description "Captive portal mode"; } } ordered-by user; description "Flexible authentication order"; } leaf disable { type empty; description "Disable 802.1X on this interface"; } leaf supplicant { type enumeration { enum "single" { value 0; description "Allow multiple clients; authenticate first client only"; } enum "single-secure" { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; value 1; description "Allow and authenticate only a single client"; } enum "multiple" { junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))"; junos:must-message "Must not configure multi supplicant on trunk interface"; junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; value 2; description "Allow multiple clients; authenticate each individually"; } } default "single"; description "Set supplicant mode for this interface"; } leaf retries { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10"; } } description "Number of retries after which port is placed into wait state"; } leaf quiet-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } units "seconds"; description "Time to wait after an authentication failure"; } leaf transmit-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Interval before retransmitting initial EAPOL PDUs"; } container multi-domain { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; junos:must "(".. supplicant multiple")"; junos:must-message "multi-domain feature cannot be configured with single or single-secure mode"; presence "enable multi-domain"; description "Enable multi domain authentication"; uses apply-advanced; leaf packet-action { type enumeration { enum "drop-and-log" { value 0; description " Drop the client and generate the log message"; } enum "shutdown" { value 1; description "Disable port for excessive client authentication"; } } default "drop-and-log"; description "Set packet action for this interface"; } leaf max-data-session { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1000"; } } description "Data session limit in multi domain authentication"; } leaf recovery-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "60 .. 3600"; } } units "seconds"; description "Multi domain recovery timeout"; } } // container multi-domain container mac-radius { junos:must "(!("protocols dot1x supplicant interface ${interface}"))"; junos:must-message "Must not configure supplicant and mac-radius on same interface"; junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; presence "enable mac-radius"; description "Enable MAC-RADIUS"; uses apply-advanced; leaf restrict { type empty; description "Bypass dot1x authentication, use MAC RADIUS only"; } leaf flap-on-disconnect { type empty; description "Reset an interface on receiving a disconnect request"; } container authentication-protocol { description "Set mac-radius authentication method"; uses apply-advanced; choice protocols { leaf eap-md5 { type empty; description "Authentication protocol EAP-MD5"; } leaf pap { type empty; description "Authentication protocol PAP"; } container eap-peap { presence "enable eap-peap"; description "Authentication protocol EAP-PEAP"; uses apply-advanced; leaf resume { type empty; description "Enable resume functionality for faster authentication"; } } // container eap-peap } // choice protocols } // container authentication-protocol } // container mac-radius choice reauthentication-mode { leaf no-reauthentication { type empty; description "Disable reauthentication"; } leaf reauthentication { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Reauthentication interval"; } } // choice reauthentication-mode leaf supplicant-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; description "Time to wait for a client response"; } leaf server-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 60"; } } units "seconds"; description "Authentication server timeout interval"; } leaf maximum-requests { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of EAPOL RequestIDs to send before timing out"; } leaf request-retry-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 10"; } } description "Number of requests to send before timing out"; } leaf guest-vlan { junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "vlan with vlan-id-list not supported under guest-vlan"; junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))"; junos:must-message "vlan assigned is not configured"; junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))"; junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk"; junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; type string; description "VLAN name or 802.1q tag for unauthenticated or non-responsive hosts"; } container server-reject-vlan { junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))"; junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk"; junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; description "VLAN name or 802.1q tag for authentication rejected clients"; leaf vlan-name { junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "vlan with vlan-id-list not supported under server-reject-vlan"; junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))"; junos:must-message "vlan assigned is not configured"; type string; description "VLAN name or VLAN Tag (1..4095)"; } leaf block-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "120 .. 65535"; } } units "seconds"; description "Interval for authenticator to ignore the EAP-Start packets."; } leaf eapol-block { type empty; description "Force the authenticator to ignore EAPOL-Start packets."; } } // container server-reject-vlan container eapol-block { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; description "Force the authenticator to ignore EAPOL-Start packets"; uses apply-advanced; container server-fail { junos:must "(".. .. server-fail")"; junos:must-message "server-fail action must be configured"; presence "enable server-fail"; description "Block EAPOL-Start during RADIUS Timeout"; uses apply-advanced; leaf block-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "120 .. 65535"; } } units "seconds"; description "Interval for authenticator to ignore the EAP-Start packets."; } } // container server-fail container mac-radius { presence "enable mac-radius"; description "Block EAPOL-Start when client is authenticated in mac-radius mode"; } // container mac-radius container captive-portal { presence "enable captive-portal"; description "Block EAPOL-Start when client is authenticated in captive-portal mode"; } // container captive-portal } // container eapol-block leaf lldp-med-bypass { junos:must "(".. supplicant multiple")"; junos:must-message "lldp-med-bypass cannot be configured on interface in single or single-secure mode"; type empty; description "Bypass dot1x authentication, use lldp-med based authentication"; } container server-fail { description "Action to be taken when server is inaccessible"; choice server-fail-options { leaf deny { type empty; description "Force client authentication to fail"; } leaf permit { type empty; description "Force client authentication to succeed"; } leaf vlan-name { junos:must "(!("vlans $$ vlan-id-list"))"; junos:must-message "vlan with vlan-id-list not supported under server-fail vlan"; junos:must "(("vlans $$" || any "vlans <*> vlan-id $$"))"; junos:must-message "vlan assigned is not configured"; junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))"; junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk"; junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; type string; description "VLAN name or 802.1q tag for unreachable servers"; } case case_4 { } // case case_4 leaf use-cache { type empty; description "Use the previous state of the client"; } } // choice server-fail-options } // container server-fail container server-fail-voip { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; junos:must "((".. server-fail " && !(".. server-fail deny")))"; junos:must-message "'server-fail permit' or 'vlan-name' or 'use-cache' must be configured"; description "Action to be taken for VOIP client when server is inaccessible"; choice server-fail-options { leaf deny { type empty; description "Force VoIP client authentication to fail"; } leaf permit { type empty; description "Force VoIP client authentication to succeed"; } leaf vlan-name { junos:must "(!("interfaces ${interface} family ethernet-switching interface-mode trunk"))"; junos:must-message "Must not configure on this interface since the interface-mode is defined as trunk"; type string; description "Configured VoIP VLAN name or 802.1q tag for unreachable servers"; } leaf use-cache { type empty; description "Use the previous state of the VoIP client"; } } // choice server-fail-options } // container server-fail-voip leaf redirect-url { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; junos:must "((!("interfaces ${interface} family ethernet-switching interface-mode trunk") && !("interfaces ${interface} family bridge interface-mode trunk")))"; junos:must-message "Must not configure redirect-url on this interface since the interface-mode is defined as trunk"; type string { junos:posix-pattern "^((http)|(https))://"; junos:pattern-message "URL starts with http or https"; length "10 .. 247"; } description "CWA redirect URL to be used for unauthenticated users"; } leaf no-tagged-mac-authentication { junos:must "((!("interfaces ${interface} family inet") && !("interfaces ${interface} family inet6")))"; junos:must-message "Cannot be configured on layer-3 intefaces"; junos:must "("interfaces ${interface} family ethernet-switching interface-mode trunk")"; junos:must-message "This option is supported only on trunk interface"; junos:must "(!(".. supplicant single-secure"))"; junos:must-message "Cannot be configured on single-secure dot1x interface"; junos:must "(!(".. supplicant multiple"))"; junos:must-message "Cannot be configured on multiple supplicant dot1x interface"; type empty; description "Don't allow tagged mac for radius authentication"; } leaf retain-mac-aged-session { type empty; description "Retain mac aged out session"; } } // list interface } // container authenticator } // grouping juniper-protocols-dot1x grouping juniper-protocols-esis { uses apply-advanced; choice enable-disable { leaf disable { type empty; description "Disable ES-IS"; } } // choice enable-disable container traceoptions { description "Trace options for ES-IS"; uses apply-advanced; container file { description "Trace file options"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf replace { type empty; status deprecated; description "Replace trace file rather than appending to it"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "10"; description "Maximum number of trace files"; } leaf no-stamp { type empty; status deprecated; description "Do not timestamp trace file"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice } // container file list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "error" { value 0; description "Trace errored packets"; } enum "esh" { value 1; description "Trace end system hello packets"; } enum "ish" { value 2; description "Trace intermediate system hello packets"; } enum "graceful-restart" { value 3; description "Trace graceful restart events"; } enum "route" { value 4; description "Trace routing information"; } enum "normal" { value 5; description "Trace normal events"; } enum "general" { value 6; description "Trace general events"; } enum "state" { value 7; description "Trace state transitions"; } enum "policy" { value 8; description "Trace policy processing"; } enum "task" { value 9; description "Trace routing protocol task processing"; } enum "timer" { value 10; description "Trace routing protocol timer processing"; } enum "all" { value 11; description "Trace everything"; } } } leaf send { type empty; description "Trace transmitted packets"; } leaf receive { type empty; description "Trace received packets"; } leaf detail { type empty; description "Trace detailed information"; } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Preference of routes"; } container graceful-restart { description "ES-IS graceful restart options"; choice enable-disable { leaf disable { type empty; description "Disable graceful restart"; } } // choice enable-disable leaf restart-duration { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "30 .. 300"; } } units "seconds"; description "Maximum time for graceful restart to finish"; } } // container graceful-restart list interface { key "name"; description "Interface configuration"; leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Time after which neighbors think the interface is down"; } leaf end-system-configuration-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } units "seconds"; description "Suggested end system configuration timer"; } choice enable-disable { leaf disable { type empty; description "Disable ES-IS on this interface"; } } // choice enable-disable } // list interface } // grouping juniper-protocols-esis grouping juniper-protocols-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-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-l2control { uses apply-advanced; container traceoptions { description "Global tracing options for STP"; 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 "normal" { value 3; description "Trace normal events"; } enum "general" { value 4; description "Trace general events"; } enum "state" { value 5; description "Trace state transitions"; } enum "task" { value 6; description "Trace routing protocol task processing"; } enum "timer" { value 7; description "Trace routing protocol task timer processing"; } enum "ppmlite" { value 8; description "Trace libppmlite processing"; } enum "all" { value 9; description "Trace everything"; } } } leaf disable { type empty; description "Disable this trace flag"; } } // list flag } // container traceoptions leaf nonstop-bridging { junos:must "("chassis redundancy graceful-switchover")"; junos:must-message "Graceful switchover needs to be configured"; type empty; description "Enable nonstop operation"; } container bpdu-block { presence "enable bpdu-block"; description "Block BPDU on interface (BPDU Protect)"; uses apply-advanced; list interface { key "name"; ordered-by user; description "Interface name to block BPDU on"; leaf name { type string; } uses apply-advanced; leaf disable { type empty; description "Disable bpdu-block on a port"; } leaf drop { junos:must "((((!("protocols rstp interface ${interface}") && !("protocols rstp interface all")) || "protocols rstp interface ${interface} disable") && ((((!("protocols vstp interface ${interface}") && !("protocols vstp interface all")) && (!("protocols vstp vlan all interface all") && (!(any "protocols vstp vlan <*> interface ${interface}") && !(any "protocols vstp vlan <*> interface all")))) || "protocols vstp interface ${interface} disable") && ((!("protocols mstp interface ${interface}") && !("protocols mstp interface all")) || "protocols mstp interface ${interface} disable"))))"; junos:must-message "Cannot configure bpdu-block with xSTP protocol"; type empty; description "Drop xSTP BPDUs"; } } // list interface leaf disable-timeout { type union { type string { pattern "<.*>|$.*"; } type int32 { range "10 .. 3600"; } } units "seconds"; description "Disable timeout for BPDU Protect"; } } // container bpdu-block container mac-rewrite { description "Mac rewrite functionality"; uses apply-advanced; list interface { key "name"; ordered-by user; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } } uses apply-advanced; leaf enable-all-ifl { type empty; description "Enable tunneling for all the IFLs under the interface"; } container protocol { presence "enable protocol"; description "Protocols for which mac rewrite need to be enabled"; uses apply-advanced; container stp { presence "enable stp"; description "Enable mac rewrite for STP"; } // container stp container vtp { presence "enable vtp"; description "Enable mac rewrite for VTP"; } // container vtp container cdp { presence "enable cdp"; description "Enable mac rewrite for CDP"; } // container cdp container pvstp { presence "enable pvstp"; description "Enable mac rewrite for PVSTP+"; } // container pvstp } // container protocol } // list interface } // container mac-rewrite } // grouping juniper-protocols-l2control 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-lmp { uses apply-advanced; list te-link { key "name"; ordered-by user; description "Traffic engineering link"; leaf name { type string; description "Name of TE link"; } uses apply-advanced; leaf local-address { junos:must "(!(".. remote-address $$"))"; junos:must-message "Local and remote addresses of the TE link must be different"; junos:must "(".. remote-address")"; junos:must-message "Remote address of the TE link must be configured"; type jt:ipaddr; description "Address of the local end of the link"; } leaf remote-address { junos:must "(!(".. local-address $$"))"; junos:must-message "Local and remote addresses of the TE link must be different"; junos:must "(".. local-address")"; junos:must-message "Local address of the TE link must be configured"; type jt:ipaddr; description "Address of the remote end of the link"; } leaf remote-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Link ID for the remote end of the link"; } leaf te-metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Traffic engineering metric of the link"; } choice enable-disable { leaf disable { type empty; description "Disable TE link"; } } // choice enable-disable container ethernet-vlan { presence "enable ethernet-vlan"; description "TE link used for setup of L2 VLAN LSP"; uses apply-advanced; leaf-list vlan-id-range { type jt:vlan-range; max-elements 1; description "VLAN id"; } } // container ethernet-vlan choice resource-option { list interface { key "name"; ordered-by user; description "Member interface of TE link"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; leaf local-address { junos:must "(!(".. remote-address $$"))"; junos:must-message "Local and remote addresses of the resource must be different"; junos:must "(".. remote-address")"; junos:must-message "Remote address of the resource must be configured"; type jt:ipaddr; description "Local address of the resource"; } leaf remote-address { junos:must "(!(".. local-address $$"))"; junos:must-message "Local and remote addresses of the resource must be different"; junos:must "(".. local-address")"; junos:must-message "Local address of the resource must be configured"; type jt:ipaddr; description "Remote address of the resource"; } leaf remote-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Interface ID for the remote end of the resource"; } choice enable-disable { leaf disable { type empty; description "Disable resource on this TE link"; } } // choice enable-disable } // list interface list label-switched-path { key "name"; max-elements 1; ordered-by user; description "Member forwarding adjacency LSP of TE link"; leaf name { type string; description "Name of label-switched path"; } uses apply-advanced; leaf local-address { junos:must "(!(".. remote-address $$"))"; junos:must-message "Local and remote addresses of the resource must be different"; junos:must "(".. remote-address")"; junos:must-message "Remote address of the resource must be configured"; type jt:ipaddr; description "Local address of the resource"; } leaf remote-address { junos:must "(!(".. local-address $$"))"; junos:must-message "Local and remote addresses of the resource must be different"; junos:must "(".. local-address")"; junos:must-message "Local address of the resource must be configured"; type jt:ipaddr; description "Remote address of the resource"; } leaf remote-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4294967295"; } } description "Interface ID for the remote end of the resource"; } choice enable-disable { leaf disable { type empty; description "Disable resource on this TE link"; } } // choice enable-disable } // list label-switched-path } // choice resource-option } // list te-link list peer { key "name"; ordered-by user; description "Define a network or LMP peer"; leaf name { type string; description "Name of peer"; } uses apply-advanced; leaf address { type jt:ipaddr; description "Address of peer"; } container lmp-protocol { presence "enable lmp-protocol"; description "LMP protocol attributes"; uses apply-advanced; leaf hello-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "150 .. 21845"; } } units "milliseconds"; description "Interval between Hello messages"; } leaf hello-dead-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "500 .. 65535"; } } units "milliseconds"; description "Delay for control channel shutdown when no Hello received"; } leaf retransmission-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "500 .. 300000"; } } units "milliseconds"; description "Minimum time before retransmitting a message"; } leaf retry-limit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3 .. 1000"; } } description "Number of times to retransmit a message"; } leaf passive { type empty; description "Do not send Config messages to peer"; } } // container lmp-protocol leaf-list control-channel { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } ordered-by user; description "Control channel interfaces by priority"; } list lmp-control-channel { junos:must "(!(".. control-channel"))"; junos:must-message "control-channel and lmp-control-channel are mutually exclusive"; key "name"; ordered-by user; description "Control channel IDs"; uses lmp_control_channel_type; } // list lmp-control-channel leaf-list te-link { type string; ordered-by user; description "List of TE links managed by this peer"; } } // list peer container traceoptions { description "LMP 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 "init" { value 0; description "Trace initialization events"; } enum "show" { value 1; description "Trace show command servicing"; } enum "route-socket" { value 2; description "Trace route-socket events"; } enum "parse" { value 3; description "Trace parser processing"; } enum "process" { value 4; description "Trace general configuration processing"; } enum "server" { value 5; description "Trace server processing"; } enum "routing" { value 6; description "Trace routing protocols interworking"; } enum "packets" { value 7; description "Trace packet processing"; } enum "hello-packets" { value 8; description "Trace hello packet processing"; } enum "state" { value 9; description "Trace state transitions"; } enum "nsr-synchronization" { value 10; description "Trace mirror and nsr transitions"; } enum "all" { value 11; description "Trace everything"; } } } leaf send { type empty; status deprecated; description "Trace transmitted packets"; } leaf receive { type empty; status deprecated; description "Trace received packets"; } leaf detail { type empty; status deprecated; description "Trace detailed information"; } leaf disable { type empty; status deprecated; description "Disable this trace flag"; } } // list flag } // container traceoptions } // grouping juniper-protocols-lmp 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 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-openflow { uses apply-advanced; list switch { key "name"; max-elements 1; ordered-by user; description "OpenFlow switch"; leaf name { type string { junos:posix-pattern "^[[:alnum:]._-]+$"; junos:pattern-message "Must be a string of alphanumericals, dashes or underscores"; length "1 .. 64"; } description "Switch name"; } uses apply-advanced; container default-action { description "Action for packets that not have a matching flow entry"; uses apply-advanced; choice drop-pktin { leaf drop { type empty; description "Drop all packets that do not have a matching flow entry"; } leaf packet-in { type empty; description "Send packets to client if no matching flow entry"; } } // choice drop-pktin } // container default-action list interfaces { key "name"; ordered-by user; description "Interfaces configured for use with Openflow"; leaf name { junos:must "("interfaces $$-IFL")"; junos:must-message "Interface does not exist"; type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Interface name"; } leaf port-id { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 32640"; } } description "Openflow port ID"; } } // list interfaces leaf purge-flow-timer { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 300"; } } units "seconds"; description "Purge timer value for invalid flows"; } container controller { description "OpenFlow controller's IP address, port and protocol"; uses apply-advanced; container protocol { description "Protocol type for controller connection"; uses apply-advanced; container tcp { description "Set protocol type to 'TCP' (default)"; uses apply-advanced; leaf port { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1024 .. 65535"; } } description "Controller's port number (default 6633)"; } } // container tcp } // container protocol leaf role { type enumeration { enum "equal" { value 0; description "Set role to 'equal'"; } } description "Controller role"; } leaf address { type jt:ipaddr; description "Controller's IPv4 address"; } leaf id { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Controller id"; } } // container controller } // list switch container traceoptions { description "OpenFlow switch daemon trace options"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing flag parameters"; leaf name { type enumeration { enum "switch" { value 0; description "Trace openflow switch events"; } enum "configuration" { value 1; description "Trace openflow configuration events"; } enum "flow" { value 2; description "Trace openflow flow events"; } enum "filter" { value 3; description "Trace openflow filter events"; } enum "function" { value 4; description "Trace openflow function entry/exit events"; } enum "packet-io" { value 5; description "Trace openflow packet in/out events"; } enum "statistics" { value 6; description "Trace openflow statistics events"; } enum "interface" { value 7; description "Trace openflow interface events"; } enum "packets" { value 8; description "Trace openflow packets"; } enum "barrier" { value 9; description "Trace openflow barrier events"; } enum "nh" { value 10; description "Trace openflow next-hop events"; } enum "group" { value 11; description "Trace openflow group events"; } enum "all" { value 12; description "Trace everything"; } } } } // list flag } // container traceoptions } // grouping juniper-protocols-openflow 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-overlayd { uses apply-advanced; container traceoptions { description "Overlayd trace options"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file list flag { key "name"; ordered-by user; description "Tracing flag parameters"; leaf name { type enumeration { enum "socket" { value 0; description "Trace overlay daemon socket events"; } enum "rtsock" { value 1; description "Trace overlay daemon rtsock events"; } enum "config" { value 2; description "Trace overlay daemon config events"; } enum "all" { value 3; description "Trace everything"; } } } } // list flag } // container traceoptions } // grouping juniper-protocols-overlayd grouping juniper-protocols-pgm { uses apply-advanced; container traceoptions { description "PGM trace options"; uses apply-advanced; list flag { key "name"; ordered-by user; description "Tracing parameters"; leaf name { type enumeration { enum "init" { value 0; description "Trace initialization events"; } enum "show" { value 1; description "Trace show command servicing"; } enum "route-socket" { value 2; description "Trace route-socket events"; } enum "parse" { value 3; description "Trace parser processing"; } enum "state" { value 4; description "Trace state transitions"; } enum "packets" { value 5; description "Trace packet processing"; } 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 } // grouping juniper-protocols-pgm 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-protection-group { uses apply-advanced; container ethernet-aps { description "Ethernet APS configuration"; uses juniper-protocols-protection-group-eaps; } // container ethernet-aps container traceoptions { description "Tracing options for debugging protocol operation"; uses erp-trace-options; } // container traceoptions leaf restore-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 12"; } } units "minutes"; default "5"; description "Wait to restore interval"; } leaf guard-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 2000"; } } units "milliseconds"; default "500"; description "Guard timer interval in 10ms steps"; } leaf hold-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } units "milliseconds"; default "0"; description "Hold off timer interval in 100ms steps"; } list ethernet-ring { key "name"; ordered-by user; description "Ethernet ring"; uses juniper-protocols-protection-group-ethernet-ring; } // list ethernet-ring } // grouping juniper-protocols-protection-group grouping erp-trace-options { description "Trace options for Ethernet Ring Protocol"; uses apply-advanced; 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 R-APS PDU reception and transmission"; } enum "timers" { value 2; description "Trace protocol timers"; } enum "state-machine" { value 3; description "Trace R-APS state machine"; } enum "periodic-packet-management" { value 4; description "Trace periodic packet management state and events"; } enum "config" { value 5; description "Trace protocol configuration"; } enum "normal" { value 6; description "Trace protocol general log messages"; } enum "debug" { value 7; description "Trace protocol debug log messages"; } enum "all" { value 8; description "Trace all"; } } } } // 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 } // grouping erp-trace-options grouping juniper-protocols-protection-group-eaps { uses apply-advanced; list profile { key "name"; uses juniper-protocols-protection-group-eaps-profile; } // list profile } // grouping juniper-protocols-protection-group-eaps grouping juniper-protocols-protection-group-eaps-profile { description "Ethernet APS profile"; leaf name { type string { length "1 .. 32"; } description "Profile name"; } uses apply-advanced; leaf protocol { type enumeration { enum "ccm" { value 0; description "Use CCM packets for protection."; } enum "G.8031" { value 1; description "Use G.8031 packets for protection."; } } description "Protocol value"; } leaf revert-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 15"; } } units "minutes"; default "4"; description "Reversion time in minutes, 0 would mean no reversion"; } leaf hold-time { junos:must "(".. protocol G.8031")"; junos:must-message "hold-time is allowed with G.8031 protocol only"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } units "milli seconds"; default "0"; description "Hold time in seconds"; } leaf local-request { junos:must "(".. protocol G.8031")"; junos:must-message "local-request is allowed with G.8031 protocol only"; type enumeration { enum "lockout" { value 0; description "Lockout protection"; } } description "Local APS request"; } } // grouping juniper-protocols-protection-group-eaps-profile grouping juniper-protocols-protection-group-ethernet-ring { description "Ethernet Ring protection group configuration"; leaf name { type string { length "1 .. 32"; } description "Name of Ethernet Ring protection group"; } uses apply-advanced; leaf node-id { type jt:mac-unicast; description "Node ID of the protection group, by default bridge's MAC"; } leaf ring-protection-link-owner { type empty; description "Ring protection link owner flag, one ring should have only one node as a ring protection link owner"; } leaf level { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } description "MPG Level value for R-APS PDU"; } leaf restore-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 12"; } } units "minutes"; description "Wait to restore interval"; } leaf guard-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 2000"; } } units "milliseconds"; description "Guard timer interval in 10ms"; } leaf hold-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 10000"; } } units "milliseconds"; description "Hold off timer interval in 100ms steps"; } leaf non-revertive { type empty; description "Non-revertive mode of operation"; } leaf wait-to-block-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 10"; } } units "seconds"; default "5"; description "Wait to block interval"; } leaf major-ring-name { type string { length "1 .. 32"; } description "Name of major-ring to which this sub-ring node attached"; } leaf propagate-tc { type empty; description "Enable Topology Change Propagation to major-ring from the sub-ring"; } leaf compatibility-version { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2"; } } default "2"; description "G.8032 compatibility version"; } leaf ring-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 239"; } } default "1"; description "Ethernet Ring ID of protection group"; } leaf non-vc-mode { type empty; description "Node is operating in non virtual channel mode"; } leaf dot1p-priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } default "0"; description "IEEE 802.1p priority of transmitted R-APS"; } container east-interface { presence "enable east-interface"; description "East interface configuration"; uses erp-interface; } // container east-interface container west-interface { presence "enable west-interface"; description "West interface configuration"; uses erp-interface; } // container west-interface leaf control-vlan { type string; description "Dedicated VLAN identifier - VLAN id or VLAN name"; } container data-channel { presence "enable data-channel"; description "Ring instance data channel"; uses erp-data-channel; } // container data-channel } // grouping juniper-protocols-protection-group-ethernet-ring grouping erp-data-channel { uses apply-advanced; leaf-list vlan { type string; ordered-by user; description "VLAN ID or VLAN ID range [1..4094]"; } } // grouping erp-data-channel grouping erp-interface { uses apply-advanced; container control-channel { presence "enable control-channel"; description "Control channel of ring port"; uses apply-advanced; leaf vlan { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 4094"; } } description "Dedicated VLAN identifier"; } leaf control-channel-name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } } } // container control-channel leaf ring-protection-link-end { type empty; description "Port is connecting to ring protection link"; } leaf interface-none { type empty; description "Port is not used"; } } // grouping erp-interface 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-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 } // grouping juniper-protocols-vni-options 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-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 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-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-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-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-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 lmp_control_channel_type { leaf name { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Control channel interface"; } uses apply-advanced; leaf remote-address { type jt:ipaddr; description "Control channel remote address"; } } // grouping lmp_control_channel_type grouping lr_interfaces_type { description "Physical interface"; leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name"; } uses apply-advanced; list unit { key "name"; description "Logical interface"; leaf name { type string; } uses apply-advanced; leaf alias { junos:must "(!("interfaces interface-range $$"))"; junos:must-message "Interface alias cannot be an existing interface range name"; type string; description "Interface alias"; } container peer-psd { presence "enable peer-psd"; description "Peer psd"; leaf psd-name { junos:must "(".. .. peer-interface")"; junos:must-message "peer-interface must be configured on this interface"; type string; description "Peer psd name"; } } // container peer-psd container peer-interface { presence "enable peer-interface"; description "Peer interface"; uses apply-advanced; leaf interface-name { junos:must "((".. .. peer-psd" || "interfaces $$-IFL peer-interface"))"; junos:must-message "Peer interface or peer psd must be configured"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Peer interface name"; } } // container peer-interface container interface-shared-with { junos:must "("chassis system-domains")"; junos:must-message "Chassis system-domains must be configured"; presence "enable interface-shared-with"; description "Specify which PSD owns this logical interface"; uses apply-advanced; leaf psd-name { type string { junos:posix-pattern "^psd([1-9]|[1-2][0-9]|[3][0-1])$"; junos:pattern-message "Protected system domain name is a string consisting of 'psd' follows by the PSD ID (1-31), ex. psd2"; } description "Name of protected system domain (psd[1-31], ex. psd2)"; } } // container interface-shared-with choice enable-disable { leaf disable { type empty; description "Disable this logical interface"; } } // choice enable-disable leaf passive-monitor-mode { type empty; description "Use interface to tap packets from another router"; } leaf clear-dont-fragment-bit { type empty; description "Clear DF bit in packet (AS PIC and J-series only as well as MIF)"; } leaf description { type string; description "Text description of interface"; } leaf encapsulation { type enumeration { enum "atm-nlpid" { value 0; description "ATM NLPID encapsulation"; } enum "atm-cisco-nlpid" { value 1; description "Cisco-compatible ATM NLPID encapsulation"; } enum "atm-snap" { value 2; description "ATM LLC/SNAP encapsulation"; } enum "atm-vc-mux" { value 3; description "ATM VC multiplexing"; } enum "atm-ccc-vc-mux" { value 4; description "ATM VC for CCC"; } enum "atm-tcc-vc-mux" { value 5; description "ATM VC for translational cross-connect"; } enum "atm-tcc-snap" { value 6; description "ATM LLC/SNAP for translational cross-connect"; } enum "atm-ccc-cell-relay" { value 7; description "ATM cell relay for CCC"; } enum "vlan-vci-ccc" { value 8; description "CCC for VLAN Q-in-Q and ATM VPI/VCI interworking"; } enum "ether-over-atm-llc" { value 9; description "Ethernet over ATM (LLC/SNAP) encapsulation"; } enum "ether-vpls-over-atm-llc" { value 10; description "Ethernet VPLS over ATM (bridging) encapsulation"; } enum "ppp-over-ether-over-atm-llc" { value 11; description "PPPoE over ATM (LLC/SNAP) encapsulation"; } enum "ppp-over-ether" { junos:must "(!("forwarding-options hyper-mode"))"; junos:must-message "To configure encapsulation ppp-over-ether, 'forwarding-options hyper-mode' should not be configured"; junos:must "(!(".. family"))"; junos:must-message "Can't configure protocol family with encapsulation ppp-over-ether"; value 12; description "PPPoE encapsulation"; } enum "atm-ppp-vc-mux" { value 13; description "ATM PPP over raw AAL5"; } enum "atm-ppp-llc" { value 14; description "ATM PPP over AAL5/LLC"; } enum "atm-mlppp-llc" { value 15; description "ATM MLPPP over AAL5/LLC"; } enum "frame-relay-ppp" { junos:must "(!(".. family inet6"))"; junos:must-message "family inet6 is not supported on encapsulation frame-relay-ppp"; junos:must "(!(".. family inet"))"; junos:must-message "family inet is not supported on encapsulation frame-relay-ppp"; junos:must "(".. .. encapsulation frame-relay")"; junos:must-message "Physical link-layer encapsulation must be frame-relay"; value 16; description "PPP over Frame Relay"; } enum "frame-relay-ccc" { value 17; description "Frame Relay DLCI for CCC"; } enum "frame-relay" { value 18; description "Frame Relay DLCI"; } enum "frame-relay-tcc" { value 19; description "Frame Relay DLCI for translational cross-connect"; } enum "frame-relay-ether-type" { junos:must "((".. .. encapsulation flexible-frame-relay" || (".. .. encapsulation frame-relay-ether-type" || ".. .. encapsulation frame-relay-ether-type-tcc")))"; junos:must-message "Interface encapsulation must be cisco-compatible or flexible frame relay"; value 20; description "Cisco-compatible Frame Relay Encapsulation DLCI"; } enum "frame-relay-ether-type-tcc" { value 21; description "Cisco-compatible Frame Relay Encapsulation DLCI for TCC"; } enum "ether-vpls-fr" { value 22; description "Ethernet VPLS over Frame Relay (bridging) encapsulation"; } enum "vlan-ccc" { value 23; description "802.1q tagging for a cross-connect"; } enum "ethernet-ccc" { value 24; description "Ethernet for a cross-connect"; } enum "vlan-vpls" { value 25; description "VLAN virtual private LAN service"; } enum "vlan-bridge" { value 26; description "VLAN layer-2 bridging"; } enum "ethernet-tcc" { value 27; description "Ethernet translational cross-connect"; } enum "dix" { value 28; description "Ethernet DIXv2 (RFC 894)"; } enum "ethernet" { value 29; description "Ethernet II (RFC 894)"; } enum "ethernet-vpls" { value 30; description "Ethernet II virtual private LAN service"; } enum "ethernet-bridge" { value 31; description "Ethernet II bridging"; } enum "vlan" { value 32; description "802.1q-tagged Ethernet"; } enum "vlan-tcc" { value 33; description "802.1q tagging for a translational cross-connect"; } enum "multilink-ppp" { value 34; description "Multilink PPP"; } enum "multilink-frame-relay-end-to-end" { value 35; description "Multilink Frame Relay end-to-end (FRF.15)"; } enum "ppp-ccc" { value 36; description "Serial PPP device for a cross-connect"; } } description "Logical link-layer encapsulation"; } leaf mtu { type union { type string { pattern "<.*>|$.*"; } type uint32; } description "Maximum transmission unit packet size"; } choice pointedness { leaf point-to-point { type empty; description "Point-to-point connection"; } leaf multipoint { type empty; description "Multipoint connection"; } } // choice pointedness leaf bandwidth { type string; description "Logical unit bandwidth (informational only)"; } choice traps-choice { leaf traps { type empty; description "Enable SNMP notifications on state changes"; } leaf no-traps { type empty; description "Don't enable SNMP notifications on state changes"; } } // choice traps-choice choice routing-services-choice { leaf routing-services { type empty; status deprecated; description "Enable routing services"; } leaf no-routing-services { type empty; status deprecated; description "Don't enable routing services"; } } // choice routing-services-choice container routing-service { description "Routing Services on this interface"; uses apply-advanced; choice enable-disable { leaf enable { type empty; description "Enable Routing Service"; } leaf disable { type empty; description "Disable Routing Service"; } } // choice enable-disable } // container routing-service container arp-resp { presence "enable arp-resp"; description "Knob to control ARP response on the interface, default is restricted"; choice arp-response-options { leaf unrestricted { type empty; description "Enable unrestricted ARP respone on the interface"; } leaf restricted { type empty; description "Enable restricted proxy ARP response on the interface"; } } // choice arp-response-options } // container arp-resp container proxy-arp { junos:must "(!("switch-options no-arp-trap "))"; junos:must-message "Cannot enable proxy ARP with no-arp-trap"; presence "enable proxy-arp"; description "Enable proxy ARP on the interface, default is unrestricted"; choice proxyarp-options { leaf unrestricted { type empty; description "Enable unrestricted proxy ARP on the interface"; } leaf restricted { type empty; description "Enable restricted proxy ARP on the interface"; } } // choice proxyarp-options } // container proxy-arp choice vlan_choice { leaf vlan-id { junos:must "(!("interfaces ${interface} stacked-vlan-tagging"))"; junos:must-message "vlan-id is not supported on stacked-vlan-tagging mode"; type string; description "Virtual LAN identifier value for 802.1q VLAN tags"; } leaf vlan-id-range { junos:must "(("interfaces ${interface} vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))"; junos:must-message "valid only with vlan-tagging or flexible-vlan-tagging mode"; type jt:vlan-range; description "Virtual LAN identifier range of form vid1-vid2"; } leaf-list inner-vlan-id-swap-ranges { type jt:vlan-range; description "Inner vlan-id swap range(s) of form vid1-vid2 for dynamic L2 VLANs"; } leaf-list vlan-id-list { junos:must "((" .. encapsulation vlan-ccc" || ("interfaces ${interface} encapsulation extended-vlan-ccc" || (" .. encapsulation vlan-vpls" || ("interfaces ${interface} encapsulation extended-vlan-vpls" || (" .. encapsulation vlan-bridge" || "interfaces ${interface} encapsulation extended-vlan-bridge"))))))"; junos:must-message "valid only with ccc/vpls/bridge encapsulation"; junos:must "(("interfaces ${interface} vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))"; junos:must-message "valid only with vlan-tagging or flexible-vlan-tagging mode"; type jt:vlan-range; description "List of VLAN identifiers"; } leaf-list vlan-tag { type string; ordered-by user; status deprecated; description "IEEE 802.1q tag list for VLAN tagged frames"; } container vlan-tags { junos:must "((!("interfaces ${interface} vlan-tagging") || !((". inner" || (". inner-range" || ". inner-list")))))"; junos:must-message "inner/inner-range/inner-list is valid only on stacked-vlan-tagging and flexible-vlan-tagging mode"; junos:must "((!("interfaces ${interface} stacked-vlan-tagging") || (". inner" || (". inner-range" || ". inner-list"))))"; junos:must-message "inner/inner-range/inner-list must be defined for stacked-vlan-tagging mode"; junos:must "((".. demux-options" || ("interfaces ${interface} vlan-tagging" || ("interfaces ${interface} stacked-vlan-tagging" || "interfaces ${interface} flexible-vlan-tagging"))))"; junos:must-message "valid only with vlan-tagging, stacked-vlan-tagging or flexible-vlan-tagging mode"; presence "enable vlan-tags"; description "IEEE 802.1q tags"; leaf outer { type string; description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } choice inner_choice { leaf inner { type string; description "[tpid.]vlan-id, tpid format is 0xNNNN and is optional"; } leaf inner-range { type string { junos:posix-pattern "^((0[Xx][0-9A-Fa-f]{4}.){0,1}([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4])-([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4]))$"; junos:pattern-message "vid in vlan-tag ([0xNNNN.]vid1-vid2) must be 1 to 4094"; } description "[tpid.]vid1-vid2, tpid format is 0xNNNN and is optional"; } leaf-list inner-list { junos:must "((" .. .. encapsulation vlan-ccc" || ("interfaces ${interface} encapsulation extended-vlan-ccc" || (" .. .. encapsulation vlan-vpls" || ("interfaces ${interface} encapsulation extended-vlan-vpls" || (" .. .. encapsulation vlan-bridge" || "interfaces ${interface} encapsulation extended-vlan-bridge"))))))"; junos:must-message "valid only with ccc/vpls/bridge encapsulation"; type jt:vlan-range; description "List of VLAN identifiers"; } } // choice inner_choice } // container vlan-tags } // choice vlan_choice leaf deep-vlan-qualified-learning { junos:must "((".. vlan-tags outer" && ".. vlan-tags inner"))"; junos:must-message "deep-vlan-qualified-learning can be specified only with one outer and one inner vlan tags"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "3"; } } description "Enable qualified MAC-address learning on the specified vlan tag"; } leaf native-inner-vlan-id { junos:must "((".. vlan-tags" || ".. family bridge inner-vlan-id-list"))"; junos:must-message "native-inner-vlan-id can be specified only on a dual vlan tagged unit"; junos:must "("interfaces ${interface} flexible-vlan-tagging")"; junos:must-message "native-inner-vlan-id can be specified only with flexible-vlan-tagging mode"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4094"; } } description "Native virtual LAN identifier for singly tagged frames"; } container inner-vlan-id-range { junos:must "("interfaces ${interface} encapsulation vlan-vci-ccc")"; junos:must-message "inner-vlan-id-range valid only for vlan-vci-ccc encapsulation"; description "Inner vlan-id range start <start-vlan-id> end <end-vlan-id>"; leaf start { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 4094"; } } description "Inner vlan-id range's start value"; } leaf end { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "32 .. 4094"; } } description "Inner vlan-id range's end value"; } } // container inner-vlan-id-range container accept-source-mac { junos:must "(".. family ethernet-switching")"; junos:must-message "source mac filters are allowed only on interfaces with family ethernet-switching"; description "Remote media access control address to/from which to accept traffic"; uses apply-advanced; list mac-address { key "name"; description "Remote MAC address"; uses mac_list; } // list mac-address } // container accept-source-mac container input-vlan-map { description "VLAN map operation on input"; uses vlan_map; } // container input-vlan-map container output-vlan-map { description "VLAN map operation on output"; uses vlan_map; } // container output-vlan-map leaf swap-by-poppush { type empty; description "Pop original vlan tag and then push a new vlan tag"; } leaf receive-lsp { type string; description "Name of incoming label-switched path"; } leaf transmit-lsp { type string; description "Name of outgoing label-switched path"; } leaf dlci { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1022"; } } description "Frame Relay data-link control identifier"; } leaf multicast-dlci { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1022"; } } description "Frame Relay data-link control identifier for multicast packets"; } choice vci_type { leaf vci { junos:must "(!(".. encapsulation vlan-vci-ccc"))"; junos:must-message "'vci-range' must be used with encapsulation vlan-vci-ccc"; type jt:atm-vci; description "ATM point-to-point virtual circuit identifier ([vpi.]vci)"; } leaf allow-any-vci { type empty; description "Allow all VCIs to open in atm-ccc-cell-relay mode"; } leaf vpi { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "ATM point-to-point virtual path identifier (vpi)"; } leaf trunk-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 31"; } } description "ATM trunk identifier"; } } // choice vci_type choice psn_vci_type { case case_1 { } // case case_1 case case_2 { } // case case_2 } // choice psn_vci_type container atm-l2circuit-mode { description "Select ATM Layer 2 circuit transport mode"; choice mode_choice { leaf cell { type empty; description "ATM Layer 2 circuit cell mode"; } leaf aal5 { type empty; description "ATM Layer 2 circuit AAL5 mode"; } } // choice mode_choice } // container atm-l2circuit-mode container vci-range { junos:must "(!(".. vci"))"; junos:must-message "'vci-range' and 'vci' statements cannot co-exist"; description "ATM VCI range start <start-vci> end <end-vci>"; leaf start { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "32 .. 4094"; } } description "ATM VCI range's start value"; } leaf end { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "32 .. 4094"; } } description "ATM VCI range's end value"; } } // container vci-range leaf trunk-bandwidth { type string; units "bits per second"; description "ATM trunk bandwidth"; } leaf multicast-vci { type jt:atm-vci; description "ATM virtual circuit identifier for multicast packets"; } container shaping { description "Virtual circuit traffic-shaping options"; uses dcd_shaping_config; } // container shaping container oam-period { description "OAM cell period"; choice oam_period_choices { leaf oam-period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 900"; } } units "seconds"; description "OAM cell period"; } container disable { presence "enable disable"; description "Disable F5 OAM loopback"; } // container disable } // choice oam_period_choices } // container oam-period container oam-liveness { description "OAM virtual circuit liveness parameters"; uses apply-advanced; leaf up-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Number of OAM cells to consider VC up"; } leaf down-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Number of OAM cells to consider VC down"; } } // container oam-liveness container ppp-options { description "Point-to-Point Protocol interface-specific options"; uses ppp_options_type; } // container ppp-options choice keepalive_choices { container keepalives { presence "enable keepalives"; description "Send or demand keepalive messages"; uses keepalives_type; } // container keepalives leaf no-keepalives { type empty; description "Do not send or demand keepalive messages"; } } // choice keepalive_choices leaf inverse-arp { type empty; description "Enable inverse ARP"; } leaf transmit-weight { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } description "ATM2 transmit weight for VC under VP tunnel"; } container epd-threshold { description "Early packet discard threshold for ATM2"; uses epd_threshold_config; } // container epd-threshold leaf cell-bundle-size { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 176"; } } units "cells"; description "L2 circuit cell bundle size"; } leaf cell-bundle-timeout { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 512"; } } units "microseconds"; description "L2 circuit cell bundle timeout"; } leaf plp-to-clp { type empty; description "Enable ATM2 PLP to CLP copy"; } leaf atm-scheduler-map { type union { type string { pattern "default"; } type string; } description "Assign ATM2 CoS scheduling map"; } leaf mrru { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1500 .. 4500"; } } units "bytes"; description "Maximum received reconstructed unit"; } leaf short-sequence { type empty; description "Short sequence number header format (MLPPP only)"; } leaf fragment-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "64 .. 4500"; } } units "bytes"; description "Fragmentation threshold"; } leaf drop-timeout { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "0 .. 2000"; } } units "milliseconds"; description "Drop timeout"; } leaf disable-mlppp-inner-ppp-pfc { type empty; description "Disable compression for inner PPP header in MLPPP payload"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16; } description "Minimum number of links to sustain the bundle"; } leaf multilink-max-classes { type union { type string { pattern "<.*>|$.*"; } type uint16; } description "Number of multilink classes"; } leaf interleave-fragments { type empty; description "Interleave long packets with high priority ones"; } leaf link-layer-overhead { type jt:unsigned-float; description "Link layer bit stuffing overhead (0.0 .. 50.0 percent)"; } leaf accounting-profile { junos:must "(("accounting-options interface-profile $$" || "accounting-options flat-file-profile $$"))"; junos:must-message "referenced accounting profile must be defined"; type string; description "Accounting profile name"; } leaf peer-unit { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16385"; } } description "Peer unit number"; } container tunnel { description "Tunnel parameters"; uses apply-advanced; container encapsulation { presence "enable encapsulation"; description "Encapsulation over tunnel"; container vxlan-gpe { junos:must "((!(".. udp") && !(".. ipip")))"; junos:must-message "Only one encapsulation can be set per IFL"; presence "enable vxlan-gpe"; uses apply-advanced; container source { uses apply-advanced; leaf address { junos:must "(!(".. interface"))"; junos:must-message "To configure address interface must be not set"; type jt:ipv4addr; description "Interface address prefix"; } leaf mac-address { type jt:mac-addr; description "Interface source mac address"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Name of the interface"; } } // container source container destination { uses apply-advanced; leaf address { type jt:ipv4addr; description "Interface address prefix"; } leaf mac-address { type jt:mac-addr; description "Interface destination mac address"; } } // container destination leaf tunnel-endpoint { type enumeration { enum "vxlan" { value 0; description "To configure vxlan tunnel-end-point"; } } description "Tunnel end point type"; } leaf destination-udp-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 65535"; } } description "Value to write to the destination-udp-port field"; } leaf vni { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 16777214"; } } description "Value to write to the vni field"; } } // container vxlan-gpe } // container encapsulation leaf source { type jt:ipaddr; description "Tunnel source"; } leaf destination { type jt:ipaddr; description "Tunnel destination"; } leaf key { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Tunnel key"; } leaf backup-destination { junos:must "(!(".. destination $$"))"; junos:must-message "Backup and primary tunnel destinations must be different"; type jt:ipaddr; description "Backup tunnel destination"; } choice fragmentation { leaf allow-fragmentation { type empty; description "Do not set DF bit on packets"; } leaf do-not-fragment { type empty; description "Set DF bit on packets"; } } // choice fragmentation leaf ttl { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Time to live"; } leaf traffic-class { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "TOS/Traffic class field of IP-header"; } leaf flow-label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Flow label field of IP6-header"; } choice path-mtu-discovery-choice { leaf path-mtu-discovery { type empty; description "Enable path MTU discovery for tunnels"; } leaf no-path-mtu-discovery { type empty; description "Don't enable path MTU discovery for tunnels"; } } // choice path-mtu-discovery-choice container routing-instance { description "Routing instance to which tunnel ends belong"; uses apply-advanced; leaf destination { junos:must "(("routing-instances $$" || any "tenants <*> routing-instances $$"))"; junos:must-message "referenced routing-instance must be defined"; type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance of tunnel destination"; } } // container routing-instance } // container tunnel leaf compression-device { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Logical interface used for compression"; } container layer2-policer { junos:must "(".. family")"; junos:must-message "Family must be defined for a unit with layer2-policer"; description "Layer2 policing for logical interface"; uses apply-advanced; choice layer2-input-policer-choice { leaf input-policer { junos:must "(!("firewall policer $$ then forwarding-class"))"; junos:must-message "Forwarding class cannot be modified for Layer 2 policer"; junos:must "(!("firewall policer $$ then loss-priority medium-low"))"; junos:must-message "Loss priority 'medium-low' is not valid for Layer 2 policer"; junos:must "(!("firewall policer $$ then loss-priority low"))"; junos:must-message "Loss priority 'low' is not valid for Layer 2 policer"; junos:must "("firewall policer $$ logical-interface-policer")"; junos:must-message "Layer 2 policer must be a logical interface policer"; type string; description "Two-color policer for received packets"; } case case_2 { } // case case_2 leaf input-three-color { junos:must "(("firewall three-color-policer $$ single-rate color-blind" || ("firewall three-color-policer $$ single-packet-rate color-blind" || ("firewall three-color-policer $$ two-rate color-blind" || "firewall three-color-policer $$ two-packet-rate color-blind"))))"; junos:must-message "Layer 2 input three-color policer must be color-blind"; junos:must "("firewall three-color-policer $$ logical-interface-policer")"; junos:must-message "Layer 2 three-color policer must be a logical interface policer"; type string; description "Color-blind three-color policer for received packets"; } } // choice layer2-input-policer-choice choice layer2-output-policer-choice { leaf output-policer { junos:must "(!("firewall policer $$ then forwarding-class"))"; junos:must-message "Forwarding class cannot be modified for Layer 2 policer"; junos:must "(!("firewall policer $$ then loss-priority medium-low"))"; junos:must-message "Loss priority 'medium-low' is not valid for Layer 2 policer"; junos:must "(!("firewall policer $$ then loss-priority low"))"; junos:must-message "Loss priority 'low' is not valid for Layer 2 policer"; junos:must "("firewall policer $$ logical-interface-policer")"; junos:must-message "Layer 2 policer must be a logical interface policer"; type string; description "Two-color policer for transmitted packets"; } leaf output-three-color { junos:must "("firewall three-color-policer $$ logical-interface-policer")"; junos:must-message "Layer 2 three-color policer must be a logical interface policer"; type string; description "Three-color policer for transmitted packets"; } } // choice layer2-output-policer-choice } // container layer2-policer choice virtual-gateway { leaf no-auto-virtual-gateway-esi { junos:must "((any ".. family inet address <*> virtual-gateway-address" || any ".. family inet6 address <*> virtual-gateway-address"))"; junos:must-message "Only when virtual gateway address is configured"; type empty; description "Disable auto ESI generation for virtual gateway address"; } container virtual-gateway-esi { description "ESI configuration of virtual gateway"; uses apply-advanced; leaf identifier { junos:must "(unique "interfaces <*> unit <*> virtual-gateway-esi $$")"; junos:must-message "virtual-gateway-esi value must be unique under all IFDs and IFLs"; junos:must "(unique "interfaces <*> unit <*> esi $$")"; junos:must-message "ESI value must be unique under all IFDs and IFLs"; type jt:esi; description "ESI value for the interface"; } choice mode { leaf single-active { type empty; description "Single-active mode"; } leaf all-active { type empty; description "All-active mode"; } } // choice mode } // container virtual-gateway-esi } // choice virtual-gateway container service { description "Service operations"; uses apply-advanced; list pcef { key "name"; ordered-by user; description "PCEF configuration"; leaf name { junos:must "((".. family inet service" || ".. family inet6 service"))"; junos:must-message "Must be configured along with a family inet/inet6 service."; type string; description "PCEF Profile name"; } uses apply-advanced; leaf activate-all { junos:must "(!("activate"))"; junos:must-message "Can't be configured with activate-rule or activate- rulebase."; type empty; description "Activate all rules and rulebases in the pcef profile"; } list activate { key "name"; ordered-by user; description "Name of pcef profile rule or rulebase to activate"; leaf name { type string; description "Name of pcef profile rule or rulebase to activate"; } uses apply-advanced; } // list activate } // list pcef } // container service choice generate-eui64-choice { leaf generate-eui64 { junos:must "(".. family inet6 unnumbered-address")"; junos:must-message "generate-eui64 attribute must be set when unnumbered-address is configured under family inet6"; type empty; description "To generate Link Local EUI-64 addresses"; } leaf no-generate-eui64 { junos:must "(".. family inet6 unnumbered-address")"; junos:must-message "generate-eui64 attribute must be set when unnumbered-address is configured under family inet6"; type empty; description "Don't to generate Link Local EUI-64 addresses"; } } // choice generate-eui64-choice container family { junos:must "(!(".. encapsulation ppp-over-ether"))"; junos:must-message "Can't configure protocol family with encapsulation ppp-over-ether"; description "Protocol family"; container inet { junos:must "(!(".. .. .. encapsulation vlan-vpls"))"; junos:must-message "Can't configure protocol family inet with encapsulation vpls"; presence "enable inet"; description "IPv4 parameters"; uses apply-advanced; container dhcp { junos:must "(!(any "forwarding-options dhcp-relay group <*> interface ${interface}.${unit}"))"; junos:must-message "Incompatible with the interface configured under 'forwarding-options dhcp-relay group'"; junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'"; junos:must "(!("system autoinstallation interfaces"))"; junos:must-message "Incompatible with 'system autoinstallation interfaces'"; junos:must "(!(".. address"))"; junos:must-message "Incompatible with interface assigned with address"; presence "enable dhcp"; description "Dynamic Host Configuration Protocol client configuration"; uses dhcp-client-type; } // container dhcp container targeted-broadcast { presence "enable targeted-broadcast"; description "Directed broadcast"; uses apply-advanced; choice targeted-bcast-choice { leaf forward-and-send-to-re { type empty; description "Allow packets to be forwarded and sent to re"; } leaf forward-only { type empty; description "Allow packets only to be forwarded"; } } // choice targeted-bcast-choice } // container targeted-broadcast leaf destination-class-usage { type empty; status deprecated; description "Enable destination class usage on this interface"; } leaf transit-options-packets { type empty; status deprecated; description "Transit IP options packets (don't send to Routing Engine)"; } leaf transit-ttl-exceeded { type empty; status deprecated; description "Transit IP TTL-exceeded packets (don't send to Routing Engine)"; } leaf receive-options-packets { type empty; description "Receive IP options packets (don't send to Routing Engine)"; } leaf receive-ttl-exceeded { type empty; description "Receive IP TTL-exceeded packets (don't send to Routing Engine)"; } container accounting { description "Configure interface-based accounting options"; uses apply-advanced; container source-class-usage { description "Enable source class usage on this interface"; uses apply-advanced; leaf input { type empty; description "Specify this interface for source-class-usage input"; } leaf output { type empty; description "Specify this interface for source-class-usage output"; } } // container source-class-usage leaf destination-class-usage { type empty; description "Enable destination class usage on this interface"; } } // container accounting container rpf-check { presence "enable rpf-check"; description "Enable reverse-path-forwarding checks on this interface"; uses apply-advanced; leaf fail-filter { type string; description "Name of filter applied to packets failing RPF check"; } container mode { description "Mode for reverse path forwarding"; leaf loose { type empty; description "Reverse-path-forwarding loose mode"; } } // container mode } // container rpf-check leaf mtu { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Protocol family maximum transmission unit"; } leaf arp-max-cache { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000000"; } } description "Max interface ARP nexthop cache size"; } leaf arp-new-hold-limit { junos:must "(".. arp-max-cache")"; junos:must-message "Interface max ARP cache size must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000000"; } } description "Max no. of new unresolved nexthops"; } leaf no-redirects { type empty; description "Do not redirect traffic"; } leaf no-neighbor-learn { type empty; description "Disable neighbor address learning on interface"; } leaf unconditional-src-learn { type empty; description "Glean from arp packets even when source cannot be validated"; } leaf multicast-only { type empty; description "Allow only multicast traffic (tunnels only)"; } leaf primary { type empty; description "Candidate for primary interface in system"; } leaf ipsec-sa { type string { length "1 .. 32"; } description "Name of security association"; } leaf allow-filter-on-re { type empty; description "Enable kernel filter on network ports"; } container filter { description "Packet filtering"; uses apply-advanced; choice input_choice { container input { description "Filter to be applied to received packets"; leaf filter-name { type string; description "Name of the filter"; } leaf shared-name { type string; description "Filter shared-name of instances of interface-shared filter"; } leaf precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } } // container input leaf-list input-list { type string; ordered-by user; description "List of filter modules applied to received packets "; } } // choice input_choice choice output_choice { container output { description "Filter to be applied to transmitted packets"; leaf filter-name { type string; description "Name of the filter"; } leaf shared-name { type string; description "Filter shared-name of instances of interface-shared filter"; } leaf precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } } // container output leaf-list output-list { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } } // choice output_choice container adf { description "Ascend Data Filter definition"; uses apply-advanced; list rule { key "name"; ordered-by user; description "Set of ADF rules"; leaf name { type string; description "Value for a single rule"; } uses apply-advanced; } // list rule leaf counter { type empty; description "Add a counter to each rule"; } leaf input-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the input rules"; } leaf not-mandatory { type empty; description "No errors will be reported if no rules are present"; } leaf output-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the output rules"; } } // container adf leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Group to which interface belongs"; } } // container filter container simple-filter { description "Filter for doing multifield classification"; uses apply-advanced; leaf input { type string; description "Name of simple filter applied to received packets"; } } // container simple-filter container policer { description "Interface policing"; uses apply-advanced; leaf arp { junos:must "(!(".. disable-arp-policer"))"; junos:must-message "Interface configuration can have either disable-arp-policer or arp policer configured"; junos:must "((!(".. .. .. .. peer-unit") || (".. .. .. .. encapsulation ethernet" || ".. .. .. .. encapsulation vlan")))"; junos:must-message "Interface encapsulation must be ethernet or vlan"; type string; description "Name of policer applied to received ARP packets"; } leaf input { junos:must "(!(".. .. input-hierarchical-policer"))"; junos:must-message "Both input policer and input hierarchical policer can not be applied on the same family"; type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer container sampling { junos:must "(("forwarding-options sampling family inet" || ("forwarding-options packet-capture" || any "forwarding-options sampling instance <*> family inet")))"; junos:must-message "Requires forwarding-options sampling or packet-capture config"; description "Interface sampling"; uses apply-advanced; leaf input { type empty; description "Sample all packets input on this interface"; } leaf output { type empty; description "Sample all packets output on this interface"; } } // container sampling container service { junos:must "((!(".. rpf-check") || "chassis network-services enhanced-ip"))"; junos:must-message "rpf-check can not be enabled with interface services"; description "Service operations"; uses apply-advanced; container input { description "Service sets to consider for received packets"; uses apply-advanced; list service-set { key "name"; ordered-by user; description "Service set to consider for received packets"; leaf name { junos:must "((!(".. .. .. .. .. .. demux-source") && !(".. .. .. .. .. .. demux-destination")))"; junos:must-message "Service set cannot be configured on interfaces with demux-source or demux-destination"; junos:must "("services service-set $$ interface-service")"; junos:must-message "this service set must be an interface service"; type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots."; } description "Name of service set"; } uses apply-advanced; leaf service-filter { type string; description "Name of service filter"; } } // list service-set leaf post-service-filter { type string; description "Post-service filter to apply to received packets"; } } // container input container output { description "Service sets to consider for transmitted packets"; uses apply-advanced; list service-set { key "name"; ordered-by user; description "Service set to consider for transmitted packets"; leaf name { type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots."; } description "Name of service set"; } uses apply-advanced; leaf service-filter { type string; description "Name of service filter"; } } // list service-set } // container output } // container service list next-hop-tunnel { key "name"; ordered-by user; description "One or more next-hop tunnel tables"; leaf name { type string; description "Next-hop tunnel gateway address"; } uses apply-advanced; leaf ipsec-vpn { junos:must "("security ipsec vpn $$")"; junos:must-message "Referenced IPSec vpn must be defined under [edit security ipsec vpn] hierarchy level"; junos:must "(unique "interfaces st0 unit <*> family inet next-hop-tunnel <*> ipsec-vpn $$")"; junos:must-message "Referenced IPSec vpn must be unique"; type string; description "Name of IPSec VPN"; } } // list next-hop-tunnel container tunnel-termination { presence "enable tunnel-termination"; description "Tunnel termination"; } // container tunnel-termination list address { junos:must "((!(".. unnumbered-address") && !(".. location-pool-address")))"; junos:must-message "address cannot be defined with unnumbered-address or location-pool-address simultaneously"; key "name"; ordered-by user; description "Interface address/destination prefix"; leaf name { type jt:ipv4prefix; description "Interface address/destination prefix"; } uses apply-advanced; leaf destination { type jt:ipv4addr; description "Destination address"; } leaf destination-profile { junos:must "("access group-profile $$ ppp")"; junos:must-message "referenced group-profile must be defined and must contain ppp statement"; type string; description "Profile to use for destination address"; } leaf broadcast { type jt:ipv4addr; description "Broadcast address"; } leaf primary { type empty; description "Candidate for primary address in system"; } leaf preferred { type empty; description "Preferred address on interface"; } leaf master-only { type empty; description "Master management IP address for router"; } list multipoint-destination { key "name"; ordered-by user; description "Multipoint NBMA destination"; leaf name { type jt:ipv4addr; description "Destination address"; } uses apply-advanced; choice link-address { leaf dlci { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 1022"; } } description "Frame Relay data-link control identifier"; } leaf vci { type jt:atm-vci; description "ATM virtual circuit identifier ([vpi.]vci)"; } } // choice link-address container shaping { description "Virtual circuit traffic-shaping options"; uses dcd_shaping_config; } // container shaping container oam-period { description "OAM cell period"; choice oam_period_choices { leaf oam_period { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 900"; } } units "seconds"; description "OAM cell period"; } container disable { presence "enable disable"; description "Disable OAM loopback"; } // container disable } // choice oam_period_choices } // container oam-period container oam-liveness { description "OAM virtual circuit liveness parameters"; uses apply-advanced; leaf up-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Number of OAM cells to consider VC up"; } leaf down-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Number of OAM cells to consider VC down"; } } // container oam-liveness leaf inverse-arp { type empty; description "Enable inverse ARP reply messages"; } leaf transmit-weight { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } description "ATM2 transmit weight for VC under VP tunnel"; } container epd-threshold { description "Early packet discard threshold for ATM2"; uses epd_threshold_config; } // container epd-threshold } // list multipoint-destination list arp { key "name"; ordered-by user; description "Static Address Resolution Protocol entries"; leaf name { type jt:ipv4addr; description "Destination IP address"; } leaf l2-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Layer 2 interface name for ARP entry"; } choice mac_address_type { leaf mac { type jt:mac-unicast; description "MAC address"; } leaf multicast-mac { type jt:mac-multicast; description "Multicast MAC address"; } } // choice mac_address_type leaf publish { junos:must "((".. mac" || ".. multicast-mac"))"; junos:must-message "mac or multicast-mac must be configured to publish"; type empty; description "Reply to ARP requests for this entry"; } } // list arp list vrrp-group { key "name"; ordered-by user; description "VRRP group"; uses vrrp-group; } // list vrrp-group leaf virtual-gateway-address { junos:must "(!(".. vrrp-group"))"; junos:must-message "vrrp configuration incompatible with virtual gateway address"; type jt:ipv4addr; description "Virtual Gateway IP address"; } } // list address container unnumbered-address { description "Unnumbered interface address/destination prefix"; leaf source { junos:must "("interfaces $$-IFL family inet address")"; junos:must-message "referred interface must have address configured under family inet"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface from which to take local address"; } leaf preferred-source-address { type string; description "Preferred address on the donor interface"; } leaf destination { type jt:ipv4addr; description "Destination address"; } leaf destination-profile { junos:must "("access group-profile $$ ppp")"; junos:must-message "referenced group-profile must be defined and must contain ppp statement"; type string; description "Profile to use for destination address"; } } // container unnumbered-address leaf negotiate-address { junos:must "(!(".. .. .. .. encapsulation multilink-frame-relay-uni-nni"))"; junos:must-message "negotiate-address is not supported with family mlfr-uni-nni "; junos:must "(!(".. .. .. encapsulation multilink-frame-relay-end-to-end"))"; junos:must-message "negotiate-address is not supported with family mlfr-end-to-end "; junos:must "(!(".. location-pool-address"))"; junos:must-message "negotiate-address and location-pool-address must not be defined simultaneously"; junos:must "(!(".. unnumbered-address"))"; junos:must-message "negotiate-address and unnumbered-address must not be defined simultaneously"; junos:must "(!(".. address"))"; junos:must-message "negotiate-address and address must not be defined simultaneously"; type empty; description "Negotiate address with remote"; } leaf destination-udp-port { junos:must "(".. .. .. tunnel encapsulation udp")"; junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10000 .. 10009"; } } description "Choose destination UDP port number"; } } // container inet container iso { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family iso is not supported on encapsulation frame-relay-ppp"; presence "enable iso"; description "OSI ISO protocol parameters"; uses apply-advanced; list address { key "name"; ordered-by user; description "Interface address"; leaf name { type jt:isoaddr; description "Interface address"; } uses apply-advanced; } // list address leaf mtu { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Protocol family maximum transmission unit"; } leaf destination-udp-port { junos:must "(".. .. .. tunnel encapsulation udp")"; junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10030 .. 10039"; } } description "Choose destination UDP port number"; } } // container iso container inet6 { presence "enable inet6"; description "IPv6 protocol parameters"; uses apply-advanced; container dhcpv6-client { junos:must "(!("system services dhcp"))"; junos:must-message "Incompatible with the dhcp server configured under 'system services dhcp'"; junos:must "(!("system autoinstallation"))"; junos:must-message "Incompatible with 'system autoinstallation'"; junos:must "(!(".. address"))"; junos:must-message "Incompatible with interface assigned with address"; junos:must "(!(any "forwarding-options dhcp-relay dhcpv6 group <*> interface ${interface}.${unit}"))"; junos:must-message "DHCPv6 client and relay cannot be configured on the same interface "; junos:must "(!(any "system services dhcp-local-server dhcpv6 group <*> interface ${interface}.${unit}"))"; junos:must-message "DHCPv6 client and server cannot be configured on the same interface "; description "Dynamic Host Configuration Protocol DHCPv6 client configuration"; uses apply-advanced; leaf client-type { type enumeration { enum "stateful" { value 0; description "Stateful client type for address assignment."; } enum "autoconfig" { junos:must "("protocols router-advertisement interface ${interface}.${unit}")"; junos:must-message "Interface for ra messages is must for auto mode"; junos:must "(!("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client update-router-advertisement"))"; junos:must-message "Incompatible with 'dhcpv6-client update-router-advertisement'"; junos:must "(!("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client client-ia-type ia-pd"))"; junos:must-message "Incompatible with 'client-ia-type ia-pd'"; value 1; description "Autoconfig client type for router-advertisement"; } } description "DHCPv6 client type"; } list client-ia-type { key "name"; ordered-by user; description "DHCPv6 client identity association type"; leaf name { type enumeration { enum "ia-na" { value 0; description "Identity Association-Non-temporary Address"; } enum "ia-pd" { value 1; description "Identity Association-Prefix Address"; } } } uses apply-advanced; } // list client-ia-type container rapid-commit { presence "enable rapid-commit"; description "Option is used to signal the use of the two message exchange for address assignment"; } // container rapid-commit container prefix-delegating { junos:must "("interfaces ${interface} unit ${unit} family inet6 dhcpv6-client client-ia-type ia-pd")"; junos:must-message "Incompatible with out 'client-ia-type ia-pd'"; description "Prefix delegating parameters"; uses apply-advanced; leaf preferred-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 64"; } } description "Client preferred prefix length"; } leaf sub-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 127"; } } description "The sub prefix length for LAN interfaces"; } } // container prefix-delegating container client-identifier { description "DHCP Server identifies a client by client-identifier value "; leaf duid-type { type enumeration { enum "duid-llt" { value 0; description "Link-layer address plus time"; } enum "vendor" { value 1; description "Vendor-assigned unique ID based on Enterprise Number"; } enum "duid-ll" { value 2; description "Link-layer address"; } } description "DUID identifying a client"; } } // container client-identifier leaf vendor-id { type string { length "1 .. 60"; } description "Vendor class id for the dhcpv6 client"; } list req-option { key "name"; ordered-by user; description "DHCPV6 client requested option configuration"; leaf name { type enumeration { enum "dns-server" { value 0; description "Dns-server option"; } enum "domain" { value 1; description "Dns-server option"; } enum "ntp-server" { value 2; description "Ntp-server option"; } enum "time-zone" { value 3; description "Time-zone option"; } enum "sip-server" { value 4; description "Sip-server option"; } enum "sip-domain" { value 5; description "Sip-domain option"; } enum "nis-server" { value 6; description "Nis-server option"; } enum "nis-domain" { value 7; description "Nis-domain option"; } enum "fqdn" { value 8; description "Fully-qualified-domain option"; } enum "vendor-spec" { value 9; description "Vendor-spec option"; } enum "zero-touch-redirect" { value 10; description "Zero-touch-redirect"; } enum "bootfile-url" { value 11; description "Bootfile url"; } enum "bootfile-param" { value 12; description "Bootfile param"; } } } uses apply-advanced; } // list req-option container options { description "DHCP options"; uses apply-advanced; list number { key "name"; description "DHCP option code"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "DHCP option identifier code"; } choice option-type-choice { leaf hex-string { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 510"; } description "Hexadecimal string"; } } // choice option-type-choice } // list number } // container options leaf retransmission-attempt { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 50000"; } } default "9"; description "Number of attempts to retransmit the DHCPV6 client protocol packet"; } } // container dhcpv6-client container rpf-check { presence "enable rpf-check"; description "Enable reverse-path-forwarding checks on this interface"; uses apply-advanced; leaf fail-filter { type string; description "Name of filter applied to packets failing RPF check"; } container mode { description "Mode for reverse path forwarding"; leaf loose { type empty; description "Reverse-path-forwarding loose mode"; } } // container mode } // container rpf-check container accounting { description "Interface-based accounting options"; uses apply-advanced; container source-class-usage { uses apply-advanced; leaf input { type empty; description "Interface for source-class-usage input"; } leaf output { type empty; description "Interface for source-class-usage output"; } } // container source-class-usage leaf destination-class-usage { type empty; description "Enable destination class usage on this interface"; } } // container accounting leaf mtu { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Protocol family maximum transmission unit"; } leaf nd6-stale-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 18000"; } } units "seconds"; description "Stale time to reconfirm reachability with inet6 neighbour"; } leaf no-neighbor-learn { type empty; description "Disable neighbor address learning on interface"; } container ndp-proxy { description "Enable ndp proxy on interface"; uses apply-advanced; leaf interface-restricted { type empty; description "Enable ndp interface proxy restricted to interface"; } } // container ndp-proxy container dad-proxy { junos:must "(".. ndp-proxy")"; junos:must-message "ndp-proxy must be configured"; description "DAD proxy on interface"; uses apply-advanced; leaf interface-restricted { type empty; description "Enable DAD interface proxy restricted to interface"; } } // container dad-proxy leaf nd6-max-cache { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000000"; } } description "Max interface ND nexthop cache size"; } leaf nd6-new-hold-limit { junos:must "(".. nd6-max-cache")"; junos:must-message "Interface max ND cache size must be configured"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 2000000"; } } description "Max no. of new unresolved nexthops"; } leaf no-redirects { type empty; description "Do not redirect traffic"; } leaf allow-filter-on-re { type empty; description "Enable kernel filter on network ports"; } container filter { description "Packet filtering"; uses apply-advanced; choice input_choice { container input { description "Filter to be applied to received packets"; leaf filter-name { type string; description "Name of the filter"; } leaf shared-name { type string; description "Filter shared-name of instances of interface-shared filter"; } leaf precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } } // container input leaf-list input-list { type string; ordered-by user; description "List of filter modules applied to received packets "; } } // choice input_choice choice output_choice { container output { description "Filter to be applied to transmitted packets"; leaf filter-name { type string; description "Name of the filter"; } leaf shared-name { type string; description "Filter shared-name of instances of interface-shared filter"; } leaf precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } } // container output leaf-list output-list { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } } // choice output_choice container adf { description "Ascend Data Filter definition"; uses apply-advanced; list rule { key "name"; ordered-by user; description "Set of ADF rules"; leaf name { type string; description "Value for a single rule"; } uses apply-advanced; } // list rule leaf counter { type empty; description "Add a counter to each rule"; } leaf input-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the input rules"; } leaf not-mandatory { type empty; description "No errors will be reported if no rules are present"; } leaf output-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the output rules"; } } // container adf leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Group to which interface belongs"; } } // container filter container policer { description "Interface policing"; uses apply-advanced; leaf input { type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer container service { description "Service operations"; uses apply-advanced; container input { description "Service sets to consider for received packets"; uses apply-advanced; list service-set { key "name"; ordered-by user; description "Service set to consider for received packets"; leaf name { junos:must "((!(".. .. .. .. .. .. demux-source") && !(".. .. .. .. .. .. demux-destination")))"; junos:must-message "Service set cannot be configured on interfaces with demux-source or demux-destination"; junos:must "("services service-set $$ interface-service")"; junos:must-message "this service set must be an interface service"; type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots."; } description "Name of service set"; } uses apply-advanced; leaf service-filter { type string; description "Name of service filter"; } } // list service-set leaf post-service-filter { type string; description "Post-service filter to apply to received packets"; } } // container input container output { description "Service sets to consider for transmitted packets"; uses apply-advanced; list service-set { key "name"; ordered-by user; description "Service set to consider for transmitted packets"; leaf name { type string { junos:posix-pattern "^[[:alnum:]][[:alnum:]/.:_-]*$"; junos:pattern-message "Must be a string beginning with a number or letter and consisting of letters, numbers, dashes, underscores, forward slashes, colons and dots."; } description "Name of service set"; } uses apply-advanced; leaf service-filter { type string; description "Name of service filter"; } } // list service-set } // container output } // container service container tunnel-termination { presence "enable tunnel-termination"; description "Tunnel termination"; } // container tunnel-termination list address { junos:must "(!(".. unnumbered-address"))"; junos:must-message "ipv6 unnumbered-address and ipv6 address must not be defined simultaneously"; key "name"; ordered-by user; description "Interface address or destination prefix"; leaf name { type jt:ipv6prefix; description "Interface address or destination prefix"; } uses apply-advanced; leaf destination { type jt:ipv6addr; description "Destination address"; } leaf eui-64 { type empty; description "Generate EUI-64 interface ID"; } leaf primary { type empty; description "Candidate for primary address in system"; } leaf preferred { type empty; description "Preferred address on interface"; } leaf master-only { type empty; description "Master management IP address for router"; } list ndp { key "name"; ordered-by user; description "Static Neighbor Discovery Protocol entries"; leaf name { type jt:ipv6addr; description "Destination IP address"; } leaf l2-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Layer 2 interface name for NDP entry"; } choice mac_address_type { leaf mac { type jt:mac-unicast; description "MAC address"; } leaf multicast-mac { type jt:mac-multicast; description "Multicast MAC address"; } } // choice mac_address_type leaf publish { junos:must "((".. mac" || ".. multicast-mac"))"; junos:must-message "either 'mac' or 'multicast-mac' must be configured along with 'publish' statment"; type empty; description "Reply to NDP requests for this entry"; } } // list ndp list vrrp-inet6-group { junos:must "(!(".. eui-64"))"; junos:must-message "'vrrp-inet6-group' is not supported when 'eui-64' is configured"; key "name"; ordered-by user; description "VRRP group"; uses vrrp-group; } // list vrrp-inet6-group leaf virtual-gateway-address { junos:must "(!(".. vrrp-inet6-group"))"; junos:must-message "vrrp configuration incompatible with virtual gateway address"; type jt:ipv6addr; description "Virtual Gateway IP address"; } leaf subnet-router-anycast { type empty; description "Create a subnet roter anycast address for this address."; } } // list address choice dad-disable-choice { leaf dad-disable { type empty; description "Disable duplicate-address-detection"; } leaf no-dad-disable { type empty; description "Don't disable duplicate-address-detection"; } } // choice dad-disable-choice leaf destination-udp-port { junos:must "(".. .. .. tunnel encapsulation udp")"; junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10010 .. 10019"; } } description "Choose destination UDP port number"; } } // container inet6 container mpls { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family mpls is not supported on encapsulation frame-relay-ppp"; presence "enable mpls"; description "MPLS protocol parameters"; uses apply-advanced; leaf mtu { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Protocol family maximum transmission unit"; } container filter { description "Packet filtering"; uses apply-advanced; choice input_choice { leaf input { type string; description "Name of filter applied to received packets"; } leaf-list input-list { type string; ordered-by user; description "List of filter modules applied to received packets "; } } // choice input_choice leaf-list input-chain { type string; ordered-by user; description "List of filter modules applied to received packets "; } choice output_choice { leaf output { type string; description "Name of filter applied to transmitted packets"; } leaf-list output-list { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } } // choice output_choice leaf-list output-chain { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Interface group to which interface belongs"; } } // container filter container policer { description "Interface policing"; uses apply-advanced; leaf input { type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer leaf destination-udp-port { junos:must "(".. .. .. tunnel encapsulation udp")"; junos:must-message "destination-udp-port can be configured only for encapsulation udp on fti interface"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10020 .. 10029"; } } description "Choose destination UDP port number"; } } // container mpls container mlppp { junos:must "(!("interfaces ${interface} container-options"))"; junos:must-message "mlppp is not supported for container interfaces"; description "Multilink PPP protocol parameters"; uses apply-advanced; leaf bundle { junos:must "((!(".. .. .. dial-options") || "interfaces $$-IFL encapsulation multilink-ppp"))"; junos:must-message "Bundle interface must be configured"; junos:must "((!(".. .. .. pppoe-options") || "interfaces $$-IFL encapsulation multilink-ppp"))"; junos:must-message "Bundle interface must be configured"; type string; description "Logical interface name this link will join"; } choice anchor-points { case case_1 { } // case case_1 case case_2 { } // case case_2 } // choice anchor-points leaf dynamic-profile { junos:must "("dynamic-profiles $$")"; junos:must-message "referenced dynamic-profile must be defined"; type string { length "1 .. 80"; } description " dynamic profile for interface to use"; } } // container mlppp container mlfr-end-to-end { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family mlfr-end-to-end is not supported on encapsulation frame-relay-ppp"; presence "enable mlfr-end-to-end"; description "Multilink Frame Relay end-to-end protocol parameters"; uses apply-advanced; leaf bundle { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Logical interface name this link will join"; } } // container mlfr-end-to-end container mlfr-uni-nni { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family mlfr-uni-uni is not supported on encapsulation frame-relay-ppp"; presence "enable mlfr-uni-nni"; description "Multilink Frame Relay UNI NNI protocol parameters"; uses apply-advanced; leaf bundle { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Logical interface name this link will join"; } } // container mlfr-uni-nni container ccc { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family ccc is not supported on encapsulation frame-relay-ppp"; presence "enable ccc"; description "Circuit cross-connect parameters"; uses apply-advanced; container filter { description "Packet filtering"; uses apply-advanced; choice input_choice { leaf input { type string; description "Name of filter applied to received packets"; } leaf-list input-list { type string; ordered-by user; description "List of filter modules applied to received packets "; } } // choice input_choice leaf-list input-chain { type string; ordered-by user; description "List of filter modules applied to received packets "; } choice output_choice { leaf output { type string; description "Name of filter applied to transmitted packets"; } leaf-list output-list { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } } // choice output_choice leaf-list output-chain { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Interface group to which interface belongs"; } } // container filter container policer { description "Interface policing"; uses apply-advanced; leaf input { type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer leaf translate-fecn-and-becn { type empty; description "Translate FECN and BECN bits"; } choice de-or-plp { leaf translate-discard-eligible { type empty; description "Translate DE bit"; } case case_2 { } // case case_2 } // choice de-or-plp leaf keep-address-and-control { type empty; description "Don't strip PPP address and control bytes"; } } // container ccc container tcc { junos:must "(!(".. .. encapsulation frame-relay-ppp"))"; junos:must-message "family tcc is not supported on encapsulation frame-relay-ppp"; presence "enable tcc"; description "Translational cross-connect parameters"; uses apply-advanced; container policer { description "Interface policing"; uses apply-advanced; leaf input { type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer container proxy { presence "enable proxy"; uses apply-advanced; leaf inet-address { type jt:ipv4addr; description "Remote host address on non-Ethernet side of Ethernet TCC"; } } // container proxy container remote { presence "enable remote"; uses apply-advanced; leaf inet-address { type jt:ipv4addr; description "Remote host address on Ethernet side of Ethernet TCC"; } leaf mac-address { type jt:mac-addr; description "Remote host MAC address on Ethernet side of Ethernet TCC"; } } // container remote } // container tcc container vpls { presence "enable vpls"; description "Virtual private LAN service parameters"; uses apply-advanced; leaf core-facing { type empty; description "Interface is core facing"; } } // container vpls container bridge { junos:must "((!(".. vpls") && (!(".. inet") && (!(".. inet6") && (!(".. ccc") && (!(".. ethernet-switching") && (!(".. iso") && (!(".. llc2") && (!(".. mpls") && (!(".. tcc") && (!(".. pppoe") && !(".. gre"))))))))))))"; junos:must-message "family bridge and rest of the families are mutually exclusive"; presence "enable bridge"; description "Layer-2 bridging parameters"; uses apply-advanced; leaf core-facing { type empty; description "Interface is core facing"; } leaf interface-mode { type enumeration { enum "access" { junos:must "((!("interfaces ${interface} vlan-tagging") && (!("interfaces ${interface} flexible-vlan-tagging") && !("interfaces ${interface} stacked-vlan-tagging"))))"; junos:must-message "interface-mode access is allowed only for untagged interfaces"; value 0; description "Interface mode is access"; } enum "trunk" { junos:must "(!("interfaces ${interface} no-native-vlan-insert"))"; junos:must-message "'interface-mode trunk' must not be configured with 'no-native-vlan-insert'"; junos:must "((("protocols mvrp interface ${interface}" || any "routing-instances <*> protocols mvrp interface ${interface}") || (".. vlan-id-list" || (".. isid-list" || (".. inner-vlan-id-list" || (".. vlan members" || ("..inner-vlan members" || (".. vlan-id" || ".. vlan-auto-sense"))))))))"; junos:must-message "'interface-mode trunk' must be defined with either 'vlan-id-list','isid-list', 'inner-vlan-id-list' or the interface must be configured for 'protocols mvrp' or 'vlan-auto-sense'"; value 1; description "Interface mode is trunk"; } } description "Interface mode (access or trunk)"; } leaf vlan-auto-sense { junos:must "(".. interface-mode trunk")"; junos:must-message "vlan-auto-sense can be enabled only on trunk interfaces"; type empty; description "Enable VLAN auto sense on this interface"; } leaf bridge-domain-type { type enumeration { enum "svlan" { junos:must "(".. isid-list all-service-groups")"; junos:must-message "bridge-domain-type svlan is allowed only for isid tagged interfaces"; junos:must "(".. interface-mode trunk")"; junos:must-message "bridge-domain-type svlan is allowed only for trunk interfaces"; value 0; description "Bridge domain type svlan"; } enum "bvlan" { junos:must "(".. isid-list all")"; junos:must-message "bridge-domain-type bvlan is allowed only for isid tagged interfaces"; junos:must "(".. interface-mode trunk")"; junos:must-message "bridge-domain-type bvlan is allowed only for trunk interfaces"; value 1; description "Bridge domain type bvlan"; } } description "Bridge domain type (svlan or bvlan)"; } leaf inter-switch-link { junos:must "(".. interface-mode trunk")"; junos:must-message "'Inter switch link' is supported only under trunk interface mode"; type empty; description "PVLAN inter switch link"; } choice vlan_list { leaf vlan-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Access mode and trunk mode VLAN membership"; } leaf-list vlan-id-list { junos:must "((!(".. .. .. vlan-id") && !(".. .. .. vlan-tags")))"; junos:must-message "'vlan-id-list' cannot be used on interface with vlan-id/vlan-tags"; junos:must "(!("interfaces ${interface} stacked-vlan-tagging"))"; junos:must-message "'vlan-id-list' is not supported on stacked-vlan-tagging mode"; junos:must "(".. interface-mode trunk")"; junos:must-message "'vlan-id-list' statement supported only under trunk interface mode"; type jt:vlan-range; description "Trunk mode VLAN membership for this interface"; } leaf-list inner-vlan-id-list { junos:must "((!(".. .. .. vlan-tags inner") && !(".. .. .. vlan-tags inner-range")))"; junos:must-message "'inner-vlan-id-list' cannot be used on interface with vlan-tags inner/inner-range"; junos:must "((".. .. .. vlan-id" || ".. .. .. vlan-tags"))"; junos:must-message "'inner-vlan-id-list' can be used only on interface with vlan-id/vlan-tags"; junos:must "("interfaces ${interface} flexible-vlan-tagging")"; junos:must-message "'inner-vlan-id-list' is supported only on flexible-vlan-tagging mode"; junos:must "(".. interface-mode trunk")"; junos:must-message "'inner-vlan-id-list' statement supported only under trunk interface mode"; type jt:vlan-range; description "Trunk mode VLAN membership for this interface based on inner VLAN tag"; } } // choice vlan_list container vlan-rewrite { junos:must "((".. inner-vlan-id-list" || ".. vlan-id-list"))"; junos:must-message "'vlan-rewrite' statement can be used only with 'vlan-id-list' or inner-vlan-id-list configured"; junos:must "(".. interface-mode trunk")"; junos:must-message "'vlan-rewrite' statement supported only under trunk interface mode"; description "Specify vlan translation"; uses apply-advanced; list translate { key "name"; ordered-by user; description "Translate incoming VLAN tag"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Specify the incoming VLAN tag"; } leaf to-vlan-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Specify the bridge-domain VLAN-ID"; } } // list translate } // container vlan-rewrite choice isid_list { leaf isid-list { type enumeration { enum "all-service-groups" { junos:must "(".. interface-mode trunk")"; junos:must-message "'all-service-groups' statement supported only under trunk interface mode"; value 0; description "Map all ISIDs specified under the service-groups"; } enum "all" { junos:must "(".. interface-mode trunk")"; junos:must-message "'all' statement supported only under trunk interface mode"; value 1; description "Map all ISIDs"; } } description "Specify the ISID list"; } } // choice isid_list container recovery-timeout { junos:must "(".. storm-control")"; junos:must-message "Recovery timeout should be configured only with storm-control"; description "Recovery timeout for this interface"; leaf time-in-seconds { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; } } // container recovery-timeout } // container bridge container ethernet-switching { junos:must "((!(".. vpls") && (!(".. inet") && (!(".. inet6") && (!(".. bridge") && (!(".. ccc") && (!(".. iso") && (!(".. llc2") && (!(".. mpls") && (!(".. tcc") && (!(".. pppoe") && !(".. gre"))))))))))))"; junos:must-message "Family ethernet-switching and rest of the families are mutually exclusive"; presence "enable ethernet-switching"; description "Ethernet switching parameters"; uses ethernet-switching-type; } // container ethernet-switching container fibre-channel { presence "enable fibre-channel"; description "Fibre channel switching parameters"; uses fibre-channel-type; } // container fibre-channel container any { presence "enable any"; description "Parameters for 'any' family"; uses apply-advanced; container filter { description "Layer 2 packet filtering"; uses apply-advanced; leaf input { junos:must "(("firewall family any filter $$" || (!("firewall") && ".. .. .. .. .. .. firewall family any filter $$")))"; junos:must-message "referenced filter must be defined under firewall family any"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of filter applied to received packets"; } leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Group to which interface belongs"; } } // container filter } // container any } // container family leaf service-domain { type enumeration { enum "inside" { value 0; description "Inside network"; } enum "outside" { value 1; description "Outside network"; } } description "Service domain to which interface belongs"; } leaf copy-tos-to-outer-ip-header { type empty; description "Copy IP payload header's ToS field to GRE delivery header"; } container load-balancing-options { junos:must "(!(".. .. load-balancing-options high-availability-options one-to-one"))"; junos:must-message "load-balancing-options are used when number of active members is more than one"; description "AMS subunit load balancing options"; uses apply-advanced; leaf preferred-active { junos:must "((".. .. .. load-balancing-options member-interface $$" && !(".. .. .. load-balancing-options high-availability-options many-to-one preferred-backup $$")))"; junos:must-message "Active should be one of member-interfaces excluding preferred-backup"; type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Preferred active Interface name"; } leaf disable-hash { junos:must "(".. .. service-domain")"; junos:must-message "service-domain must be configured if disable-hash is enabled"; junos:must "(!(".. hash-keys"))"; junos:must-message "hash-keys must not be configured if disable-hash is enabled"; type empty; description "Hash based distribution is not needed for this subunit"; } container hash-keys { uses apply-advanced; leaf-list ingress-key { type enumeration { enum "source-ip" { value 0; description "Source Ip Address"; } enum "destination-ip" { value 1; description "Destination Ip Address"; } enum "protocol" { value 2; description "Protocol"; } enum "iif" { value 3; description "Incoming Interface"; } } ordered-by user; description "Hash Key for the ingress direction"; } leaf-list egress-key { type enumeration { enum "source-ip" { value 0; status deprecated; description "Source Ip Address"; } enum "destination-ip" { value 1; status deprecated; description "Destination Ip Address"; } enum "protocol" { value 2; status deprecated; description "Protocol"; } enum "oif" { value 3; status deprecated; description "Outgoing Interface"; } } ordered-by user; status deprecated; description "Hash Key for the egress direction"; } leaf ipv6-source-prefix-length { type enumeration { enum "56" { value 0; description "56 bit IPv6 address prefix"; } enum "64" { value 1; description "64 bit IPv6 address prefix"; } enum "96" { value 2; description "96 bit IPv6 address prefix"; } enum "128" { value 3; description "Complete 128 bit IPv6 address"; } } description "IPv6 source prefix length for hash computation"; } } // container hash-keys } // container load-balancing-options container interface-state { description "IRB interface state computation"; uses apply-advanced; choice state { leaf local-interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "IRB State computation based on loopback AE port state"; } } // choice state container hold-time { description "Delay before marking interface up or down for defect"; uses apply-advanced; leaf up { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Delay in seconds before marking IRB interface up"; } leaf down { type union { type uint32; type string { pattern "<.*>|$.*"; } } units "seconds"; description "Delay in seconds before marking IRB interface down"; } } // container hold-time } // container interface-state leaf virtual-gateway-v4-mac { type jt:mac-unicast; description "Configure virtual gateway IPV4 virtual MAC address"; } leaf virtual-gateway-v6-mac { type jt:mac-unicast; description "Configure virtual gateway IPV6 virtual MAC address"; } leaf etree-ac-role { type enumeration { enum "root" { value 0; description "ETREE root interface"; } enum "leaf" { value 1; description "ETREE leaf interface"; } } description "ETREE attachment circuit role"; } } // list unit } // grouping lr_interfaces_type grouping dcd_shaping_config { description "Traffic-shaping profile"; uses apply-advanced; choice useless_shaping_choice { container cbr { presence "enable cbr"; description "Constant bandwidth utilization"; leaf cbr-value { type string; description "Constant bandwidth utilization"; } } // container cbr container vbr { description "Variable bandwidth utilization"; leaf peak { type string; description "Peak rate"; } leaf sustained { type string; description "Sustained rate"; } leaf burst { type string; description "Burst size"; } } // container vbr container rtvbr { description "ATM2 real-time variable bandwidth utilization"; leaf peak { type string; description "Peak rate"; } leaf sustained { type string; description "Sustained rate"; } leaf burst { type string; description "Burst size"; } } // container rtvbr } // choice useless_shaping_choice leaf queue-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16383"; } } description "Queue length"; } } // grouping dcd_shaping_config grouping dhcp-client-type { description "Dynamic Host Configuration Protocol client configuration"; uses apply-advanced; container client-identifier { description "DHCP server identifies a client by client-identifier value "; uses apply-advanced; choice client-identifier-choice { leaf ascii { type string; description "Client identifier as an ASCII string"; } leaf hexadecimal { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; } description "Client identifier as a hexadecimal string"; } } // choice client-identifier-choice container user-id { description "Add user id to client-id option "; choice user-id-choice { leaf ascii { type string; description "Client identifier as an ASCII string"; } leaf hexadecimal { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; } description "Client identifier as a hexadecimal string"; } } // choice user-id-choice } // container user-id container prefix { description "Add prefix to client-id option"; uses apply-advanced; leaf host-name { type empty; description "Add router host name to client-id option"; } leaf logical-system-name { type empty; description "Add logical system name to client-id option"; } leaf routing-instance-name { type empty; description "Add routing instance name to client-id option"; } } // container prefix leaf use-interface-description { type enumeration { enum "logical" { value 0; description "Use the logical interface description"; } enum "device" { value 1; description "Use the device interface description"; } } description "Use the interface description"; } leaf hardware-type { type union { type string { pattern "<.*>|$.*"; } type uint8 { range "0 .. 255"; } } default "0"; description "Hardware type"; } } // container client-identifier container no-dns-install { presence "enable no-dns-install"; description "Do not install DNS information learned from DHCP server"; } // container no-dns-install leaf lease-time { type string; units "seconds"; description "Lease time in seconds requested in DHCP client protocol packet"; } leaf retransmission-attempt { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 50000"; } } default "4"; description "Number of attempts to retransmit the DHCP client protocol packet"; } leaf retransmission-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "4 .. 64"; } } units "seconds"; default "4"; description "Number of seconds between successive retransmission"; } leaf metric { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } default "0"; description "Client initiated default-route metric"; } leaf server-address { type jt:ipv4addr; description "DHCP Server-address"; } leaf update-server { type empty; description "Propagate TCP/IP settings to DHCP server"; } leaf vendor-id { type string { length "1 .. 60"; } description "Vendor class id for the DHCP Client"; } leaf force-discover { type empty; description "Send DHCPDISCOVER after DHCPREQUEST retransmission failure"; } container options { description "DHCP options"; uses apply-advanced; list number { key "name"; description "DHCP option code"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "DHCP option identifier code"; } choice option-type-choice { leaf hex-string { type string { junos:posix-pattern "^[[:xdigit:]]+$"; junos:pattern-message "Must be hexadecimal digits (0-9, a-f, A-F)"; length "1 .. 510"; } description "Hexadecimal string"; } } // choice option-type-choice } // list number leaf no-hostname { type empty; description "Do not carry hostname (RFC option code is 12) in packet"; } } // container options list requested-options { key "name"; description "DHCP options"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "DHCP option identifier code"; } } // list requested-options } // grouping dhcp-client-type grouping epd_threshold_config { uses apply-advanced; leaf epd-threshold-plp0 { type string; units "cells"; description "Early packet discard threshold value"; } leaf plp1 { type string; units "cells"; description "Early packet drop threshold value for PLP 1"; } } // grouping epd_threshold_config grouping ethernet-switching-type { description "Ethernet switching family"; uses apply-advanced; leaf port-mode { type enumeration { enum "access" { value 0; description "Interface mode is access"; } enum "tagged-access" { value 1; description "Interface mode is tagged-access"; } enum "trunk" { value 2; description "Interface mode is trunk"; } } description "Type of port mode"; } leaf interface-mode { type enumeration { enum "access" { junos:must "((!("interfaces ${interface} vlan-tagging") && (!("interfaces ${interface} flexible-vlan-tagging") && (!("interfaces ${interface} stacked-vlan-tagging") && !("interfaces ${interface} encapsulation extended-vlan-bridge")))))"; junos:must-message "interface-mode access is allowed only for untagged interfaces, also not allowed with flexible-vlan-tagging and extended-vlan-bridge"; value 0; description "Interface mode is access"; } enum "trunk" { junos:must "((!(("protocols dot1x authenticator interface ${interface}.${unit}" || "protocols dot1x supplicant interface ${interface}.${unit}")) || ("interfaces ${interface} native-vlan-id" && !("interfaces ${interface} flexible-vlan-tagging"))))"; junos:must-message "Must configure native-vlan-id but no flexible-vlan-tagging for dot1x enabled port"; junos:must "(!("interfaces ${interface} encapsulation extended-vlan-bridge"))"; junos:must-message "interface-mode is not allowed for extended-vlan-bridge"; value 1; description "Interface mode is trunk"; } } default "access"; description "Type of interface mode"; } leaf inter-switch-link { junos:must "(".. interface-mode trunk")"; junos:must-message "'Inter switch link' is supported only under trunk interface mode"; type empty; description "PVLAN inter switch link"; } leaf reflective-relay { junos:must "(".. port-mode tagged-access")"; junos:must-message "Reflective relay is supported only on tagged-access port"; type empty; description "Reflective-relay mode for this interface"; } choice vlan_choice_list { container vlan { description "Virtual LAN parameters"; uses apply-advanced; leaf-list members { type string; ordered-by user; description "Membership for this interface (name or id)"; } } // container vlan container inner-vlan { description "Trunk mode vlan membership for this interface"; uses apply-advanced; leaf-list members { type string; ordered-by user; description "Membership for this interface (name or id)"; } } // container inner-vlan leaf-list inner-vlan-id-list { junos:must "((!(".. .. .. vlan-tags inner") && !(".. .. .. vlan-tags inner-range")))"; junos:must-message "'inner-vlan-id-list' cannot be used on interface with vlan-tags inner or inner-range configured"; junos:must "((".. .. .. vlan-id" || ".. .. .. vlan-tags"))"; junos:must-message "'inner-vlan-id-list' can be used only on interface with vlan-id/vlan-tags"; junos:must "("interfaces ${interface} flexible-vlan-tagging")"; junos:must-message "'inner-vlan-id-list' is supported only on flexible-vlan-tagging mode"; junos:must "(".. interface-mode trunk")"; junos:must-message "'inner-vlan-id-list' statement supported only under trunk interface mode"; type jt:vlan-range; description "Trunk mode VLAN membership for this interface based on inner VLAN tag"; } } // choice vlan_choice_list leaf vlan-auto-sense { junos:must "(".. interface-mode trunk")"; junos:must-message "vlan-auto-sense can be enabled only on trunk ports"; type empty; description "Enable VLAN auto sense on this interface"; } leaf bridge-domain-type { type enumeration { enum "svlan" { junos:must "(".. isid-list all-service-groups")"; junos:must-message "bridge-domain-type SVLAN is allowed only for ISID tagged interfaces"; junos:must "(".. interface-mode trunk")"; junos:must-message "bridge-domain-type SVLAN is allowed only for trunk interfaces"; value 0; description "Bridge domain type SVLAN"; } enum "bvlan" { junos:must "(".. isid-list all")"; junos:must-message "bridge-domain-type BVLAN is allowed only for ISID tagged interfaces"; junos:must "(".. interface-mode trunk")"; junos:must-message "bridge-domain-type BVLAN is allowed only for trunk interfaces"; value 1; description "Bridge domain type BVLAN"; } } description "Bridge domain type"; } container vlan-rewrite { junos:must "((".. inner-vlan-id-list" || ".. vlan members"))"; junos:must-message "'vlan-rewrite' statement can be used only with 'vlan members' or inner-vlan-id-list configured"; junos:must "(".. interface-mode trunk")"; junos:must-message "'vlan-rewrite' statement supported only under trunk interface mode"; description "Specify VLAN translation"; uses apply-advanced; list translate { key "name"; ordered-by user; description "Translate incoming VLAN tag"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Specify the incoming VLAN tag"; } leaf to-vlan-id { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 4094"; } } description "Specify the bridge-domain VLAN-ID"; } } // list translate } // container vlan-rewrite leaf native-vlan-id { type string; description "Untagged packets on a trunk/tagged-access interface belong to this vlan"; } choice isid_list { leaf isid-list { type enumeration { enum "all-service-groups" { junos:must "(".. interface-mode trunk")"; junos:must-message "'all-service-groups' statement supported only under trunk interface mode"; value 0; description "Map all ISIDs specified under the service-groups"; } enum "all" { junos:must "(".. interface-mode trunk")"; junos:must-message "'all' statement supported only under trunk interface mode"; value 1; description "Map all ISIDs"; } } description "Specify the ISID list"; } } // choice isid_list leaf core-facing { type empty; description "Interface is core facing"; } container filter { description "Packet filtering"; uses apply-advanced; leaf input { type string; description "Name of filter applied to received packets"; } leaf input-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } leaf-list input-list { type string; ordered-by user; description "List of filter modules applied to received packets "; } leaf output { type string; description "Name of filter applied to transmitted packets"; } leaf output-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the filter"; } leaf-list output-list { type string; ordered-by user; description "List of filter modules applied to transmitted packets "; } container adf { description "Ascend Data Filter definition"; uses apply-advanced; list rule { key "name"; ordered-by user; description "Set of ADF rules"; leaf name { type string; description "Value for a single rule"; } uses apply-advanced; } // list rule leaf counter { type empty; description "Add a counter to each rule"; } leaf input-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the input rules"; } leaf not-mandatory { type empty; description "No errors will be reported if no rules are present"; } leaf output-precedence { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Precedence of the output rules"; } } // container adf leaf group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Group to which interface belongs"; } } // container filter container storm-control { description "Storm control profile name to bind"; uses apply-advanced; leaf profile-name { junos:must "("forwarding-options storm-control-profiles $$")"; junos:must-message "Storm profile name must be defined in the [edit forwarding-options storm-control-profiles] hierarchy"; type string; description "Profile name"; } } // container storm-control container recovery-timeout { description "Recovery timeout for this interface"; leaf time-in-seconds { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 3600"; } } units "seconds"; } } // container recovery-timeout } // grouping ethernet-switching-type grouping fibre-channel-type { description "Fibre Channel switching family"; uses apply-advanced; leaf port-mode { type enumeration { enum "f-port" { value 0; description "Fabric port"; } enum "e-port" { value 1; description "Inter-switch port"; } enum "np-port" { value 2; description "Proxy node port"; } enum "auto" { value 3; description "Interface mode (F/E) is determined at runtime"; } } description "Port mode"; } leaf no-npiv { junos:must "((".. port-mode f-port" || (".. port-mode auto" || !(".. port-mode"))))"; junos:must-message "Interface must be f-port or auto to disable NPIV"; type empty; description "Disable NPIV"; } container fc-fabric { description "Virtual fabric parameters"; uses apply-advanced; leaf-list members { type string; ordered-by user; description "Virtual Fabric Membership for this interface (name or id)"; } } // container fc-fabric leaf native-fabric { type string { junos:posix-pattern "^([[:alpha:]][[:alnum:]_.-]+)|^([1-9][0-9]{0,2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-4])$"; junos:pattern-message "Must be a valid FC fabric name or ID"; } description "FC frames with no virtual fabric header on a interface belong to this fabric"; } } // grouping fibre-channel-type grouping keepalives_type { uses apply-advanced; leaf interval { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32767"; } } units "seconds"; description "Keepalive period"; } leaf up-count { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Keepalive received to bring link up"; } leaf down-count { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 255"; } } description "Keepalive missed to bring link down"; } } // grouping keepalives_type grouping 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 mac_addr_list_items { leaf name { type jt:mac-addr; description "Mac Address"; } uses apply-advanced; } // grouping mac_addr_list_items grouping mac_list { description "MAC address"; leaf name { type jt:mac-addr; } uses apply-advanced; container policer { description "MAC policing"; uses apply-advanced; leaf input { type string; description "Name of policer applied to received packets"; } leaf output { type string; description "Name of policer applied to transmitted packets"; } } // container policer } // grouping mac_list grouping 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 match_interface_object { leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Interface to match"; } } // grouping match_interface_object grouping match_interface_object_oam { leaf name { type union { type jt:interface-wildcard; type string { pattern "<.*>|$.*"; } } description "Interface to match"; } } // grouping match_interface_object_oam grouping match_interface_set_object { leaf name { type string; description "Interface set to match"; } } // grouping match_interface_set_object grouping match_simple_dscp_value { uses apply-advanced; leaf value_keyword { type string; } } // grouping match_simple_dscp_value grouping match_simple_port_value { uses apply-advanced; leaf value_keyword { type string; } } // grouping match_simple_port_value grouping match_simple_protocol_value { uses apply-advanced; leaf value_keyword { type string; } } // grouping match_simple_protocol_value grouping metric_expression_type { uses apply-advanced; container metric { description "Parameters for metric attribute"; leaf multiplier { type decimal64 { fraction-digits 9; } description "Coefficient for metric attribute"; } leaf offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Offset for metric attribute"; } } // container metric container metric2 { description "Parameters for metric2 attribute"; leaf multiplier { type decimal64 { fraction-digits 9; } default "1.0"; description "Coefficient for metric2 attribute"; } leaf offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Offset for metric2 attribute"; } } // container metric2 } // grouping metric_expression_type grouping mpls_filter { description "Define an MPLS firewall filter"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "("firewall family mpls filter $$")"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice choice exp_choice { leaf-list exp { type string; ordered-by user; description "Range of values between 0 and 7 in decimal, binary or hex"; } leaf-list exp-except { type string; ordered-by user; description "Range of values between 0 and 7 in decimal, binary or hex"; } } // choice exp_choice choice ttl_choice { case case_1 { } // case case_1 leaf-list ttl-except { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical TTL value or range between 0-255"; } ordered-by user; description "Range of values"; } } // choice ttl_choice choice exp0_choice { case case_1 { } // case case_1 leaf-list exp0-except { type string; ordered-by user; description "Range of values between 0 and 7 in decimal, binary or hex"; } } // choice exp0_choice list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface list interface-set { key "name"; ordered-by user; description "Match interface in set"; uses match_interface_set_object; } // list interface-set choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice ttl0_choice { case case_1 { } // case case_1 leaf-list ttl0-except { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical TTL value or range between 0-255"; } ordered-by user; description "Range of values"; } } // choice ttl0_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice choice exp1_choice { case case_1 { } // case case_1 leaf-list exp1-except { type string; ordered-by user; description "Range of values between 0 and 7 in decimal, binary or hex"; } } // choice exp1_choice choice ttl1_choice { case case_1 { } // case case_1 leaf-list ttl1-except { type string { junos:posix-pattern "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f])(-([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|0x[0-f]|0x[0-f][0-f]))?$"; junos:pattern-message "Must be a numerical TTL value or range between 0-255"; } ordered-by user; description "Range of values"; } } // choice ttl1_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice choice mplscnt { case case_1 { } // case case_1 leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } } // choice mplscnt leaf sample { junos:must "(("forwarding-options sampling family mpls" || ("forwarding-options packet-capture" || any "forwarding-options sampling instance <*> family mpls")))"; junos:must-message "Requires forwarding-options sampling or packet-capture config"; type empty; description "Sample the packet"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Classify packet to loss-priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } choice designation { case case_1 { } // case case_1 leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation } // container then } // list term } // grouping mpls_filter 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 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 peer-group { leaf name { type jt:ipv4addr; description "IP address for this peer"; } uses apply-advanced; leaf local-ip-addr { type jt:ipv4addr; description "Local IP address to use for this peer alone."; } leaf session-establishment-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "45 .. 600"; } } units "seconds"; description "Time within which connection must succeed with this peer"; } leaf-list redundancy-group-id-list { type union { type uint32; type string { pattern "<.*>|$.*"; } } max-elements 1; ordered-by user; description "List of redundacy groups this peer is part of"; } container backup-liveness-detection { junos:must "(!(".. .. .. .. .. logical-systems"))"; junos:must-message "backup-liveness-detection not supported with Logical Systems"; presence "enable backup-liveness-detection"; description "Backup liveness detection"; uses apply-advanced; leaf backup-peer-ip { type jt:ipv4addr; description "Backup livelness detection peer's IP address"; } } // container backup-liveness-detection container liveness-detection { presence "enable liveness-detection"; description "Bidirectional Forwarding Detection options for the peer"; 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 liveness-detection leaf authentication-key { type string { length "1 .. 126"; } description "MD5 authentication key"; } } // grouping peer-group 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 ppp-traceoptions-type { description "Trace options for PPP process"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Area of PPP process to enable debugging output"; leaf name { type enumeration { enum "access" { value 0; description "Trace access code"; } enum "address-pool" { value 1; description "Trace address pool code"; } enum "auth" { value 2; description "Trace authentication code"; } enum "chap" { value 3; description "Trace CHAP code"; } enum "pap" { value 4; description "Trace PAP code"; } enum "config" { value 5; description "Trace configuration code"; } enum "ifdb" { value 6; description "Trace interface database code"; } enum "lcp" { value 7; description "Trace LCP state machine code"; } enum "memory" { value 8; description "Trace memory management code"; } enum "message" { value 9; description "Trace message processing code"; } enum "mlppp" { value 10; description "Trace MLPPP code"; } enum "ncp" { value 11; description "Trace NCP state machine code"; } enum "ppp" { value 12; description "Trace PPP protocol processing code"; } enum "radius" { value 13; description "Trace RADIUS processing code"; } enum "redundancy" { value 14; description "Trace redundancy code"; } enum "rtsock" { value 15; description "Trace routing socket code"; } enum "session" { value 16; description "Trace session management code"; } enum "signal" { value 17; description "Trace signal handling code"; } enum "timer" { value 18; description "Trace timer code"; } enum "ui" { value 19; description "Trace user interface code"; } enum "ci" { value 20; description "Trace ci code"; } enum "all" { value 21; description "Trace all areas of code"; } } } } // list flag } // grouping ppp-traceoptions-type grouping ppp_options_type { uses apply-advanced; leaf dynamic-profile { junos:must "("dynamic-profiles $$")"; junos:must-message "referenced dynamic-profile must be defined"; junos:must "(any ".. .. .. unit <*>")"; junos:must-message "dynamic-profile statement can be configured only on logical interfaces"; type string; description "Dynamic profile name"; } container chap { presence "enable chap"; description "Challenge Handshake Authentication Protocol options"; uses apply-advanced; choice access-data { leaf access-profile { junos:must "("access profile $$")"; junos:must-message "referenced access profile must be defined"; type string { length "1 .. 63"; } description "Profile containing client list and access parameters"; } leaf default-chap-secret { type jt:unreadable; description "Default CHAP secret to be used when no matching access profile exists"; } } // choice access-data leaf local-name { type string; description "Name sent in CHAP-Challenge and CHAP-Response"; } leaf no-rfc2486 { type empty; description "RFC2486 compliance is not enforced"; } leaf passive { type empty; description "Handle incoming CHAP requests only"; } } // container chap container pap { presence "enable pap"; description "Password Authentication Protocol options"; uses apply-advanced; choice access-data { leaf access-profile { junos:must "("access profile $$")"; junos:must-message "referenced access profile must be defined"; type string { length "1 .. 63"; } description "Profile containing client list and access parameters"; } leaf default-password { type jt:unreadable; description "Default PAP password used in the absence of matching profile"; } } // choice access-data leaf local-name { type string; description "Name sent in PAP request packet"; } leaf no-rfc2486 { type empty; description "RFC2486 compliance is not enforced"; } leaf local-password { type jt:unreadable; description "Password sent in PAP request packet"; } leaf passive { junos:must "(".. local-password")"; junos:must-message "local-password MUST be set if passive is used with PAP"; type empty; description "Do not handle PAP authentication requests"; } } // container pap container compression { description "Set compression options"; leaf acfc { junos:must "(!(".. .. .. encapsulation frame-relay-ppp"))"; junos:must-message "compression acfc is not supported on encapsulation frame-relay-ppp"; type empty; description "Negotiate Address/Control field compression"; } leaf pfc { type empty; description "Negotiate Protocol field compression"; } } // container compression leaf lcp-restart-timer { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "lcp-restart-timer statement can be configured only on logical interfaces"; type union { type string { pattern "<.*>|$.*"; } type uint16 { range "20 .. 10000"; } } units "milliseconds"; description "LCP restart timer"; } leaf ncp-restart-timer { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "ncp-restart-timer statement can be configured only on logical interfaces"; type union { type string { pattern "<.*>|$.*"; } type uint16 { range "500 .. 10000"; } } units "milliseconds"; description "NCP restart timer"; } leaf no-termination-request { type empty; description "Don't send PPP termination requests"; } leaf loopback-clear-timer { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "loopback-clear-timer statement can be configured only on logical interfaces"; type union { type string { pattern "<.*>|$.*"; } type uint8 { range "1 .. 60"; } } units "seconds"; description "Loopback clear timer"; } leaf lcp-max-conf-req { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "lcp-max-conf-req statement can be configured only on logical interfaces"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Maximum LCP Conf-Req to be sent, 0 means infinite"; } leaf ncp-max-conf-req { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "ncp-max-conf-req statement can be configured only on logical interfaces"; type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "Maximum NCP Conf-Req to be sent, 0 means infinite"; } leaf on-demand-ip-address { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "on-demand-ip-address statement can be configured only on logical interfaces"; type empty; description "Enable On-Demand IPv4 address allocation and de-allocation"; } leaf aaa-options { junos:must "("access aaa-options $$")"; junos:must-message "referenced aaa-options name must be defined"; type string { length "1 .. 63"; } description "Attach AAA options name to dynamic-profile"; } container initiate-ncp { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "initiate-ncp statement can be configured only on logical interfaces"; description "Enable server initiated NCP"; uses apply-advanced; leaf ip { type empty; description "Enable server initiated IPNCP"; } leaf ipv6 { type empty; description "Enable server initiated IPv6NCP"; } leaf dual-stack-passive { type empty; description "Disable server initiated IPNCP/IPv6NCP for dual-stack client"; } } // container initiate-ncp leaf mtu { junos:must "(any ".. .. .. unit <*>")"; junos:must-message "mtu statement can be configured only on logical interfaces"; type string; description "The Maximum Transfer Unit size in bytes"; } leaf peer-ip-address-optional { type empty; description "Set Peer IP Address Optional in IP NCP Negotiations"; } leaf ipcp-suggest-dns-option { type empty; description "Suggest peer to negotiate with DNS Addresses options"; } leaf ignore-magic-number-mismatch { type empty; description "Ignore magic-number validation failure in LCP keepalive"; } container local-authentication { description "Local Authentication Protocol options"; uses local_auth_type; } // container local-authentication leaf lcp-connection-update { type empty; description "Enable LCP connection update request to peer"; } } // grouping ppp_options_type grouping local_auth_type { description "Local authentication"; uses apply-advanced; leaf password { type string { length "1 .. 64"; } description "Username password"; } container username-include { description "Add username options"; uses apply-advanced; leaf mac-address { type empty; description "Include MAC address"; } leaf circuit-id { type empty; description "Include circuit-id "; } leaf remote-id { type empty; description "Include remote-id "; } leaf domain-name { type string { length "1 .. 64"; } description "Domain name"; } leaf delimiter { type string { length "1"; } description "Delimiter/separator character"; } } // container username-include } // grouping local_auth_type grouping pppoe-traceoptions-type { description "Trace options for PPPoE process"; uses apply-advanced; leaf no-remote-trace { junos:must "("system tracing")"; junos:must-message "'no-remote-trace' is valid only when [system tracing] is configured"; type empty; description "Disable remote tracing"; } container file { description "Trace file information"; leaf filename { type string { junos:posix-pattern "![/ %]"; junos:pattern-message "Must not contain '/', % or a space"; length "1 .. 1024"; } description "Name of file in which to write trace information"; } leaf size { type string; description "Maximum trace file size"; } leaf files { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 1000"; } } default "3"; description "Maximum number of trace files"; } choice world-readable-choice { leaf world-readable { type empty; description "Allow any user to read the log file"; } leaf no-world-readable { type empty; description "Don't allow any user to read the log file"; } } // choice world-readable-choice leaf match { type jt:regular-expression; description "Regular expression for lines to be logged"; } } // container file leaf level { type enumeration { enum "error" { value 0; description "Match error conditions"; } enum "warning" { value 1; description "Match warning messages"; } enum "notice" { value 2; description "Match conditions that should be handled specially"; } enum "info" { value 3; description "Match informational messages"; } enum "verbose" { value 4; description "Match verbose messages"; } enum "all" { value 5; description "Match all levels"; } } default "error"; description "Level of debugging output"; } list flag { key "name"; ordered-by user; description "Area of PPPoE process to enable debugging output"; leaf name { type enumeration { enum "config" { value 0; description "Trace configuration code"; } enum "events" { value 1; description "Trace event code"; } enum "gres" { value 2; description "Trace GRES code"; } enum "init" { value 3; description "Trace initialization code"; } enum "interface-db" { value 4; description "Trace interface database code"; } enum "memory" { value 5; description "Trace memory management code"; } enum "protocol" { value 6; description "Trace PPPoE protocol processing code"; } enum "rtsock" { value 7; description "Trace routing socket code"; } enum "session-db" { value 8; description "Trace Session DB code"; } enum "signal" { value 9; description "Trace signal handling code"; } enum "state" { value 10; description "Trace state handling code"; } enum "stats" { value 11; description "Trace Stats Handling code"; } enum "timer" { value 12; description "Trace timer code"; } enum "ui" { value 13; description "Trace user interface code"; } enum "all" { value 14; description "Trace all areas of code"; } } } } // list flag container filter { presence "enable filter"; description "Trace filtering"; uses apply-advanced; leaf aci { type string { junos:posix-pattern "^[*]*.[^*]*[*]*$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Regular expression to match ACI"; } leaf ari { type string { junos:posix-pattern "^[*]*.[^*]*[*]*$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Regular expression to match ARI"; } leaf service-name { type string { junos:posix-pattern "^([[:alnum:]][[:alnum:]_-]*)|([*][[:alnum:]_-]{1,})[*]?$"; junos:pattern-message "Must be a non-reserved string"; length "1 .. 64"; } description "Service name"; } leaf underlying-interface { junos:must "(("interfaces $$-IFL encapsulation ppp-over-ether" || ("interfaces $$-IFL encapsulation ppp-over-ether-over-atm-llc" || "interfaces $$-IFL family pppoe")))"; junos:must-message "Underlying interface must be configured"; type string; description "Underlying interface name"; } } // container filter } // grouping pppoe-traceoptions-type grouping prefix_action { leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Prefix action name"; } uses apply-advanced; leaf policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Police the packet using a set of named policer"; } leaf count { type empty; description "Enable counters"; } leaf filter-specific { type empty; description "Filter specific, else term specific"; } leaf subnet-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 32"; } } description "Prefix length for the total address range"; } choice source_or_dest { leaf source-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 32"; } } description "Source prefix range"; } leaf destination-prefix-length { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 32"; } } description "Destination prefix range"; } } // choice source_or_dest } // grouping prefix_action grouping prefix_list_items { leaf name { type jt:ipprefix-only; description "Address prefix"; } uses apply-advanced; } // grouping prefix_list_items 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_filter_list_items { leaf address { type jt:ipprefix; description "IP address or hostname"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "upto" { value 3; } enum "through" { value 4; } enum "prefix-length-range" { value 5; } enum "address-mask" { value 6; } enum "apply-advanced" { value 7; } enum "label" { value 8; } enum "get-route-range" { value 9; } enum "metric" { value 10; } enum "metric2" { value 11; } enum "metric3" { value 12; } enum "metric4" { value 13; } enum "tag" { value 14; } enum "tag2" { value 15; } enum "preference" { value 16; } enum "preference2" { value 17; } enum "color" { value 18; } enum "color2" { value 19; } enum "local-preference" { value 20; } enum "priority" { value 21; } enum "prefix-segment" { value 22; } enum "label-allocation" { value 23; } enum "add-path" { value 24; } enum "validation-state" { value 25; } enum "origin" { value 26; } enum "aigp-originate" { value 27; } enum "aigp-adjust" { value 28; } enum "community" { value 29; } enum "tunnel-attribute" { value 30; } enum "damping" { value 31; } enum "aggregate-bandwidth" { value 32; } enum "limit-bandwidth" { value 33; } enum "no-entropy-label-capability" { value 34; } enum "as-path-prepend" { value 35; } enum "as-path-expand" { value 36; } enum "next-hop" { value 37; } enum "install-nexthop" { value 38; } enum "trace" { value 39; } enum "external" { value 40; } enum "load-balance" { value 41; } enum "no-route-localize" { value 42; } enum "install-to-fib" { value 43; } enum "analyze" { value 44; } enum "class" { value 45; } enum "destination-class" { value 46; } enum "source-class" { value 47; } enum "forwarding-class" { value 48; } enum "map-to-interface" { value 49; } enum "ssm-source" { value 50; } enum "p2mp-lsp-root" { value 51; } enum "cos-next-hop-map" { value 52; } enum "dynamic-tunnel-attributes" { value 53; } enum "tunnel-end-point-address" { value 54; } enum "selected-mldp-egress" { value 55; } enum "mhop-bfd-port" { value 56; } enum "no-backup" { value 57; } enum "default-action" { value 58; } enum "next" { value 59; } enum "accept_reject" { value 60; } enum "bgp-output-queue-priority" { value 61; } enum "multipath-resolve" { value 62; } enum "source-routing-path-template" { value 63; } enum "label-allocation-fallback-reject" { value 64; } enum "resolution-map" { value 65; } enum "ignore-service-label" { value 66; } enum "request-long-lived-ack" { value 67; } enum "send-withdrawal-on-route-change" { value 68; } } } leaf choice-value { type string; } uses apply-advanced; container label { description "Set label for BGP LU label allocation"; choice label_value { container range { description "Label range"; choice range_value { leaf range { type string { junos:posix-pattern "^[0-9]+:[0-9]+$"; junos:pattern-message "Use format 'x:y' where 'x' is start of label range and 'y' is end of label range. e.g. 1000000:1000500"; } description "Label range in <start>:<end> format"; } } // choice range_value } // container range leaf label { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1048575"; } } description "Label value"; } } // choice label_value } // container label leaf get-route-range { type empty; description "Get the range"; } container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping route_filter_list_items grouping 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 rtf_prefix_list_items { leaf name { type string { junos:posix-pattern "^[0-9]{1,15}:[0-9.]{1,15}L?:[0-9]{1,10}/(0|3[2-9]|[4-8][0-9]|9[0-6])$"; junos:pattern-message "Use format 'as:x:y/len' where 'as' is an AS number and 'x' is an AS number followed by an optional 'L' (To indicate 4 byte AS), or an IP address and 'y' is a number. e.g. 123456L:100 and len is a prefix length from 32 to 96 or 0"; length "1 .. 63"; } description "Family route-target prefix"; } uses apply-advanced; } // grouping rtf_prefix_list_items grouping 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 satellite-policy-options { uses apply-advanced; list extended-ports-template { key "name"; ordered-by user; description "Extended ports template"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; list pic { key "name"; description "PIC attributes"; uses satellite-pic-type; } // list pic } // list extended-ports-template list port-group-alias { key "name"; ordered-by user; description "Port group alias"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; list pic { key "name"; ordered-by user; description "Satellite PIC information"; leaf name { type union { type int32; type string { pattern "<.*>|$.*"; } } description "PIC identifier"; } uses apply-advanced; leaf-list port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1024"; } } ordered-by user; description "Port id or range or all"; } } // list pic } // list port-group-alias list chassis-group-alias { key "name"; ordered-by user; description "Chassis group alias"; leaf name { type string { length "1 .. 32"; } description "Chassis group alias name"; } uses apply-advanced; leaf prefer-primary { type empty; description "Primary mode chassis will be preferred"; } list chassis-id { key "name"; ordered-by user; description "List of chassis-ids"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Chassis ID"; } uses apply-advanced; container mode { description "Mode Primary or Backup"; uses apply-advanced; choice mode-choice { leaf primary { type empty; description "Primary Mode"; } leaf backup { type empty; description "Backup Mode"; } } // choice mode-choice } // container mode list core-interface { key "name"; ordered-by user; description "Core interface"; leaf name { type union { type jt:interface-device; type string { pattern "<.*>|$.*"; } } description "Core interface name"; } uses apply-advanced; } // list core-interface } // list chassis-id } // list chassis-group-alias list extended-ports-policy { key "name"; ordered-by user; description "Define a extended-ports-policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } leaf extended-ports-template { junos:must "("policy-options satellite-policies extended-ports-template $$")"; junos:must-message "Extended ports template not defined"; type string; description "Apply extended ports template to satellite matching conditions defined in this term"; } } // container from } // list term } // list extended-ports-policy list candidate-uplink-port-policy { key "name"; ordered-by user; description "Define a candidate uplink-port policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; leaf uplink-port-group { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } leaf uplink-port-group { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } } // container from } // list term } // list candidate-uplink-port-policy list environment-monitoring-policy { key "name"; ordered-by user; description "Define a environment monitoring policy"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; container alarm { presence "enable alarm"; description "Policy default alarm policy"; uses apply-advanced; leaf linkdown { type enumeration { enum "ignore" { value 0; description "Ignore ethernet linkdown"; } enum "red" { value 1; description "Raise major alarm for ethernet linkdown"; } enum "yellow" { value 2; description "Raise minor alarm for ethernet linkdown"; } } description "Policy default linkdown alarm"; } } // container alarm list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } container alarm { presence "enable alarm"; description "Term alarm policy"; uses apply-advanced; leaf linkdown { type enumeration { enum "ignore" { value 0; description "Ignore ethernet linkdown"; } enum "red" { value 1; description "Raise major alarm for ethernet linkdown"; } enum "yellow" { value 2; description "Raise minor alarm for ethernet linkdown"; } } description "Set linkdown alarm"; } } // container alarm } // container from } // list term } // list environment-monitoring-policy list forwarding-policy { key "name"; ordered-by user; description "Define forwarding policy for extended ports"; leaf name { type string { length "1 .. 32"; } description "Policy name"; } uses apply-advanced; list port-group-extended { key "name"; ordered-by user; description "Define a extend port group mapping"; uses port-extend-type; } // list port-group-extended list term { key "name"; ordered-by user; description "Policy term"; leaf name { type string { length "1 .. 32"; } } uses apply-advanced; container from { description "Condition to match the satellite"; uses apply-advanced; leaf-list product-model { type string { length "1 .. 64"; } ordered-by user; description "Product Model Name"; } list port-group-extended { key "name"; ordered-by user; description "Define a extend port group mapping"; uses port-extend-type; } // list port-group-extended } // container from } // list term } // list forwarding-policy } // grouping satellite-policy-options grouping port-extend-type { leaf name { type string; description "Extended port group alias name policy applied on"; } uses apply-advanced; leaf filter { junos:must "(("chassis satellite-management firewall family bridge filter $$" || "chassis satellite-management firewall family ethernet-switching filter $$"))"; junos:must-message "Filter should be defined under 'chassis satellite-management firewall family bridge filter'"; type string; description "Assign a filter for uplink selection"; } container port-group-uplink { description "Define a uplink port group mapping"; uses apply-advanced; leaf port-group-uplink-alias { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Uplink port group alias name used for uplink pinning mode"; } leaf minimum-links { type union { type string { pattern "<.*>|$.*"; } type uint16 { range "1 .. 32"; } } description "Minimum child links to keep extended-ports UP"; } leaf holddown { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 600"; } } units "seconds"; description "Time to hold down after uplink failure"; } } // container port-group-uplink container mirror-ingress { description "Define a ingress port mirror"; uses apply-advanced; leaf port-group-mirror { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Mirror port group alias name for local port mirroring"; } } // container mirror-ingress container mirror-egress { description "Define a egress port mirror"; uses apply-advanced; leaf port-group-mirror { junos:must "("policy-options satellite-policies port-group-alias $$")"; junos:must-message "port-group-alias not defined"; type string; description "Mirror port group alias name for local port mirroring"; } } // container mirror-egress } // grouping port-extend-type grouping satellite-pic-type { leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4"; } } description "PIC slot number"; } uses apply-advanced; list port { key "name"; description "Port number"; uses satellite-pic-port-attr; } // list port list port-range { key "port-range-low port-range-high"; ordered-by user; description "Physical ports to channelize"; leaf port-range-low { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port range low number"; } leaf port-range-high { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port range high number"; } uses apply-advanced; leaf channel-speed { type enumeration { enum "10g" { value 0; description "Set the port speed to 10G"; } enum "disable-auto-speed-detection" { value 1; description "Disables automatic speed detection"; } } description "Port channel speed"; } } // list port-range } // grouping satellite-pic-type grouping satellite-pic-port-attr { leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 127"; } } description "Port number"; } uses apply-advanced; leaf channel-speed { type enumeration { enum "10g" { value 0; description "Set the port speed to 10G"; } enum "25g" { value 1; description "Set the port speed to 25G"; } enum "50g" { value 2; description "Set the port speed to 50G"; } enum "disable-auto-speed-detection" { value 3; description "Disables automatic speed detection"; } } description "Port channel speed"; } } // grouping satellite-pic-port-attr grouping 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 source_address_filter_list_items { leaf address { type jt:ipprefix; description "IP address or hostname"; } leaf choice-ident { type enumeration { enum "exact" { value 0; } enum "longer" { value 1; } enum "orlonger" { value 2; } enum "upto" { value 3; } enum "through" { value 4; } enum "prefix-length-range" { value 5; } enum "apply-advanced" { value 6; } enum "metric" { value 7; } enum "metric2" { value 8; } enum "metric3" { value 9; } enum "metric4" { value 10; } enum "tag" { value 11; } enum "tag2" { value 12; } enum "preference" { value 13; } enum "preference2" { value 14; } enum "color" { value 15; } enum "color2" { value 16; } enum "local-preference" { value 17; } enum "priority" { value 18; } enum "prefix-segment" { value 19; } enum "label-allocation" { value 20; } enum "add-path" { value 21; } enum "validation-state" { value 22; } enum "origin" { value 23; } enum "aigp-originate" { value 24; } enum "aigp-adjust" { value 25; } enum "community" { value 26; } enum "tunnel-attribute" { value 27; } enum "damping" { value 28; } enum "aggregate-bandwidth" { value 29; } enum "limit-bandwidth" { value 30; } enum "no-entropy-label-capability" { value 31; } enum "as-path-prepend" { value 32; } enum "as-path-expand" { value 33; } enum "next-hop" { value 34; } enum "install-nexthop" { value 35; } enum "trace" { value 36; } enum "external" { value 37; } enum "load-balance" { value 38; } enum "no-route-localize" { value 39; } enum "install-to-fib" { value 40; } enum "analyze" { value 41; } enum "class" { value 42; } enum "destination-class" { value 43; } enum "source-class" { value 44; } enum "forwarding-class" { value 45; } enum "map-to-interface" { value 46; } enum "ssm-source" { value 47; } enum "p2mp-lsp-root" { value 48; } enum "cos-next-hop-map" { value 49; } enum "dynamic-tunnel-attributes" { value 50; } enum "tunnel-end-point-address" { value 51; } enum "selected-mldp-egress" { value 52; } enum "mhop-bfd-port" { value 53; } enum "no-backup" { value 54; } enum "default-action" { value 55; } enum "next" { value 56; } enum "accept_reject" { value 57; } enum "bgp-output-queue-priority" { value 58; } enum "multipath-resolve" { value 59; } enum "source-routing-path-template" { value 60; } enum "label-allocation-fallback-reject" { value 61; } enum "resolution-map" { value 62; } enum "ignore-service-label" { value 63; } enum "request-long-lived-ack" { value 64; } enum "send-withdrawal-on-route-change" { value 65; } } } leaf choice-value { type string; } uses apply-advanced; container metric { description "Metric value"; uses apply-advanced; choice metric_action { leaf metric { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } container igp { presence "enable igp"; description "Track the IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container igp container minimum-igp { presence "enable minimum-igp"; description "Track the minimum IGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-igp container expression { description "Calculate value based on route metric and metric2"; uses metric_expression_type; } // container expression leaf aigp { type empty; description "Use aigp, if it exists, to set the IGP metric"; } container effective-aigp { presence "enable effective-aigp"; description "Track the effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container effective-aigp container minimum-effective-aigp { presence "enable minimum-effective-aigp"; description "Track the minimum effective AIGP metric (BGP only)"; leaf metric_offset { type union { type int32; type string { pattern "<.*>|$.*"; } } description "Metric offset for MED"; } } // container minimum-effective-aigp } // choice metric_action } // container metric container metric2 { description "Metric value 2"; uses apply-advanced; choice metric_action { leaf metric2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric2 container metric3 { description "Metric value 3"; uses apply-advanced; choice metric_action { leaf metric3 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric3 container metric4 { description "Metric value 4"; uses apply-advanced; choice metric_action { leaf metric4 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container metric4 container tag { description "Tag string"; uses apply-advanced; choice metric_action { leaf tag { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag container tag2 { description "Tag string 2"; uses apply-advanced; choice metric_action { leaf tag2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container tag2 container preference { description "Preference value"; uses apply-advanced; choice metric_action { leaf preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference container preference2 { description "Preference value 2"; uses apply-advanced; choice metric_action { leaf preference2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container preference2 container color { description "Color (preference) value"; uses apply-advanced; choice metric_action { leaf color { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color container color2 { description "Color (preference) value 2"; uses apply-advanced; choice metric_action { leaf color2 { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container color2 container local-preference { description "Local preference associated with a route"; uses apply-advanced; choice metric_action { leaf local-preference { type union { type uint32; type string { pattern "<.*>|$.*"; } } } leaf add { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Add constant to attribute"; } leaf subtract { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Subtract constant from attribute"; } } // choice metric_action } // container local-preference leaf priority { type enumeration { enum "high" { value 0; description "Set priority to high"; } enum "medium" { value 1; description "Set priority to medium"; } enum "low" { value 2; description "Set priority to low"; } } description "Set priority for route installation"; } container prefix-segment { junos:must "(".. .. then")"; junos:must-message "prefix-segment is only a then action"; junos:must "((". index" || ". algorithm"))"; junos:must-message "atleast one prefix-segment index is mandatory"; description "Set prefix segment attributes"; uses apply-advanced; list algorithm { key "name"; max-elements 15; description "Set prefix segment attributes for strict/flex algorithm "; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } description "Set prefix segment for strict/flex algorithm"; } leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { type empty; description "Set node segment flag for this prefix segment"; } } // list algorithm leaf index { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 199999"; } } description "Set prefix segment index id"; } leaf node-segment { junos:must "(".. index")"; junos:must-message "default prefix-segment index is mandatory"; type empty; description "Set node segment flag for default prefix segment"; } } // container prefix-segment leaf label-allocation { type enumeration { enum "per-table" { value 0; description "Set per-table label allocation mode"; } enum "per-nexthop" { value 1; description "Set per-nexthop label allocation mode"; } enum "per-table-localize" { value 2; description "Set per-table-localize label allocation mode"; } } description "Set label allocation mode"; } container add-path { junos:must "((!(".. .. then next-hop self") && !(".. .. then next-hop")))"; junos:must-message "add-path requires unique next-hops"; junos:must "(".. .. then")"; junos:must-message "add-path is only a then action"; description "Set BGP add-path attributes"; leaf send-count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "2 .. 64"; } } description "Number of add-paths sent"; } } // container add-path leaf validation-state { type enumeration { enum "valid" { value 0; description "Set validaton-state to valid"; } enum "invalid" { value 1; description "Set validation-state to invalid"; } enum "unknown" { value 2; description "Set validation-state to unknown"; } } description "Set validation-state of a route"; } leaf origin { type enumeration { enum "igp" { value 0; description "Path originated in the local IGP"; } enum "egp" { value 1; description "Path originated in another AS"; } enum "incomplete" { value 2; description "Path was learned by some other means"; } } description "BGP path origin"; } container aigp-originate { junos:must "((".. .. then next-hop self" || ".. .. then next-hop"))"; junos:must-message "aigp-originate requires 'next-hop'"; presence "enable aigp-originate"; description "Originate a BGP AIGP attribute"; leaf distance { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "AIGP distance"; } } // container aigp-originate container aigp-adjust { description "Adjust a BGP AIGP attribute"; choice math-op { leaf add { type empty; } leaf subtract { type empty; } leaf multiply { type empty; } leaf divide { type empty; } } // choice math-op choice adjust-value { leaf user-value { type union { type uint64; type string { pattern "<.*>|$.*"; } } description "Adjustment value"; } leaf distance-to-protocol-nexthop { type empty; description "Metric2"; } } // choice adjust-value } // container aigp-adjust list community { key "choice-ident choice-value community-name"; ordered-by user; description "BGP community properties associated with a route"; leaf choice-ident { type enumeration { enum "equal-literal" { value 0; } enum "set" { value 1; } enum "plus-literal" { value 2; } enum "add" { value 3; } enum "minus-literal" { value 4; } enum "delete" { value 5; } enum "community-name" { value 6; } } } leaf choice-value { type string; } leaf community-name { type string; description "Name to identify a BGP community"; } } // list community list tunnel-attribute { key "choice-ident choice-value tunnel-attribute-name"; ordered-by user; description "BGP tunnel attribute associated with a route"; leaf choice-ident { type enumeration { enum "set" { value 0; } enum "remove" { value 1; } enum "tunnel-attribute-name" { value 2; } } } leaf choice-value { type string; } leaf tunnel-attribute-name { type string; description "Name of a tunnel attribute , or 'all'"; } } // list tunnel-attribute leaf damping { type string; description "Define BGP route flap damping parameters"; } leaf aggregate-bandwidth { type empty; description "Advertise aggregate outbound link bandwidth"; } leaf limit-bandwidth { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 4294967295"; } } description "Limit advertised aggregate outbound link bandwidth"; } leaf no-entropy-label-capability { type empty; description "Don't advertise entropy label capability"; } leaf as-path-prepend { type string; description "Prepend AS numbers to an AS path (BGP only)"; } container as-path-expand { description "Prepend AS numbers prior to adding local-as (BGP only)"; choice aspath_exp_value { container last-as { presence "enable last-as"; description "Prepend last AS"; leaf count { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 32"; } } description "Repeat count"; } } // container last-as leaf aspath { type string; description "AS path string"; } } // choice aspath_exp_value } // container as-path-expand container next-hop { description "Set the address of the next-hop router"; choice nexthop_value { leaf self { type empty; description "Use a local address as the next-hop address"; } leaf peer-address { type empty; description "Use the remote peer address as the next-hop address"; } leaf address { type jt:ipaddr; description "Next-hop address"; } leaf reject { type empty; description "Use a reject next hop"; } leaf discard { type empty; description "Use a discard next hop"; } leaf next-table { type string; description "Perform a forwarding lookup in the specified table"; } } // choice nexthop_value } // container next-hop container install-nexthop { description "Choose the next hop to be used for forwarding"; choice strict_type { leaf strict { type empty; description "Do not use any other available next hops"; } leaf strict-named-lsp { junos:must "((".. lsp" || (".. lsp-regex" || (".. static-lsp" || ".. static-lsp-regex"))))"; junos:must-message "strict-named-lsp cannot be configured with non-lsp or non-labelled"; type empty; description "Do not use any other non-lsp next hops"; } } // choice strict_type choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container fallback { junos:must "((".. .. strict-named-lsp" || ".. .. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container except container fallback { junos:must "((".. strict-named-lsp" || ".. strict"))"; junos:must-message "Fallback can be configured only when strict or strict-named-lsp is configured"; description "Backup option "; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value container except { description "Do not choose to install matching next hops"; uses apply-advanced; choice nexthop-value { leaf-list lsp { type string; ordered-by user; description "Next-hop LSP name"; } leaf-list lsp-regex { type string; ordered-by user; description "Next-hop LSP name regular expression"; } leaf-list static-lsp { type string; ordered-by user; description "Next-hop static LSP name"; } leaf-list static-lsp-regex { type string; ordered-by user; description "Next-hop static LSP name regular expression"; } leaf non-lsp-nexthop { type empty; description "Next-hop with non-lsp"; } leaf non-labelled-nexthop { type empty; description "Next-hop without tag"; } } // choice nexthop-value } // container except } // container fallback } // container install-nexthop leaf trace { type empty; description "Log matches to a trace file"; } container external { junos:must "((". type" || ". nssa-only"))"; junos:must-message "type OR nssa-only configuration is mandatory"; presence "enable external"; description "External route"; uses apply-advanced; leaf type { type union { type string { pattern "<.*>|$.*"; } type int32 { range "1 .. 2"; } } description "OSPF external metric type"; } leaf nssa-only { type empty; description "Clear P-bit on lsa type 7"; } } // container external container load-balance { description "Type of load balancing in forwarding table"; choice load_balance_type { leaf per-packet { type empty; description "Load balance on a per-packet basis"; } case case_2 { } // case case_2 case case_3 { } // case case_3 leaf consistent-hash { type empty; description "Give a prefix consistent load-balancing"; } case case_5 { } // case case_5 case case_6 { } // case case_6 } // choice load_balance_type } // container load-balance leaf analyze { type empty; description "Send to registered controllers for analysis"; } leaf class { type string; description "Set class-of-service parameters"; } leaf destination-class { type string; description "Set destination class in forwarding table"; } leaf source-class { type string; description "Set source class in forwarding table"; } leaf forwarding-class { type string; description "Set source or destination class in forwarding table"; } container map-to-interface { description "Set output logical interface"; choice map_to_interface_value { leaf self { type empty; description "Map the interface to itself"; } leaf interface { type union { type jt:interface-name; type string { pattern "<.*>|$.*"; } } description "Output logical interface"; } } // choice map_to_interface_value } // container map-to-interface leaf-list ssm-source { type jt:ipaddr; ordered-by user; description "List of Sources for SSM mapping"; } container p2mp-lsp-root { description "P2mp lsp root address"; uses apply-advanced; leaf address { type jt:ipv4addr; description "Ipv4 root address"; } } // container p2mp-lsp-root leaf cos-next-hop-map { type string; description "Set CoS-based next-hop map in forwarding table"; } leaf dynamic-tunnel-attributes { type string; description "Choose the dynamic tunnel attributes used for forwarding"; } leaf tunnel-end-point-address { type jt:ipaddr; description "Set tunnel end-point address of tunnel"; } leaf selected-mldp-egress { type empty; description "This node should act as egress node for MLDP inband signalling"; } leaf mhop-bfd-port { type empty; description "Use port number 4784 for MPLS-BFD as per RFC5884"; } leaf no-backup { type empty; description "This prefix should not have backup"; } leaf default-action { type enumeration { enum "accept" { value 0; description "Accept a route"; } enum "reject" { value 1; description "Reject a route"; } } description "Set default policy action"; } leaf next { type enumeration { enum "policy" { value 0; description "Skip to next policy filter"; } enum "term" { value 1; description "Skip to next term in a policy filter"; } } description "Skip to next policy or term"; } choice accept_reject { leaf accept { type empty; description "Accept a route"; } leaf reject { type empty; description "Reject a route"; } } // choice accept_reject container bgp-output-queue-priority { description "Set the BGP Update output queue priority."; choice class { leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 16"; } } description "Output queue priority; higher is better"; } leaf expedited { type empty; description "Expedited queue; highest priority"; } } // choice class } // container bgp-output-queue-priority leaf multipath-resolve { type empty; description "Use all paths for resolution over this prefix"; } leaf source-routing-path-template { junos:must "("protocols source-packet-routing source-routing-path-template $$")"; junos:must-message "Referenced Spring-te template does not exist"; type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be less than 64 characters"; } description "Spring-te template to apply"; } leaf label-allocation-fallback-reject { junos:must "((".. label" || ".. .. then"))"; junos:must-message "This can only be a 'route-filter-list' or 'route-filter' or 'then' action. Label configuration is mandatory under route-filter-list/route-filter"; type empty; description "Suppress prefix export when label allocation fails"; } leaf resolution-map { type string; description "Set resolution map modes"; } leaf ignore-service-label { type empty; description "Ignore service labels"; } leaf request-long-lived-ack { type empty; description "Advertise route after forwarding is programmed"; } leaf send-withdrawal-on-route-change { type empty; description "Withdraw route if change is not acked from forwarding"; } } // grouping source_address_filter_list_items grouping 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 three-color-policer-type { description "Three-color policer"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policer name"; } uses apply-advanced; leaf filter-specific { type empty; description "Three color policer is filter-specific"; } leaf logical-interface-policer { type empty; description "Policer is logical interface policer"; } leaf physical-interface-policer { type empty; description "Policer is physical interface policer"; } leaf shared-bandwidth-policer { type empty; description "Share policer bandwidth among bundle links"; } container action { description "Action for three-color policer"; uses apply-advanced; list loss-priority { key "name"; ordered-by user; description "Loss priority for packet"; uses three-color-policer-action; } // list loss-priority } // container action choice rate-type-choice { container single-rate { description "Single-rate policer"; uses apply-advanced; choice mode-choice { leaf color-blind { type empty; description "Color-blind mode"; } leaf color-aware { type empty; description "Color-aware mode"; } } // choice mode-choice leaf committed-information-rate { type string; units "bits per second"; description "Bandwidth allowed for committed traffic"; } leaf committed-burst-size { type string; units "bytes"; description "Burst size allowed for committed traffic"; } leaf excess-burst-size { type string; units "bytes"; description "Burst size allowed for excess traffic"; } } // container single-rate case case_2 { } // case case_2 container two-rate { presence "enable two-rate"; description "Two-rate policer"; uses apply-advanced; choice mode-choice { leaf color-blind { type empty; description "Color-blind mode"; } leaf color-aware { type empty; description "Color-aware mode"; } } // choice mode-choice leaf committed-information-rate { type string; units "bits per second"; description "Bandwidth allowed for committed traffic"; } leaf committed-burst-size { type string; units "bytes"; description "Burst size allowed for committed traffic "; } leaf peak-information-rate { type string; units "bits per second"; description "Bandwidth allowed for peak traffic"; } leaf peak-burst-size { type string; units "bytes"; description "Burst size allowed for peak traffic "; } container aggregate-policing { presence "enable aggregate-policing"; description "Configure Aggregate Policer"; uses apply-advanced; list policer { key "name"; max-elements 1; ordered-by user; description "Two-color policer to be used as aggregate"; leaf name { junos:must "("firewall policer $$")"; junos:must-message "Referenced aggregate policer is not defined"; type string; description "Name of two-color policer to use to aggregate police"; } uses apply-advanced; leaf aggregate-sharing-mode { type enumeration { enum "hybrid" { value 0; description "Child policer CIR rates are guaranteed rates and PIR rate are peak rates for member flow"; } } description "Hierarchical Metering model"; } } // list policer } // container aggregate-policing } // container two-rate case case_4 { } // case case_4 } // choice rate-type-choice } // grouping three-color-policer-type grouping three-color-policer-action { description "Action for three-color policer"; leaf name { type enumeration { enum "high" { value 0; description "High loss priority"; } } description "Loss priority for packet"; } uses apply-advanced; container then { description "Action to take if the rate limits are exceeded"; uses apply-advanced; leaf discard { type empty; description "Discard the packet"; } } // container then } // grouping three-color-policer-action grouping tunnel_end_point { description "Define a tunnel end point"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Tunnel end-point identifier (ASCII string)"; } uses apply-advanced; choice l3-protocol { container ipv6 { presence "enable ipv6"; description "Enter an IPv6 tunnel"; uses apply-advanced; leaf source-address { type jt:ipv6addr; description "Tunnel source address"; } leaf destination-address { type jt:ipv6prefix; description "Tunnel destination address"; } } // container ipv6 container ipv4 { presence "enable ipv4"; description "Enter an IPv4 tunnel"; uses apply-advanced; leaf source-address { type jt:ipv4addr; description "Tunnel source address"; } leaf destination-address { type jt:ipv4prefix; description "Tunnel destination address"; } } // container ipv4 } // choice l3-protocol choice tunnel-protocol { container gre { presence "enable gre"; description "Tunnel is GRE"; uses apply-advanced; leaf key { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "Key for authentication"; } } // container gre container gre-in-udp { presence "enable gre-in-udp"; description "Tunnel is GRE-in-UDP"; uses apply-advanced; leaf source-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "UDP source port"; } leaf destination-port { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 65535"; } } description "UDP destination port"; } leaf key { type union { type uint32; type string { pattern "<.*>|$.*"; } } description "GRE key for authentication"; } } // container gre-in-udp } // choice tunnel-protocol } // grouping tunnel_end_point grouping ufd-group-type { description "Uplink failure detection group type"; leaf name { type string { length "2 .. 64"; } description "Uplink failure detection group name"; } uses apply-advanced; list link-to-monitor { key "name"; ordered-by user; description "Uplinks to be monitored"; leaf name { junos:must "(!("interfaces $$ ether-options 802.3ad"))"; junos:must-message "link-to-monitor interface cannot be a member of Lag interface"; junos:must "("interfaces $$")"; junos:must-message "link-to-monitor interface does not exist"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface to be monitored"; } uses apply-advanced; } // list link-to-monitor list link-to-disable { key "name"; ordered-by user; description "Downlinks to disable"; leaf name { junos:must "(!("interfaces $$ ether-options 802.3ad"))"; junos:must-message "link-to-disable interface cannot be a member of Lag interface"; junos:must "("interfaces $$")"; junos:must-message "link-to-disable interface does not exist"; type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface to disable"; } uses apply-advanced; } // list link-to-disable leaf debounce-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "5 .. 300"; } } units "seconds"; description "Delay before bring up of the link-to-disable port"; } } // grouping ufd-group-type 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 vlan_map { description "IEEE 802.1q Virtual LAN (VLAN) Tag mapping"; uses apply-advanced; choice operation_choices { leaf push { type empty; description "Push a VLAN tag"; } leaf swap { type empty; description "Swap a VLAN tag"; } leaf pop { type empty; description "Pop a VLAN tag"; } leaf push-push { type empty; description "Push two VLAN tags"; } leaf swap-push { type empty; description "Swap VLAN tag and push a new VLAN tag"; } leaf swap-swap { type empty; description "Swap both outer and inner VLAN tags"; } leaf pop-swap { type empty; description "Pop outer VLAN tag and swap inner VLAN tag"; } leaf pop-pop { type empty; description "Pop both outer and inner VLAN tags"; } } // choice operation_choices leaf tag-protocol-id { type string { junos:posix-pattern "^0x[abcdefABCDEF0123456789]{4}$"; junos:pattern-message "Must be hexadecimal bit pattern of form 0xNNNN"; } description "IEEE 802.1q Tag Protocol Identifier to rewrite"; } leaf inner-tag-protocol-id { type string; description "IEEE 802.1q Tag Protocol ID to rewrite for inner tag"; } leaf vlan-id { type string; description "VLAN ID to rewrite"; } leaf inner-vlan-id { type string; description "VLAN ID to rewrite for inner tag"; } } // grouping vlan_map grouping vpls_filter { description "Define an VPLS firewall filter"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter name"; } uses apply-advanced; leaf-list accounting-profile { junos:must "("accounting-options filter-profile")"; junos:must-message "referenced accounting profile must be defined"; type string; ordered-by user; description "Accounting profile name"; } leaf interface-specific { type empty; description "Defined counters are interface specific"; } leaf physical-interface-filter { type empty; description "Filter is physical interface filter"; } list term { key "name"; ordered-by user; description "Define a firewall term"; leaf name { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Term name"; } uses apply-advanced; leaf filter { junos:must "("firewall family vpls filter $$")"; junos:must-message "Referenced filter is not defined"; junos:must "((!(".. from") && !(".. then")))"; junos:must-message "Not compatible with 'from or then'"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Filter to include"; } container from { description "Define match criteria"; uses apply-advanced; choice interface-group_choice { leaf-list interface-group { type string; ordered-by user; description "Range of values"; } leaf-list interface-group-except { type string; ordered-by user; description "Range of values"; } } // choice interface-group_choice choice ether-type_choice { leaf-list ether-type { type string; ordered-by user; } leaf-list ether-type-except { type string; ordered-by user; } } // choice ether-type_choice choice vlan-ether-type_choice { leaf-list vlan-ether-type { type string; ordered-by user; } leaf-list vlan-ether-type-except { type string; ordered-by user; } } // choice vlan-ether-type_choice list destination-mac-address { key "name"; ordered-by user; description "Destination MAC address"; uses firewall_mac_addr_object; } // list destination-mac-address list source-mac-address { key "name"; ordered-by user; description "Source MAC address"; uses firewall_mac_addr_object; } // list source-mac-address choice forwarding-class_choice { leaf-list forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } leaf-list forwarding-class-except { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } ordered-by user; description "String name"; } } // choice forwarding-class_choice choice loss-priority_choice { case case_1 { } // case case_1 leaf-list loss-priority-except { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } ordered-by user; } } // choice loss-priority_choice choice learn-vlan-id_choice { case case_1 { } // case case_1 leaf-list learn-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice learn-vlan-id_choice choice learn-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list learn-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice learn-vlan-1p-priority_choice choice user-vlan-id_choice { case case_1 { } // case case_1 leaf-list user-vlan-id-except { type string; ordered-by user; description "Range of values"; } } // choice user-vlan-id_choice choice user-vlan-1p-priority_choice { case case_1 { } // case case_1 leaf-list user-vlan-1p-priority-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 7"; } } ordered-by user; description "802.1p priority value 0-7"; } } // choice user-vlan-1p-priority_choice choice learn-vlan-dei_choice { case case_1 { } // case case_1 leaf-list learn-vlan-dei-except { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 1"; } } ordered-by user; description "DEI value 0-1"; } } // choice learn-vlan-dei_choice choice traffic-type_choice { case case_1 { } // case case_1 leaf-list traffic-type-except { type enumeration { enum "broadcast" { value 0; description "Packets with broadcast ethernet address"; } enum "multicast" { value 1; description "Packets with multicast ethernet address"; } enum "unknown-unicast" { value 2; description "Packets for which destination ethernet address has not been learnt"; } enum "known-unicast" { value 3; description "Packets for which destination ethernet address has been learnt"; } } ordered-by user; } } // choice traffic-type_choice choice ip-protocol_choice { case case_1 { } // case case_1 leaf-list ip-protocol-except { type string; ordered-by user; } } // choice ip-protocol_choice choice dscp_choice { case case_1 { } // case case_1 leaf-list dscp-except { type string; ordered-by user; } } // choice dscp_choice choice ip-precedence_choice { case case_1 { } // case case_1 leaf-list ip-precedence-except { type string; ordered-by user; } } // choice ip-precedence_choice choice source-port_choice { case case_1 { } // case case_1 leaf-list source-port-except { type string; ordered-by user; } } // choice source-port_choice choice destination-port_choice { case case_1 { } // case case_1 leaf-list destination-port-except { type string; ordered-by user; } } // choice destination-port_choice choice port_choice { case case_1 { } // case case_1 leaf-list port-except { type string; ordered-by user; } } // choice port_choice choice icmp-code_choice { case case_1 { } // case case_1 leaf-list icmp-code-except { type string; ordered-by user; } } // choice icmp-code_choice choice icmp-type_choice { case case_1 { } // case case_1 leaf-list icmp-type-except { type string; ordered-by user; } } // choice icmp-type_choice list interface { key "name"; ordered-by user; description "Match interface name"; uses match_interface_object; } // list interface list interface-set { key "name"; ordered-by user; description "Match interface in set"; uses match_interface_set_object; } // list interface-set choice ipv6-next-header_choice { case case_1 { } // case case_1 leaf-list ipv6-next-header-except { type string; ordered-by user; } } // choice ipv6-next-header_choice choice ipv6-payload-protocol_choice { case case_1 { } // case case_1 leaf-list ipv6-payload-protocol-except { type string; ordered-by user; } } // choice ipv6-payload-protocol_choice choice ipv6-traffic-class_choice { case case_1 { } // case case_1 leaf-list ipv6-traffic-class-except { type string; ordered-by user; } } // choice ipv6-traffic-class_choice choice policy-map_choice { leaf-list policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } leaf-list policy-map-except { junos:must "("class-of-service policy-map $$")"; junos:must-message "Undefined policy-map instance"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; length "1 .. 64"; } ordered-by user; description "String name"; } } // choice policy-map_choice } // container from container then { description "Action to take if the 'from' condition is matched"; uses apply-advanced; choice policer-choice { leaf policer { junos:must "(!("firewall policer $$ aggregate"))"; junos:must-message "Cannot attach a aggregate policer to filter"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of policer to use to rate-limit traffic"; } container three-color-policer { description "Police the packet using a three-color-policer"; uses apply-advanced; choice type-choice { leaf single-rate { junos:must "("firewall three-color-policer $$ single-rate")"; junos:must-message "Referenced single-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-rate three-color policer to use to rate-limit traffic"; } leaf single-packet-rate { junos:must "("firewall three-color-policer $$ single-packet-rate")"; junos:must-message "Referenced single-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of single-packet-rate three-color policer to use to rate-limit traffic"; } leaf two-rate { junos:must "("firewall three-color-policer $$ two-rate")"; junos:must-message "Referenced two-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-rate three-color policer to use to rate-limit traffic"; } leaf two-packet-rate { junos:must "("firewall three-color-policer $$ two-packet-rate")"; junos:must-message "Referenced two-packet-rate policer does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of two-packet-rate three-color policer to use to rate-limit traffic"; } } // choice type-choice } // container three-color-policer leaf hierarchical-policer { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Name of hierarchical policer to use to rate-limit traffic"; } } // choice policer-choice choice policy-map-choice { leaf clear-policy-map { type empty; description "Clear the policy marking"; } leaf policy-map { junos:must "("class-of-service policy-map $$")"; junos:must-message "referenced policy map must be defined"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Policy map action"; } } // choice policy-map-choice leaf count { type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Count the packet in the named counter"; } leaf loss-priority { type enumeration { enum "low" { value 0; description "Loss priority low"; } enum "high" { value 1; description "Loss priority high"; } enum "medium-low" { value 2; description "Loss priority medium-low"; } enum "medium-high" { value 3; description "Loss priority medium-high"; } } description "Packet's loss priority"; } leaf forwarding-class { type string { junos:posix-pattern "^.{1,64}$"; junos:pattern-message "Must be string of 64 characters or less"; } description "Classify packet to forwarding class"; } leaf port-mirror-instance { junos:must "("forwarding-options port-mirroring instance $$")"; junos:must-message "Referenced port-mirroring instance does not exist"; type string { junos:posix-pattern "!^((__.*)|(.{65,}))$"; junos:pattern-message "Must be a non-reserved string of 64 characters or less"; } description "Port-mirror the packet to specified instance"; } leaf port-mirror { junos:must "(!(".. port-mirror-instance"))"; junos:must-message "'port-mirror' and 'port-mirror-instance' are mutually exclusive"; junos:must "("forwarding-options port-mirroring")"; junos:must-message "Configure 'port-mirroring' under 'forwarding-options'"; type empty; description "Port-mirror the packet"; } choice designation { leaf accept { type empty; description "Accept the packet"; } leaf discard { type empty; description "Discard the packet"; } leaf next { type enumeration { enum "term" { value 0; description "Continue to next term in a filter"; } } description "Continue to next term in a filter"; } } // choice designation } // container then } // list term } // grouping vpls_filter grouping vrrp-group { description "Virtual Router Redundancy Protocol group"; leaf name { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Identifier for VRRP group"; } uses apply-advanced; choice address { leaf-list virtual-address { type jt:ipv4addr; ordered-by user; description "One or more virtual IPv4 addresses"; } leaf-list virtual-inet6-address { type jt:ipv6addr; ordered-by user; description "One or more virtual inet6 addresses"; } } // choice address leaf virtual-link-local-address { junos:must "(".. .. vrrp-inet6-group")"; junos:must-message "'virtual-link-local-address' statement can be included only for interfaces of type 'family inet6'"; type jt:ipv6addr; description "Virtual link-local addresses"; } leaf priority { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Virtual router election priority"; } leaf preferred { type empty; description "Preferred group on subnet"; } choice advertisement_type { leaf advertise-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 255"; } } units "seconds"; description "Advertisement interval"; } leaf fast-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "10 .. 40950"; } } units "milliseconds"; description "Fast advertisement interval"; } leaf inet6-advertise-interval { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "100 .. 40000"; } } units "milliseconds"; description "Inet6 advertisement interval"; } } // choice advertisement_type choice preempt_type { container preempt { presence "enable preempt"; description "Allow preemption"; uses apply-advanced; leaf hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600"; } } units "seconds"; description "Preemption hold time"; } } // container preempt leaf no-preempt { type empty; description "Don't allow preemption"; } } // choice preempt_type choice accept_type { leaf accept-data { type empty; description "Accept packets destined for virtual IP address"; } leaf no-accept-data { type empty; description "Don't accept packets destined for virtual IP address"; } } // choice accept_type leaf authentication-type { junos:must "(".. .. vrrp-group")"; junos:must-message "'authentication-type' statement can be included only for interfaces of type 'family inet'"; type enumeration { enum "md5" { value 0; description "HMAC-MD5-96"; } enum "simple" { value 1; description "Simple password"; } } description "Authentication type"; } leaf authentication-key { junos:must "(".. .. vrrp-group")"; junos:must-message "'authentication-key' statement can be included only for interfaces of type 'family inet'"; type jt:unreadable; description "Authentication key"; } container track { description "Interfaces to track for VRRP group"; uses apply-advanced; leaf priority-hold-time { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 3600"; } } units "seconds"; description "Priority hold time"; } list interface { key "name"; ordered-by user; description "Interface to track in VRRP group"; leaf name { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Name of interface"; } uses apply-advanced; list bandwidth-threshold { key "name"; description "Track bandwidth of interface"; leaf name { type string; units "bits per second"; description "Interface speed below which priority cost is incurred"; } leaf priority-cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "Value subtracted from priority when bandwidth is below threshold"; } } // list bandwidth-threshold leaf priority-cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "Value to subtract from priority when interface is down"; } } // list interface list route { key "route_address routing-instance"; ordered-by user; description "Route to track in VRRP group"; leaf route_address { type jt:ipprefix-mandatory; description "Route address"; } leaf routing-instance { type string { junos:posix-pattern "!^((__.*__)|(all)|(.*[ ].*)|("")|(.{129,}))$"; junos:pattern-message "Must be a non-reserved string of 128 characters or less with no spaces."; } description "Routing instance to which route belongs, or 'default'"; } leaf priority-cost { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 254"; } } description "Value to subtract from priority when route is down"; } } // list route } // container track container vrrp-inherit-from { description "VRRP group to follow for this VRRP group"; uses apply-advanced; leaf active-interface { type union { type jt:interface-unit; type string { pattern "<.*>|$.*"; } } description "Interface name of VRRP active group"; } leaf active-group { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "0 .. 255"; } } description "Identifier for VRRP active group"; } } // container vrrp-inherit-from leaf advertisements-threshold { type union { type string { pattern "<.*>|$.*"; } type uint32 { range "1 .. 15"; } } description "Number of vrrp advertisements missed before declaring master down"; } } // grouping vrrp-group grouping write-option-82-type { uses apply-advanced; } // grouping write-option-82-type } // module junos-ex-conf-logical-systems
© 2024 YumaWorks, Inc. All rights reserved.