Junos protocols configuration module
Version: 2019-01-01
module junos-ex-conf-protocols { yang-version 1; namespace "http://yang.juniper.net/junos-ex/conf/protocols"; prefix jc-protocols; 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 protocols configuration module"; revision "2019-01-01" { description "Junos: 21.3R1.9"; } augment /jc:configuration { uses protocols-group; } augment /jc:configuration/jc:groups { uses protocols-group; } grouping protocols-group { container protocols { description "Routing protocol configuration"; uses juniper-protocols; } // container protocols } // grouping protocols-group 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 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 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-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 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 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 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 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 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 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 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 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_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 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 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 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 } // module junos-ex-conf-protocols
© 2023 YumaWorks, Inc. All rights reserved.