This YANG module defines essential components for the management of a routing subsystem. The model fully conforms to the Networ...
Version: 2018-03-13
module ietf-routing { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-routing"; prefix rt; import ietf-yang-types { prefix yang; } import ietf-interfaces { prefix if; description "An 'ietf-interfaces' module version that is compatible with the Network Management Datastore Architecture (NMDA) is required."; } organization "IETF NETMOD (Network Modeling) Working Group"; contact "WG Web: <https://datatracker.ietf.org/wg/netmod/> WG List: <mailto:rtgwg@ietf.org> Editor: Ladislav Lhotka <mailto:lhotka@nic.cz> Acee Lindem <mailto:acee@cisco.com> Yingzhen Qu <mailto:yingzhen.qu@huawei.com>"; description "This YANG module defines essential components for the management of a routing subsystem. The model fully conforms to the Network Management Datastore Architecture (NMDA). Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8349; see the RFC itself for full legal notices."; revision "2018-03-13" { description "Network Management Datastore Architecture (NMDA) revision."; reference "RFC 8349: A YANG Data Model for Routing Management (NMDA Version)"; } revision "2016-11-04" { description "Initial revision."; reference "RFC 8022: A YANG Data Model for Routing Management"; } feature multiple-ribs { description "This feature indicates that the server supports user-defined RIBs. Servers that do not advertise this feature SHOULD provide exactly one system-controlled RIB per supported address family and also make it the default RIB. This RIB then appears as an entry in the list '/routing/ribs/rib'."; } feature router-id { description "This feature indicates that the server supports an explicit 32-bit router ID that is used by some routing protocols. Servers that do not advertise this feature set a router ID algorithmically, usually to one of the configured IPv4 addresses. However, this algorithm is implementation specific."; } identity address-family { description "Base identity from which identities describing address families are derived."; } identity ipv4 { base address-family; description "This identity represents an IPv4 address family."; } identity ipv6 { base address-family; description "This identity represents an IPv6 address family."; } identity control-plane-protocol { description "Base identity from which control-plane protocol identities are derived."; } identity routing-protocol { base control-plane-protocol; description "Identity from which Layer 3 routing protocol identities are derived."; } identity direct { base routing-protocol; description "Routing pseudo-protocol that provides routes to directly connected networks."; } identity static { base routing-protocol; description "'Static' routing pseudo-protocol."; } typedef route-preference { type uint32; description "This type is used for route preferences."; } container routing { description "Configuration parameters for the routing subsystem."; leaf router-id { type yang:dotted-quad; description "A 32-bit number in the form of a dotted quad that is used by some routing protocols identifying a router."; reference "RFC 2328: OSPF Version 2"; } container interfaces { config false; description "Network-layer interfaces used for routing."; leaf-list interface { type if:interface-ref; description "Each entry is a reference to the name of a configured network-layer interface."; } } // container interfaces container control-plane-protocols { description "Support for control-plane protocol instances."; list control-plane-protocol { key "type name"; description "Each entry contains a control-plane protocol instance."; leaf type { type identityref { base control-plane-protocol; } description "Type of the control-plane protocol -- an identity derived from the 'control-plane-protocol' base identity."; } leaf name { type string; description "An arbitrary name of the control-plane protocol instance."; } leaf description { type string; description "Textual description of the control-plane protocol instance."; } container static-routes { when "derived-from-or-self(../type, 'rt:static')" { description "This container is only valid for the 'static' routing protocol."; } description "Support for the 'static' pseudo-protocol. Address-family-specific modules augment this node with their lists of routes."; container ipv6 { description "Configuration of a 'static' pseudo-protocol instance consists of a list of routes."; list route { key "destination-prefix"; description "A list of static routes."; leaf destination-prefix { type inet:ipv6-prefix; mandatory true; description "IPv6 destination prefix."; } leaf description { type string; description "Textual description of the route."; } container next-hop { description "Configuration of next-hop."; choice next-hop-options { mandatory true; description "Options for next hops in static routes. It is expected that further cases will be added through augments from other modules."; case simple-next-hop { description "This case represents a simple next hop consisting of the next-hop address and/or outgoing interface. Modules for address families MUST augment this case with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // case simple-next-hop leaf special-next-hop { type enumeration { enum "blackhole" { value 0; description "Silently discard the packet."; } enum "unreachable" { value 1; description "Discard the packet and notify the sender with an error message indicating that the destination host is unreachable."; } enum "prohibit" { value 2; description "Discard the packet and notify the sender with an error message indicating that the communication is administratively prohibited."; } enum "receive" { value 3; description "The packet will be received by the local system."; } } description "Options for special next hops."; } container next-hop-list { description "Container for multiple next hops."; list next-hop { key "index"; description "An entry in a next-hop list. Modules for address families MUST augment this list with a leaf containing a next-hop address of that address family."; leaf index { type string; description "A user-specified identifier utilized to uniquely reference the next-hop entry in the next-hop list. The value of this index has no semantic meaning other than for referencing the entry."; } leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop } // list route } // container ipv6 } // container static-routes container mpls-ldp { must "not (../../rt:control-plane-protocol[derived-from-or-self(rt:type, 'ldp:mpls-ldp')][rt:name!=current()/../rt:name])" { description "Only one LDP instance is allowed."; } description "Containing configuration and operational data for the LDP protocol."; container global { description "Global attributes for LDP."; container capability { description "Containing the LDP capability data. The container is used for augmentations."; reference "RFC 5036: LDP Specification, Sec. 1.5."; } // container capability container graceful-restart { description "Attributes for graceful restart."; leaf enabled { type boolean; default "false"; description "Enable or disable graceful restart."; } leaf reconnect-time { type uint16 { range "10..1800"; } units "seconds"; default "120"; description "Specifies the time interval that the remote LDP peer must wait for the local LDP peer to reconnect after the remote peer detects the LDP communication failure."; } leaf recovery-time { type uint16 { range "30..3600"; } units "seconds"; default "120"; description "Specifies the time interval, in seconds, that the remote LDP peer preserves its MPLS forwarding state after receiving the Initialization message from the restarted local LDP peer."; } leaf forwarding-holdtime { type uint16 { range "30..3600"; } units "seconds"; default "180"; description "Specifies the time interval, in seconds, before the termination of the recovery phase."; } } // container graceful-restart leaf lsr-id { type rt-types:router-id; description "Specifies the value to act as the LDP LSR Id. If this attribute is not specified, LDP uses the router ID as determined by the system."; } container address-families { description "Per-address-family configuration and operational state. The address family can be either IPv4 or IPv6."; container ipv4 { presence "Present if IPv4 is enabled, unless the 'enabled' leaf is set to 'false'."; description "Containing data related to the IPv4 address family."; leaf enabled { type boolean; default "true"; description "'false' to disable the address family."; } leaf label-distribution-control-mode { type enumeration { enum "independent" { value 0; description "Independent label distribution control."; } enum "ordered" { value 1; description "Ordered label distribution control."; } } config false; description "Label distribution control mode."; reference "RFC 5036: LDP Specification, Sec. 2.6."; } container bindings { config false; description "LDP address and label binding information."; list address { key "address"; description "List of address bindings learned by LDP."; leaf address { type inet:ipv4-address; description "The IPv4 address learned from an Address message received from or advertised to a peer."; } leaf advertisement-type { type advertised-received; description "Received or advertised."; } container peer { when "../advertisement-type = 'received'" { description "Applicable for received address."; } description "LDP peer from which this address is received."; leaf lsr-id { type leafref { path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; } description "The LSR Id of the peer, as a portion of the peer LDP ID."; } leaf label-space-id { type leafref { path "../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id"; } description "The label space Id of the peer, as a portion of the peer LDP ID."; } } // container peer } // list address list fec-label { key "fec"; description "List of FEC-label bindings learned by LDP."; leaf fec { type inet:ipv4-prefix; description "The prefix FEC value in the FEC-Label binding, learned in a Label Mapping message received from or advertised to a peer."; } list peer { key "lsr-id label-space-id advertisement-type"; description "List of advertised and received peers."; leaf lsr-id { type leafref { path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; } description "The LSR Id of the peer, as a portion of the peer LDP ID."; } leaf label-space-id { type leafref { path "../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id"; } description "The label space Id of the peer, as a portion of the peer LDP ID."; } leaf advertisement-type { type advertised-received; description "Received or advertised."; } leaf label { type rt-types:mpls-label; description "Advertised (outbound) or received (inbound) label."; } leaf used-in-forwarding { type boolean; description "'true' if the label is used in forwarding."; } } // list peer } // list fec-label } // container bindings } // container ipv4 } // container address-families } // container global container discovery { description "Neighbor-discovery configuration and operational state."; container interfaces { description "A list of interfaces for LDP Basic Discovery."; reference "RFC 5036: LDP Specification, Sec. 2.4.1."; leaf hello-holdtime { type uint16 { range "15..3600"; } units "seconds"; default "15"; description "The time interval for which an LDP link Hello adjacency is maintained in the absence of link Hello messages from the LDP neighbor. This leaf may be configured at the per-interface level or the global level, with precedence given to the value at the per-interface level. If the leaf is not configured at either level, the default value at the global level is used."; } leaf hello-interval { type uint16 { range "5..1200"; } units "seconds"; default "5"; description "The interval between consecutive LDP link Hello messages used in basic LDP discovery. This leaf may be configured at the per-interface level or the global level, with precedence given to the value at the per-interface level. If the leaf is not configured at either level, the default value at the global level is used."; } list interface { key "name"; description "List of LDP interfaces used for LDP Basic Discovery."; leaf name { type if:interface-ref; must "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4) or (/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" { description "Interface is IPv4 or IPv6."; } description "The name of an LDP interface."; } leaf next-hello { type uint16; units "seconds"; config false; description "Time to send the next Hello message."; } container address-families { description "Container for address families."; container ipv4 { presence "Present if IPv4 is enabled, unless the 'enabled' leaf is set to 'false'."; description "IPv4 address family."; leaf enabled { type boolean; default "true"; description "Set to false to disable the address family on the interface."; } container hello-adjacencies { config false; description "Containing a list of Hello adjacencies."; list hello-adjacency { key "adjacent-address"; config false; description "List of Hello adjacencies."; leaf adjacent-address { type inet:ipv4-address; description "Neighbor address of the Hello adjacency."; } leaf-list flag { type identityref { base adjacency-flag-base; } description "One or more flags to indicate whether the adjacency is actively created, passively accepted, or both."; } container hello-holdtime { description "Containing Hello holdtime state information."; leaf adjacent { type uint16; units "seconds"; description "The holdtime value learned from the adjacent LSR."; } leaf negotiated { type uint16; units "seconds"; description "The holdtime negotiated between this LSR and the adjacent LSR."; } leaf remaining { type uint16; units "seconds"; description "The time remaining until the holdtime timer expires."; } } // container hello-holdtime leaf next-hello { type uint16; units "seconds"; description "The time when the next Hello message will be sent."; } container statistics { description "Statistics objects."; leaf discontinuity-time { type yang:date-and-time; mandatory true; description "The time on the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } leaf hello-received { type yang:counter64; description "The number of Hello messages received."; } leaf hello-dropped { type yang:counter64; description "The number of Hello messages dropped."; } } // container statistics container peer { description "Reference to an LDP peer, by the LDP ID, which consists of the LSR Id and the label space Id."; leaf lsr-id { type leafref { path "../../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; } description "The LSR Id of the peer, as a portion of the peer LDP ID."; } leaf label-space-id { type leafref { path "../../../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id"; } description "The label space Id of the peer, as a portion of the peer LDP ID."; } } // container peer } // list hello-adjacency } // container hello-adjacencies } // container ipv4 } // container address-families } // list interface } // container interfaces container targeted { description "A list of targeted neighbors for extended discovery."; leaf hello-holdtime { type uint16 { range "15..3600"; } units "seconds"; default "45"; description "The time interval for which an LDP targeted Hello adjacency is maintained in the absence of targeted Hello messages from an LDP neighbor."; } leaf hello-interval { type uint16 { range "5..3600"; } units "seconds"; default "15"; description "The interval between consecutive LDP targeted Hello messages used in extended LDP discovery."; } container hello-accept { description "LDP policy to control the acceptance of extended neighbor-discovery Hello messages."; leaf enabled { type boolean; default "false"; description "'true' to accept; 'false' to deny."; } } // container hello-accept container address-families { description "Container for address families."; container ipv4 { presence "Present if IPv4 is enabled."; description "IPv4 address family."; container hello-adjacencies { config false; description "Containing a list of Hello adjacencies."; list hello-adjacency { key "local-address adjacent-address"; description "List of Hello adjacencies."; leaf local-address { type inet:ipv4-address; description "Local address of the Hello adjacency."; } leaf adjacent-address { type inet:ipv4-address; description "Neighbor address of the Hello adjacency."; } leaf-list flag { type identityref { base adjacency-flag-base; } description "One or more flags to indicate whether the adjacency is actively created, passively accepted, or both."; } container hello-holdtime { description "Containing Hello holdtime state information."; leaf adjacent { type uint16; units "seconds"; description "The holdtime value learned from the adjacent LSR."; } leaf negotiated { type uint16; units "seconds"; description "The holdtime negotiated between this LSR and the adjacent LSR."; } leaf remaining { type uint16; units "seconds"; description "The time remaining until the holdtime timer expires."; } } // container hello-holdtime leaf next-hello { type uint16; units "seconds"; description "The time when the next Hello message will be sent."; } container statistics { description "Statistics objects."; leaf discontinuity-time { type yang:date-and-time; mandatory true; description "The time on the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } leaf hello-received { type yang:counter64; description "The number of Hello messages received."; } leaf hello-dropped { type yang:counter64; description "The number of Hello messages dropped."; } } // container statistics container peer { description "Reference to an LDP peer, by the LDP ID, which consists of the LSR Id and the label space Id."; leaf lsr-id { type leafref { path "../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; } description "The LSR Id of the peer, as a portion of the peer LDP ID."; } leaf label-space-id { type leafref { path "../../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id"; } description "The label space Id of the peer, as a portion of the peer LDP ID."; } } // container peer } // list hello-adjacency } // container hello-adjacencies list target { key "adjacent-address"; description "Targeted discovery params."; leaf adjacent-address { type inet:ipv4-address; description "Configures a remote LDP neighbor for the extended LDP discovery."; } leaf enabled { type boolean; default "true"; description "'true' to enable the target."; } leaf local-address { type inet:ipv4-address; description "The local address used as the source address to send targeted Hello messages. If the value is not specified, the transport address is used as the source address."; } } // list target } // container ipv4 } // container address-families } // container targeted } // container discovery container peers { description "Peers configuration attributes."; container authentication { description "Containing authentication information."; choice authentication-type { description "Choice of authentication."; case password { leaf key { type string; description "This leaf specifies the authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with key."; } } // case password } // choice authentication-type } // container authentication leaf session-ka-holdtime { type uint16 { range "45..3600"; } units "seconds"; default "180"; description "The time interval after which an inactive LDP session terminates and the corresponding TCP session closes. Inactivity is defined as not receiving LDP packets from the peer. This leaf may be configured at the per-peer level or the global level, with precedence given to the value at the per-peer level. If the leaf is not configured at either level, the default value at the global level is used."; } leaf session-ka-interval { type uint16 { range "15..1200"; } units "seconds"; default "60"; description "The interval between successive transmissions of KeepAlive packets. Keepalive packets are only sent in the absence of other LDP packets transmitted over the LDP session. This leaf may be configured at the per-peer level or the global level, with precedence given to the value at the per-peer level. If the leaf is not configured at either level, the default value at the global level is used."; } list peer { key "lsr-id label-space-id"; description "List of peers."; leaf lsr-id { type rt-types:router-id; description "The LSR Id of the peer, used to identify the globally unique LSR. This is the first four octets of the LDP ID. This leaf is used together with the leaf 'label-space-id' to form the LDP ID."; reference "RFC 5036: LDP Specification, Sec. 2.2.2."; } leaf label-space-id { type uint16; description "The label space Id of the peer, used to identify a specific label space within the LSR. This is the last two octets of the LDP ID. This leaf is used together with the leaf 'lsr-id' to form the LDP ID."; reference "RFC 5036: LDP Specification, Sec. 2.2.2."; } container authentication { description "Containing authentication information."; choice authentication-type { description "Choice of authentication."; case password { leaf key { type string; description "This leaf specifies the authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with key."; } } // case password } // choice authentication-type } // container authentication container address-families { description "Per-vrf per-af params."; container ipv4 { presence "Present if IPv4 is enabled."; description "IPv4 address family."; container hello-adjacencies { config false; description "Containing a list of Hello adjacencies."; list hello-adjacency { key "local-address adjacent-address"; description "List of Hello adjacencies."; leaf local-address { type inet:ipv4-address; description "Local address of the Hello adjacency."; } leaf adjacent-address { type inet:ipv4-address; description "Neighbor address of the Hello adjacency."; } leaf-list flag { type identityref { base adjacency-flag-base; } description "One or more flags to indicate whether the adjacency is actively created, passively accepted, or both."; } container hello-holdtime { description "Containing Hello holdtime state information."; leaf adjacent { type uint16; units "seconds"; description "The holdtime value learned from the adjacent LSR."; } leaf negotiated { type uint16; units "seconds"; description "The holdtime negotiated between this LSR and the adjacent LSR."; } leaf remaining { type uint16; units "seconds"; description "The time remaining until the holdtime timer expires."; } } // container hello-holdtime leaf next-hello { type uint16; units "seconds"; description "The time when the next Hello message will be sent."; } container statistics { description "Statistics objects."; leaf discontinuity-time { type yang:date-and-time; mandatory true; description "The time on the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } leaf hello-received { type yang:counter64; description "The number of Hello messages received."; } leaf hello-dropped { type yang:counter64; description "The number of Hello messages dropped."; } } // container statistics leaf interface { type if:interface-ref; description "Interface for this adjacency."; } } // list hello-adjacency } // container hello-adjacencies } // container ipv4 } // container address-families container label-advertisement-mode { config false; description "Label advertisement mode state."; leaf local { type label-adv-mode; description "Local Label Advertisement Mode."; } leaf peer { type label-adv-mode; description "Peer Label Advertisement Mode."; } leaf negotiated { type label-adv-mode; description "Negotiated Label Advertisement Mode."; } } // container label-advertisement-mode leaf next-keep-alive { type uint16; units "seconds"; config false; description "Time duration from now until sending the next KeepAlive message."; } container received-peer-state { config false; description "Operational state information learned from the peer."; container graceful-restart { description "Attributes for graceful restart."; leaf enabled { type boolean; description "Enable or disable graceful restart. This leaf may be configured at the per-peer level or the global level, with precedence given to the value at the per-peer level. If the leaf is not configured at either level, the default value at the global level is used."; } leaf reconnect-time { type uint16 { range "10..1800"; } units "seconds"; description "Specifies the time interval that the remote LDP peer must wait for the local LDP peer to reconnect after the remote peer detects the LDP communication failure. This leaf may be configured at the per-peer level or the global level, with precedence given to the value at the per-peer level. If the leaf is not configured at either level, the default value at the global level is used."; } leaf recovery-time { type uint16 { range "30..3600"; } units "seconds"; description "Specifies the time interval, in seconds, that the remote LDP peer preserves its MPLS forwarding state after receiving the Initialization message from the restarted local LDP peer. This leaf may be configured at the per-peer level or the global level, with precedence given to the value at the per-peer level. If the leaf is not configured at either level, the default value at the global level is used."; } } // container graceful-restart container capability { description "Peer capability information."; container end-of-lib { description "Peer's end-of-lib capability."; leaf enabled { type boolean; description "'true' if peer's end-of-lib capability is enabled."; } } // container end-of-lib container typed-wildcard-fec { description "Peer's typed-wildcard-fec capability."; leaf enabled { type boolean; description "'true' if peer's typed-wildcard-fec capability is enabled."; } } // container typed-wildcard-fec container upstream-label-assignment { description "Peer's upstream label assignment capability."; leaf enabled { type boolean; description "'true' if peer's upstream label assignment is enabled."; } } // container upstream-label-assignment } // container capability } // container received-peer-state container session-holdtime { config false; description "Session holdtime state."; leaf peer { type uint16; units "seconds"; description "Peer holdtime."; } leaf negotiated { type uint16; units "seconds"; description "Negotiated holdtime."; } leaf remaining { type uint16; units "seconds"; description "Remaining holdtime."; } } // container session-holdtime leaf session-state { type enumeration { enum "non-existent" { value 0; description "NON EXISTENT state. Transport disconnected."; } enum "initialized" { value 1; description "INITIALIZED state."; } enum "openrec" { value 2; description "OPENREC state."; } enum "opensent" { value 3; description "OPENSENT state."; } enum "operational" { value 4; description "OPERATIONAL state."; } } config false; description "Representing the operational status of the LDP session."; reference "RFC 5036: LDP Specification, Sec. 2.5.4."; } container tcp-connection { config false; description "TCP connection state."; leaf local-address { type inet:ip-address; description "Local address."; } leaf local-port { type inet:port-number; description "Local port number."; } leaf remote-address { type inet:ip-address; description "Remote address."; } leaf remote-port { type inet:port-number; description "Remote port number."; } } // container tcp-connection leaf up-time { type rt-types:timeticks64; config false; description "The number of time ticks (hundredths of a second) since the state of the session with the peer changed to OPERATIONAL."; } container statistics { config false; description "Statistics objects."; leaf discontinuity-time { type yang:date-and-time; mandatory true; description "The time on the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container received { description "Inbound statistics."; leaf total-octets { type yang:counter64; description "The total number of octets sent or received."; } leaf total-messages { type yang:counter64; description "The number of messages sent or received."; } leaf address { type yang:counter64; description "The number of Address messages sent or received."; } leaf address-withdraw { type yang:counter64; description "The number of address-withdraw messages sent or received."; } leaf initialization { type yang:counter64; description "The number of Initialization messages sent or received."; } leaf keepalive { type yang:counter64; description "The number of KeepAlive messages sent or received."; } leaf label-abort-request { type yang:counter64; description "The number of label-abort-request messages sent or received."; } leaf label-mapping { type yang:counter64; description "The number of label-mapping messages sent or received."; } leaf label-release { type yang:counter64; description "The number of label-release messages sent or received."; } leaf label-request { type yang:counter64; description "The number of label-request messages sent or received."; } leaf label-withdraw { type yang:counter64; description "The number of label-withdraw messages sent or received."; } leaf notification { type yang:counter64; description "The number of notification messages sent or received."; } } // container received container sent { description "Outbound statistics."; leaf total-octets { type yang:counter64; description "The total number of octets sent or received."; } leaf total-messages { type yang:counter64; description "The number of messages sent or received."; } leaf address { type yang:counter64; description "The number of Address messages sent or received."; } leaf address-withdraw { type yang:counter64; description "The number of address-withdraw messages sent or received."; } leaf initialization { type yang:counter64; description "The number of Initialization messages sent or received."; } leaf keepalive { type yang:counter64; description "The number of KeepAlive messages sent or received."; } leaf label-abort-request { type yang:counter64; description "The number of label-abort-request messages sent or received."; } leaf label-mapping { type yang:counter64; description "The number of label-mapping messages sent or received."; } leaf label-release { type yang:counter64; description "The number of label-release messages sent or received."; } leaf label-request { type yang:counter64; description "The number of label-request messages sent or received."; } leaf label-withdraw { type yang:counter64; description "The number of label-withdraw messages sent or received."; } leaf notification { type yang:counter64; description "The number of notification messages sent or received."; } } // container sent leaf total-addresses { type uint32; description "The number of learned addresses."; } leaf total-labels { type uint32; description "The number of learned labels."; } leaf total-fec-label-bindings { type uint32; description "The number of learned label-address bindings."; } } // container statistics } // list peer } // container peers } // container mpls-ldp container igmp-snooping-instance { if-feature igmp-snooping; description "IGMP snooping instance to configure igmp-snooping."; leaf l2-service-type { type l2-service-type; default "bridge"; description "It indicates bridge or other services."; } leaf enabled { type boolean; default "false"; description "Set the value to true to enable IGMP and MLD snooping."; } leaf forwarding-table-type { type enumeration { enum "mac" { value 0; description "MAC-based lookup mode."; } enum "ip" { value 1; description "IP-based lookup mode."; } } default "ip"; description "The default forwarding table type is ip."; } leaf explicit-tracking { if-feature explicit-tracking; type boolean; default "false"; description "Track the IGMPv3 and MLDv2 snooping membership reports from individual hosts. It contributes to saving network resources and shortening leave latency."; } leaf lite-exclude-filter { if-feature lite-exclude-filter; type empty; description "For IGMP snooping, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol, which simplifies the standard versions of IGMPv3. For MLD Snooping, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight MLDv2 protocol, which simplifies the standard versions of MLDv2."; reference "RFC 5790: Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols"; } leaf send-query { type boolean; default "false"; description "When it is true, this switch will send out a periodic IGMP General Query Message or MLD General Query Message."; } leaf fast-leave { if-feature fast-leave; type empty; description "When fast leave is enabled, the software assumes that no more than one host is present on each VLAN port."; } leaf last-member-query-interval { type uint16 { range "10..10230"; } units "deciseconds"; default "10"; description "Last Member Query Interval, which may be tuned to modify the leave latency of the network. It is represented in units of 1/10 second."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Section 8.8"; } leaf query-interval { type uint16; units "seconds"; default "125"; description "The Query Interval is the interval between General Queries sent by the Querier."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.7, 8.2, and 8.14.2"; } leaf query-max-response-time { type uint16; units "deciseconds"; default "100"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. It is represented in units of 1/10 second."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.1, 8.3, and 8.14.3"; } leaf require-router-alert { if-feature require-router-alert; type boolean; default "false"; description "When the value is true, a router alert should exist in the IP header of the IGMP or MLD packet. If it doesn't exist, the IGMP or MLD packet will be ignored."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 9.1, 9.2, and 9.3"; } leaf robustness-variable { type uint8 { range "1..7"; } default "2"; description "Querier's Robustness Variable allows tuning for the expected packet loss on a network."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.6, 8.1, and 8.14.1"; } leaf-list static-bridge-mrouter-interface { when "derived-from-or-self(../l2-service-type,"ims:bridge")"; if-feature static-mrouter-interface; type if:interface-ref; description "Static mrouter interface in bridge forwarding"; } leaf igmp-version { type uint8 { range "1..3"; } default "2"; description "IGMP version."; } leaf querier-source { type inet:ipv4-address; description "The source address of the IGMP General Query message, which is sent out by this switch."; } list static-l2-multicast-group { if-feature static-l2-multicast-group; key "group source-addr"; description "A static multicast route, (*,G) or (S,G)."; leaf group { type rt-types:ipv4-multicast-group-address; description "Multicast group IPv4 address."; } leaf source-addr { type rt-types:ipv4-multicast-source-address; description "Multicast source IPv4 address."; } leaf-list bridge-outgoing-interface { when "derived-from-or-self(../../l2-service-type, "ims:bridge")"; type if:interface-ref; description "Outgoing interface in bridge forwarding."; } } // list static-l2-multicast-group leaf entries-count { type yang:gauge32; config false; description "The number of L2 multicast entries in IGMP and MLD snooping."; } leaf-list bridge-mrouter-interface { when "derived-from-or-self(../l2-service-type,"ims:bridge")"; type if:interface-ref; config false; description "Indicates a list of mrouter interfaces dynamically learned in a bridge. When this switch receives IGMP/MLD queries from a multicast router on an interface, the interface will become an mrouter interface for IGMP/MLD snooping."; } list group { key "address"; config false; description "IGMP snooping information."; leaf address { type rt-types:ipv4-multicast-group-address; description "Multicast group IPv4 address."; } leaf mac-address { type yang:phys-address; description "Destination MAC address for L2 multicast."; } leaf expire { type rt-types:timer-value-seconds16; units "seconds"; description "The time left before multicast group timeout."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The time elapsed since the L2 multicast record was created."; } leaf last-reporter { type inet:ipv4-address; description "Address of the last host that has sent a report to join the multicast group."; } list source { key "address"; description "Source IPv4 address for multicast stream."; leaf address { type rt-types:ipv4-multicast-source-address; description "Source IPv4 address for multicast stream."; } leaf-list bridge-outgoing-interface { when "derived-from-or-self(../../../l2-service-type, "ims:bridge")"; type if:interface-ref; description "Outgoing interface in bridge forwarding."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The time elapsed since L2 multicast record was created."; } leaf expire { type rt-types:timer-value-seconds16; units "seconds"; description "The time left before multicast group timeout."; } leaf host-count { if-feature explicit-tracking; type yang:gauge32; description "The number of host addresses."; } leaf last-reporter { type inet:ipv4-address; description "Address of the last host that has sent a report to join the multicast group."; } list host { if-feature explicit-tracking; key "address"; description "List of multicast membership hosts of the specific multicast source group."; leaf address { type inet:ipv4-address; description "Multicast membership host address."; } leaf filter-mode { type filter-mode-type; mandatory true; description "Filter mode for a multicast membership host may be either include or exclude."; } } // list host } // list source } // list group container interfaces { config false; description "Contains the interfaces associated with the IGMP snooping instance."; list interface { key "name"; description "A list of interfaces associated with the IGMP snooping instance."; leaf name { type if:interface-ref; description "The name of the interface."; } container statistics { description "The interface statistics for IGMP snooping."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistic counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container received { description "Number of received snooped IGMP packets."; leaf query-count { type yang:counter64; description "The number of Membership Query messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf membership-report-v1-count { type yang:counter64; description "The number of Version 1 Membership Report messages."; reference "RFC 1112: Host extensions for IP multicasting"; } leaf membership-report-v2-count { type yang:counter64; description "The number of Version 2 Membership Report messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf membership-report-v3-count { type yang:counter64; description "The number of Version 3 Membership Report messages."; reference "RFC 3376: Internet Group Management Protocol, Version 3"; } leaf leave-count { type yang:counter64; description "The number of Leave Group messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf pim-hello-count { type yang:counter64; description "The number of PIM hello messages."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } } // container received container sent { description "Number of sent snooped IGMP packets."; leaf query-count { type yang:counter64; description "The number of Membership Query messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf membership-report-v1-count { type yang:counter64; description "The number of Version 1 Membership Report messages."; reference "RFC 1112: Host extensions for IP multicasting"; } leaf membership-report-v2-count { type yang:counter64; description "The number of Version 2 Membership Report messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf membership-report-v3-count { type yang:counter64; description "The number of Version 3 Membership Report messages."; reference "RFC 3376: Internet Group Management Protocol, Version 3"; } leaf leave-count { type yang:counter64; description "The number of Leave Group messages."; reference "RFC 2236: Internet Group Management Protocol, Version 2"; } leaf pim-hello-count { type yang:counter64; description "The number of PIM hello messages."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } } // container sent } // container statistics } // list interface } // container interfaces action clear-igmp-snooping-groups { if-feature action-clear-groups; description "Clear IGMP snooping cache tables."; input { leaf group { type union { type enumeration { enum "all-groups" { value 0; description "All multicast group addresses."; } } type rt-types:ipv4-multicast-group-address; } mandatory true; description "Multicast group IPv4 address. If value 'all-groups' is specified, all IGMP snooping group entries are cleared for the specified source address."; } leaf source { type rt-types:ipv4-multicast-source-address; mandatory true; description "Multicast source IPv4 address. If value '*' is specified, all IGMP snooping source-group tables are cleared."; } } } // rpc clear-igmp-snooping-groups } // container igmp-snooping-instance container mld-snooping-instance { if-feature mld-snooping; description "MLD snooping instance to configure mld-snooping."; leaf l2-service-type { type l2-service-type; default "bridge"; description "It indicates bridge or other services."; } leaf enabled { type boolean; default "false"; description "Set the value to true to enable IGMP and MLD snooping."; } leaf forwarding-table-type { type enumeration { enum "mac" { value 0; description "MAC-based lookup mode."; } enum "ip" { value 1; description "IP-based lookup mode."; } } default "ip"; description "The default forwarding table type is ip."; } leaf explicit-tracking { if-feature explicit-tracking; type boolean; default "false"; description "Track the IGMPv3 and MLDv2 snooping membership reports from individual hosts. It contributes to saving network resources and shortening leave latency."; } leaf lite-exclude-filter { if-feature lite-exclude-filter; type empty; description "For IGMP snooping, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol, which simplifies the standard versions of IGMPv3. For MLD Snooping, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight MLDv2 protocol, which simplifies the standard versions of MLDv2."; reference "RFC 5790: Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols"; } leaf send-query { type boolean; default "false"; description "When it is true, this switch will send out a periodic IGMP General Query Message or MLD General Query Message."; } leaf fast-leave { if-feature fast-leave; type empty; description "When fast leave is enabled, the software assumes that no more than one host is present on each VLAN port."; } leaf last-member-query-interval { type uint16 { range "10..10230"; } units "deciseconds"; default "10"; description "Last Member Query Interval, which may be tuned to modify the leave latency of the network. It is represented in units of 1/10 second."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Section 8.8"; } leaf query-interval { type uint16; units "seconds"; default "125"; description "The Query Interval is the interval between General Queries sent by the Querier."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.7, 8.2, and 8.14.2"; } leaf query-max-response-time { type uint16; units "deciseconds"; default "100"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. It is represented in units of 1/10 second."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.1, 8.3, and 8.14.3"; } leaf require-router-alert { if-feature require-router-alert; type boolean; default "false"; description "When the value is true, a router alert should exist in the IP header of the IGMP or MLD packet. If it doesn't exist, the IGMP or MLD packet will be ignored."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 9.1, 9.2, and 9.3"; } leaf robustness-variable { type uint8 { range "1..7"; } default "2"; description "Querier's Robustness Variable allows tuning for the expected packet loss on a network."; reference "RFC 3376: Internet Group Management Protocol, Version 3, Sections 4.1.6, 8.1, and 8.14.1"; } leaf-list static-bridge-mrouter-interface { when "derived-from-or-self(../l2-service-type,"ims:bridge")"; if-feature static-mrouter-interface; type if:interface-ref; description "Static mrouter interface in bridge forwarding"; } leaf mld-version { type uint8 { range "1..2"; } default "2"; description "MLD version."; } leaf querier-source { type inet:ipv6-address; description "The source address of MLD General Query message, which is sent out by this switch."; } list static-l2-multicast-group { if-feature static-l2-multicast-group; key "group source-addr"; description "A static multicast route, (*,G) or (S,G)."; leaf group { type rt-types:ipv6-multicast-group-address; description "Multicast group IPv6 address."; } leaf source-addr { type rt-types:ipv6-multicast-source-address; description "Multicast source IPv6 address."; } leaf-list bridge-outgoing-interface { when "derived-from-or-self(../../l2-service-type, "ims:bridge")"; type if:interface-ref; description "Outgoing interface in bridge forwarding."; } } // list static-l2-multicast-group leaf entries-count { type yang:gauge32; config false; description "The number of L2 multicast entries in IGMP and MLD snooping."; } leaf-list bridge-mrouter-interface { when "derived-from-or-self(../l2-service-type,"ims:bridge")"; type if:interface-ref; config false; description "Indicates a list of mrouter interfaces dynamically learned in a bridge. When this switch receives IGMP/MLD queries from a multicast router on an interface, the interface will become an mrouter interface for IGMP/MLD snooping."; } list group { key "address"; config false; description "MLD snooping statistics information."; leaf address { type rt-types:ipv6-multicast-group-address; description "Multicast group IPv6 address."; } leaf mac-address { type yang:phys-address; description "Destination MAC address for L2 multicast."; } leaf expire { type rt-types:timer-value-seconds16; units "seconds"; description "The time left before multicast group timeout."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The time elapsed since the L2 multicast record was created."; } leaf last-reporter { type inet:ipv6-address; description "Address of the last host that has sent report to join the multicast group."; } list source { key "address"; description "Source IPv6 address for multicast stream."; leaf address { type rt-types:ipv6-multicast-source-address; description "Source IPv6 address for multicast stream."; } leaf-list bridge-outgoing-interface { when "derived-from-or-self(../../../l2-service-type, "ims:bridge")"; type if:interface-ref; description "Outgoing interface in bridge forwarding."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The time elapsed since L2 multicast record was created."; } leaf expire { type rt-types:timer-value-seconds16; units "seconds"; description "The time left before multicast group timeout."; } leaf host-count { if-feature explicit-tracking; type yang:gauge32; description "The number of host addresses."; } leaf last-reporter { type inet:ipv6-address; description "Address of the last host that has sent report to join the multicast group."; } list host { if-feature explicit-tracking; key "address"; description "List of multicast membership hosts of the specific multicast source group."; leaf address { type inet:ipv6-address; description "Multicast membership host address."; } leaf filter-mode { type filter-mode-type; mandatory true; description "Filter mode for a multicast membership host may be either include or exclude."; } } // list host } // list source } // list group container interfaces { config false; description "Contains the interfaces associated with the MLD snooping instance."; list interface { key "name"; description "A list of interfaces associated with the MLD snooping instance."; leaf name { type if:interface-ref; description "The name of the interface."; } container statistics { description "The interface statistics for MLD snooping."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistic counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container received { description "Number of received snooped MLD packets."; leaf query-count { type yang:counter64; description "The number of Multicast Listener Query messages."; reference "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6"; } leaf report-v1-count { type yang:counter64; description "The number of Version 1 Multicast Listener Report."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6"; } leaf report-v2-count { type yang:counter64; description "The number of Version 2 Multicast Listener Report."; reference "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6"; } leaf done-count { type yang:counter64; description "The number of Version 1 Multicast Listener Done."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6"; } leaf pim-hello-count { type yang:counter64; description "The number of PIM hello messages."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } } // container received container sent { description "Number of sent snooped MLD packets."; leaf query-count { type yang:counter64; description "The number of Multicast Listener Query messages."; reference "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6"; } leaf report-v1-count { type yang:counter64; description "The number of Version 1 Multicast Listener Report."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6"; } leaf report-v2-count { type yang:counter64; description "The number of Version 2 Multicast Listener Report."; reference "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6"; } leaf done-count { type yang:counter64; description "The number of Version 1 Multicast Listener Done."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6"; } leaf pim-hello-count { type yang:counter64; description "The number of PIM hello messages."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } } // container sent } // container statistics } // list interface } // container interfaces action clear-mld-snooping-groups { if-feature action-clear-groups; description "Clear MLD snooping cache tables."; input { leaf group { type union { type enumeration { enum "all-groups" { value 0; description "All multicast group addresses."; } } type rt-types:ipv6-multicast-group-address; } mandatory true; description "Multicast group IPv6 address. If value 'all-groups' is specified, all MLD snooping group entries are cleared for the specified source address."; } leaf source { type rt-types:ipv6-multicast-source-address; mandatory true; description "Multicast source IPv6 address. If value '*' is specified, all MLD snooping source-group tables are cleared."; } } } // rpc clear-mld-snooping-groups } // container mld-snooping-instance container bfd { description "BFD top-level container."; container summary { config false; description "BFD session statistics summary."; leaf number-of-sessions { type yang:gauge32; description "Number of BFD sessions."; } leaf number-of-sessions-up { type yang:gauge32; description "Number of BFD sessions currently in the 'Up' state (as defined in RFC 5880)."; } leaf number-of-sessions-down { type yang:gauge32; description "Number of BFD sessions currently in the 'Down' or 'Init' state but not 'adminDown' (as defined in RFC 5880)."; } leaf number-of-sessions-admin-down { type yang:gauge32; description "Number of BFD sessions currently in the 'adminDown' state (as defined in RFC 5880)."; } } // container summary container ip-sh { description "BFD IP single-hop top-level container."; container summary { config false; description "BFD session statistics summary."; leaf number-of-sessions { type yang:gauge32; description "Number of BFD sessions."; } leaf number-of-sessions-up { type yang:gauge32; description "Number of BFD sessions currently in the 'Up' state (as defined in RFC 5880)."; } leaf number-of-sessions-down { type yang:gauge32; description "Number of BFD sessions currently in the 'Down' or 'Init' state but not 'adminDown' (as defined in RFC 5880)."; } leaf number-of-sessions-admin-down { type yang:gauge32; description "Number of BFD sessions currently in the 'adminDown' state (as defined in RFC 5880)."; } } // container summary container sessions { description "BFD IP single-hop sessions."; list session { key "interface dest-addr"; description "List of IP single-hop sessions."; leaf interface { type if:interface-ref; description "Interface on which the BFD session is running."; } leaf dest-addr { type inet:ip-address; description "IP address of the peer."; } leaf source-addr { type inet:ip-address; description "Local IP address."; } leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type leaf demand-enabled { if-feature demand-mode; type boolean; default "false"; description "To enable Demand mode."; } leaf admin-down { type boolean; default "false"; description "Indicates whether the BFD session is administratively down."; } container authentication { if-feature authentication; presence "Enables BFD authentication (see Section 6.7 of RFC 5880)."; description "Parameters for BFD authentication."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD), Section 6.7"; leaf key-chain { type key-chain:key-chain-ref; description "Name of the 'key-chain' as per RFC 8177."; } leaf meticulous { type boolean; description "Enables a meticulous mode as per Section 6.7 of RFC 5880."; } } // container authentication leaf path-type { type identityref { base path-type; } config false; description "BFD path type. This indicates the path type that BFD is running on."; } leaf ip-encapsulation { type boolean; config false; description "Indicates whether BFD encapsulation uses IP."; } leaf local-discriminator { type discriminator; config false; description "Local discriminator."; } leaf remote-discriminator { type discriminator; config false; description "Remote discriminator."; } leaf remote-multiplier { type multiplier; config false; description "Remote multiplier."; } leaf demand-capability { if-feature demand-mode; type boolean; config false; description "Local Demand mode capability."; } leaf source-port { when "../ip-encapsulation = 'true'" { description "Source port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Source UDP port."; } leaf dest-port { when "../ip-encapsulation = 'true'" { description "Destination port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Destination UDP port."; } container session-running { config false; description "BFD 'session-running' information."; leaf session-index { type uint32; description "An index used to uniquely identify BFD sessions."; } leaf local-state { type state; description "Local state."; } leaf remote-state { type state; description "Remote state."; } leaf local-diagnostic { type iana-bfd-types:diagnostic; description "Local diagnostic."; } leaf remote-diagnostic { type iana-bfd-types:diagnostic; description "Remote diagnostic."; } leaf remote-authenticated { type boolean; description "Indicates whether incoming BFD control packets are authenticated."; } leaf remote-authentication-type { when "../remote-authenticated = 'true'" { description "Only valid when incoming BFD control packets are authenticated."; } if-feature authentication; type iana-bfd-types:auth-type; description "Authentication type of incoming BFD control packets."; } leaf detection-mode { type enumeration { enum "async-with-echo" { value 1; description "Async with echo."; } enum "async-without-echo" { value 2; description "Async without echo."; } enum "demand-with-echo" { value 3; description "Demand with echo."; } enum "demand-without-echo" { value 4; description "Demand without echo."; } } description "Detection mode."; } leaf negotiated-tx-interval { type uint32; units "microseconds"; description "Negotiated transmit interval."; } leaf negotiated-rx-interval { type uint32; units "microseconds"; description "Negotiated receive interval."; } leaf detection-time { type uint32; units "microseconds"; description "Detection time."; } leaf echo-tx-interval-in-use { when "../../path-type = 'bfd-types:path-ip-sh'" { description "Echo is supported for IP single-hop only."; } if-feature echo-mode; type uint32; units "microseconds"; description "Echo transmit interval in use."; } } // container session-running container session-statistics { config false; description "BFD per-session statistics."; leaf create-time { type yang:date-and-time; description "Time and date when this session was created."; } leaf last-down-time { type yang:date-and-time; description "Time and date of the last time this session went down."; } leaf last-up-time { type yang:date-and-time; description "Time and date of the last time this session went up."; } leaf down-count { type yang:counter32; description "The number of times this session has transitioned to the 'down' state."; } leaf admin-down-count { type yang:counter32; description "The number of times this session has transitioned to the 'admin-down' state."; } leaf receive-packet-count { type yang:counter64; description "Count of received packets in this session. This includes valid and invalid received packets."; } leaf send-packet-count { type yang:counter64; description "Count of sent packets in this session."; } leaf receive-invalid-packet-count { type yang:counter64; description "Count of invalid received packets in this session."; } leaf send-failed-packet-count { type yang:counter64; description "Count of packets that failed to be sent in this session."; } } // container session-statistics leaf role { type identityref { base bfd-unsol:role; } config false; description "Role."; } } // list session } // container sessions list interfaces { key "interface"; description "List of interfaces."; leaf interface { type if:interface-ref; description "BFD information for this interface."; } container authentication { if-feature authentication; presence "Enables BFD authentication (see Section 6.7 of RFC 5880)."; description "Parameters for BFD authentication."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD), Section 6.7"; leaf key-chain { type key-chain:key-chain-ref; description "Name of the 'key-chain' as per RFC 8177."; } leaf meticulous { type boolean; description "Enables a meticulous mode as per Section 6.7 of RFC 5880."; } } // container authentication container unsolicited { description "BFD IP single-hop interface unsolicited top-level container."; leaf enabled { type boolean; default "false"; description "Unsolicited BFD is enabled on this interface."; } leaf local-multiplier { if-feature bfd-unsol:unsolicited-params-per-interface; type bfd-types:multiplier; description "Multiplier transmitted by the local system. Defaults to ../../unsolicited/local-multiplier. A multiplier configured under an interface takes precedence over the multiplier configured at the global level."; } choice interval-config-type { if-feature bfd-unsol:unsolicited-params-per-interface; description "Two interval values or one value used for both transmit and receive. Defaults to ../../unsolicited/interval-config-type. An interval configured under an interface takes precedence over any interval configured at the global level."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature bfd-types:single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type } // container unsolicited } // list interfaces container unsolicited { description "BFD IP single-hop unsolicited top-level container."; leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type } // container unsolicited } // container ip-sh container ip-mh { description "BFD IP multihop top-level container."; container summary { config false; description "BFD session statistics summary."; leaf number-of-sessions { type yang:gauge32; description "Number of BFD sessions."; } leaf number-of-sessions-up { type yang:gauge32; description "Number of BFD sessions currently in the 'Up' state (as defined in RFC 5880)."; } leaf number-of-sessions-down { type yang:gauge32; description "Number of BFD sessions currently in the 'Down' or 'Init' state but not 'adminDown' (as defined in RFC 5880)."; } leaf number-of-sessions-admin-down { type yang:gauge32; description "Number of BFD sessions currently in the 'adminDown' state (as defined in RFC 5880)."; } } // container summary container session-groups { description "BFD IP multihop session groups."; list session-group { key "source-addr dest-addr"; description "Group of BFD IP multihop sessions (for ECMP). A group of sessions is between one source and one destination. Each session has a different field in the UDP/IP header for ECMP."; leaf source-addr { type inet:ip-address; description "Local IP address."; } leaf dest-addr { type inet:ip-address; description "IP address of the peer."; } leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type leaf demand-enabled { if-feature demand-mode; type boolean; default "false"; description "To enable Demand mode."; } leaf admin-down { type boolean; default "false"; description "Indicates whether the BFD session is administratively down."; } container authentication { if-feature authentication; presence "Enables BFD authentication (see Section 6.7 of RFC 5880)."; description "Parameters for BFD authentication."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD), Section 6.7"; leaf key-chain { type key-chain:key-chain-ref; description "Name of the 'key-chain' as per RFC 8177."; } leaf meticulous { type boolean; description "Enables a meticulous mode as per Section 6.7 of RFC 5880."; } } // container authentication leaf tx-ttl { type bfd-types:hops; default "255"; description "Hop count of outgoing BFD control packets."; } leaf rx-ttl { type bfd-types:hops; mandatory true; description "Minimum allowed hop count value for incoming BFD control packets. Control packets whose hop count is lower than this value are dropped."; } list sessions { config false; description "The multiple BFD sessions between a source and a destination."; leaf path-type { type identityref { base path-type; } config false; description "BFD path type. This indicates the path type that BFD is running on."; } leaf ip-encapsulation { type boolean; config false; description "Indicates whether BFD encapsulation uses IP."; } leaf local-discriminator { type discriminator; config false; description "Local discriminator."; } leaf remote-discriminator { type discriminator; config false; description "Remote discriminator."; } leaf remote-multiplier { type multiplier; config false; description "Remote multiplier."; } leaf demand-capability { if-feature demand-mode; type boolean; config false; description "Local Demand mode capability."; } leaf source-port { when "../ip-encapsulation = 'true'" { description "Source port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Source UDP port."; } leaf dest-port { when "../ip-encapsulation = 'true'" { description "Destination port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Destination UDP port."; } container session-running { config false; description "BFD 'session-running' information."; leaf session-index { type uint32; description "An index used to uniquely identify BFD sessions."; } leaf local-state { type state; description "Local state."; } leaf remote-state { type state; description "Remote state."; } leaf local-diagnostic { type iana-bfd-types:diagnostic; description "Local diagnostic."; } leaf remote-diagnostic { type iana-bfd-types:diagnostic; description "Remote diagnostic."; } leaf remote-authenticated { type boolean; description "Indicates whether incoming BFD control packets are authenticated."; } leaf remote-authentication-type { when "../remote-authenticated = 'true'" { description "Only valid when incoming BFD control packets are authenticated."; } if-feature authentication; type iana-bfd-types:auth-type; description "Authentication type of incoming BFD control packets."; } leaf detection-mode { type enumeration { enum "async-with-echo" { value 1; description "Async with echo."; } enum "async-without-echo" { value 2; description "Async without echo."; } enum "demand-with-echo" { value 3; description "Demand with echo."; } enum "demand-without-echo" { value 4; description "Demand without echo."; } } description "Detection mode."; } leaf negotiated-tx-interval { type uint32; units "microseconds"; description "Negotiated transmit interval."; } leaf negotiated-rx-interval { type uint32; units "microseconds"; description "Negotiated receive interval."; } leaf detection-time { type uint32; units "microseconds"; description "Detection time."; } leaf echo-tx-interval-in-use { when "../../path-type = 'bfd-types:path-ip-sh'" { description "Echo is supported for IP single-hop only."; } if-feature echo-mode; type uint32; units "microseconds"; description "Echo transmit interval in use."; } } // container session-running container session-statistics { config false; description "BFD per-session statistics."; leaf create-time { type yang:date-and-time; description "Time and date when this session was created."; } leaf last-down-time { type yang:date-and-time; description "Time and date of the last time this session went down."; } leaf last-up-time { type yang:date-and-time; description "Time and date of the last time this session went up."; } leaf down-count { type yang:counter32; description "The number of times this session has transitioned to the 'down' state."; } leaf admin-down-count { type yang:counter32; description "The number of times this session has transitioned to the 'admin-down' state."; } leaf receive-packet-count { type yang:counter64; description "Count of received packets in this session. This includes valid and invalid received packets."; } leaf send-packet-count { type yang:counter64; description "Count of sent packets in this session."; } leaf receive-invalid-packet-count { type yang:counter64; description "Count of invalid received packets in this session."; } leaf send-failed-packet-count { type yang:counter64; description "Count of packets that failed to be sent in this session."; } } // container session-statistics } // list sessions } // list session-group } // container session-groups } // container ip-mh container ip-sh { description "BFD IP single-hop top-level container."; container summary { config false; description "BFD session statistics summary."; leaf number-of-sessions { type yang:gauge32; description "Number of BFD sessions."; } leaf number-of-sessions-up { type yang:gauge32; description "Number of BFD sessions currently in the 'Up' state (as defined in RFC 5880)."; } leaf number-of-sessions-down { type yang:gauge32; description "Number of BFD sessions currently in the 'Down' or 'Init' state but not 'adminDown' (as defined in RFC 5880)."; } leaf number-of-sessions-admin-down { type yang:gauge32; description "Number of BFD sessions currently in the 'adminDown' state (as defined in RFC 5880)."; } } // container summary container sessions { description "BFD IP single-hop sessions."; list session { key "interface dest-addr"; description "List of IP single-hop sessions."; leaf interface { type if:interface-ref; description "Interface on which the BFD session is running."; } leaf dest-addr { type inet:ip-address; description "IP address of the peer."; } leaf source-addr { type inet:ip-address; description "Local IP address."; } leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type leaf demand-enabled { if-feature demand-mode; type boolean; default "false"; description "To enable Demand mode."; } leaf admin-down { type boolean; default "false"; description "Indicates whether the BFD session is administratively down."; } container authentication { if-feature authentication; presence "Enables BFD authentication (see Section 6.7 of RFC 5880)."; description "Parameters for BFD authentication."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD), Section 6.7"; leaf key-chain { type key-chain:key-chain-ref; description "Name of the 'key-chain' as per RFC 8177."; } leaf meticulous { type boolean; description "Enables a meticulous mode as per Section 6.7 of RFC 5880."; } } // container authentication leaf path-type { type identityref { base path-type; } config false; description "BFD path type. This indicates the path type that BFD is running on."; } leaf ip-encapsulation { type boolean; config false; description "Indicates whether BFD encapsulation uses IP."; } leaf local-discriminator { type discriminator; config false; description "Local discriminator."; } leaf remote-discriminator { type discriminator; config false; description "Remote discriminator."; } leaf remote-multiplier { type multiplier; config false; description "Remote multiplier."; } leaf demand-capability { if-feature demand-mode; type boolean; config false; description "Local Demand mode capability."; } leaf source-port { when "../ip-encapsulation = 'true'" { description "Source port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Source UDP port."; } leaf dest-port { when "../ip-encapsulation = 'true'" { description "Destination port valid only when IP encapsulation is used."; } type inet:port-number; config false; description "Destination UDP port."; } container session-running { config false; description "BFD 'session-running' information."; leaf session-index { type uint32; description "An index used to uniquely identify BFD sessions."; } leaf local-state { type state; description "Local state."; } leaf remote-state { type state; description "Remote state."; } leaf local-diagnostic { type iana-bfd-types:diagnostic; description "Local diagnostic."; } leaf remote-diagnostic { type iana-bfd-types:diagnostic; description "Remote diagnostic."; } leaf remote-authenticated { type boolean; description "Indicates whether incoming BFD control packets are authenticated."; } leaf remote-authentication-type { when "../remote-authenticated = 'true'" { description "Only valid when incoming BFD control packets are authenticated."; } if-feature authentication; type iana-bfd-types:auth-type; description "Authentication type of incoming BFD control packets."; } leaf detection-mode { type enumeration { enum "async-with-echo" { value 1; description "Async with echo."; } enum "async-without-echo" { value 2; description "Async without echo."; } enum "demand-with-echo" { value 3; description "Demand with echo."; } enum "demand-without-echo" { value 4; description "Demand without echo."; } } description "Detection mode."; } leaf negotiated-tx-interval { type uint32; units "microseconds"; description "Negotiated transmit interval."; } leaf negotiated-rx-interval { type uint32; units "microseconds"; description "Negotiated receive interval."; } leaf detection-time { type uint32; units "microseconds"; description "Detection time."; } leaf echo-tx-interval-in-use { when "../../path-type = 'bfd-types:path-ip-sh'" { description "Echo is supported for IP single-hop only."; } if-feature echo-mode; type uint32; units "microseconds"; description "Echo transmit interval in use."; } } // container session-running container session-statistics { config false; description "BFD per-session statistics."; leaf create-time { type yang:date-and-time; description "Time and date when this session was created."; } leaf last-down-time { type yang:date-and-time; description "Time and date of the last time this session went down."; } leaf last-up-time { type yang:date-and-time; description "Time and date of the last time this session went up."; } leaf down-count { type yang:counter32; description "The number of times this session has transitioned to the 'down' state."; } leaf admin-down-count { type yang:counter32; description "The number of times this session has transitioned to the 'admin-down' state."; } leaf receive-packet-count { type yang:counter64; description "Count of received packets in this session. This includes valid and invalid received packets."; } leaf send-packet-count { type yang:counter64; description "Count of sent packets in this session."; } leaf receive-invalid-packet-count { type yang:counter64; description "Count of invalid received packets in this session."; } leaf send-failed-packet-count { type yang:counter64; description "Count of packets that failed to be sent in this session."; } } // container session-statistics } // list session } // container sessions list interfaces { key "interface"; description "List of interfaces."; leaf interface { type if:interface-ref; description "BFD information for this interface."; } container authentication { if-feature authentication; presence "Enables BFD authentication (see Section 6.7 of RFC 5880)."; description "Parameters for BFD authentication."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD), Section 6.7"; leaf key-chain { type key-chain:key-chain-ref; description "Name of the 'key-chain' as per RFC 8177."; } leaf meticulous { type boolean; description "Enables a meticulous mode as per Section 6.7 of RFC 5880."; } } // container authentication } // list interfaces } // container ip-sh } // container bfd container ospf { description "OSPF protocol instance."; leaf address-family { when "derived-from-or-self(../../rt:type, 'ospfv3')" { description "Only applicable to OSPFv3."; } type iana-rt-types:address-family; description "Address family of the instance."; } leaf enabled { type boolean; default "true"; description "Enables/disables the protocol."; } leaf explicit-router-id { if-feature explicit-router-id; type rt-types:router-id; description "Defined in RFC 2328. A 32-bit number that uniquely identifies the router."; reference "RFC 2328: OSPF Version 2"; } container preference { description "Route preference configuration. In many implementations, preference is referred to as administrative distance."; reference "RFC 8349: A YANG Data Model for Routing Management (NMDA Version)"; choice scope { description "Options for expressing preference as single or multiple values."; leaf all { type uint8; description "Preference for intra-area, inter-area, and external routes."; } case multi-values { choice granularity { description "Options for expressing preference for intra-area and inter-area routes."; case detail { leaf intra-area { type uint8; description "Preference for intra-area routes."; } leaf inter-area { type uint8; description "Preference for inter-area routes."; } } // case detail leaf internal { type uint8; description "Preference for both intra-area and inter-area routes."; } } // choice granularity leaf external { type uint8; description "Preference for AS external and NSSA routes."; } } // case multi-values } // choice scope } // container preference container nsr { if-feature nsr; description "Non-Stop Routing (NSR) configuration state."; leaf enabled { type boolean; description "Enables/disables NSR."; } } // container nsr container graceful-restart { if-feature graceful-restart; description "Graceful restart configuration state."; reference "RFC 3623: Graceful OSPF Restart RFC 5187: OSPFv3 Graceful Restart"; leaf enabled { type boolean; description "Enables/disables graceful restart as defined in RFC 3623 for OSPFv2 and RFC 5187 for OSPFv3."; } leaf helper-enabled { type boolean; description "Enables graceful restart helper support for restarting routers (Section 3 of RFC 3623)."; reference "RFC 3623: Graceful OSPF Restart, Section 3"; } leaf restart-interval { type uint16 { range "1..1800"; } units "seconds"; default "120"; description "Interval during which to attempt graceful restart prior to failing (seconds) (Appendix B.1 of RFC 3623)."; reference "RFC 3623: Graceful OSPF Restart, Appendix B.1"; } leaf helper-strict-lsa-checking { type boolean; description "Terminates graceful restart when an LSA topology change is detected (Appendix B.2 of RFC 3623)."; reference "RFC 3623: Graceful OSPF Restart, Appendix B.2"; } } // container graceful-restart container auto-cost { if-feature auto-cost; description "Interface auto-cost configuration state."; leaf enabled { type boolean; description "Enables/disables interface auto-cost."; } leaf reference-bandwidth { when "../enabled = 'true'" { description "Only when auto-cost is enabled."; } type uint32 { range "1..4294967"; } units "Mbits"; description "Configures reference bandwidth used to automatically determine interface cost (Mbits). The cost is the reference bandwidth divided by the interface speed, with 1 being the minimum cost."; } } // container auto-cost container spf-control { description "SPF calculation control."; leaf paths { if-feature max-ecmp; type uint16 { range "1..65535"; } description "Maximum number of Equal-Cost Multi-Path (ECMP) paths."; } container ietf-spf-delay { if-feature ietf-spf-delay; description "IETF SPF delay algorithm configuration."; leaf initial-delay { type uint32; units "milliseconds"; default "50"; description "Delay used while in the 'QUIET' state (milliseconds)."; } leaf short-delay { type uint32; units "milliseconds"; default "200"; description "Delay used while in the 'SHORT_WAIT' state (milliseconds)."; } leaf long-delay { type uint32; units "milliseconds"; default "5000"; description "Delay used while in the 'LONG_WAIT' state (milliseconds)."; } leaf hold-down { type uint32; units "milliseconds"; default "10000"; description "This timer value defines the period without any changes for the IGP to be considered stable (milliseconds)."; } leaf time-to-learn { type uint32; units "milliseconds"; default "500"; description "Duration used to learn all the IGP events related to a single network event (milliseconds)."; } leaf current-state { type enumeration { enum "quiet" { value 0; description "'QUIET' state."; } enum "short-wait" { value 1; description "'SHORT_WAIT' state."; } enum "long-wait" { value 2; description "'LONG_WAIT' state."; } } config false; description "Current SPF back-off algorithm state."; } leaf remaining-time-to-learn { type rt-types:timer-value-milliseconds; config false; description "Remaining time until the time-to-learn timer fires."; } leaf remaining-hold-down { type rt-types:timer-value-milliseconds; config false; description "Remaining time until the hold-down timer fires."; } leaf last-event-received { type yang:timestamp; config false; description "Time of the last SPF triggering event."; } leaf next-spf-time { type yang:timestamp; config false; description "Time when the next SPF has been scheduled."; } leaf last-spf-time { type yang:timestamp; config false; description "Time of the last SPF computation."; } } // container ietf-spf-delay } // container spf-control container database-control { description "Database maintenance control."; leaf max-lsa { if-feature max-lsa; type uint32 { range "1..4294967294"; } description "Maximum number of OSPF LSAs the router will accept."; } } // container database-control container stub-router { if-feature stub-router; description "Sets the maximum metric configuration."; choice trigger { description "Specific triggers that will enable stub router state."; container always { presence "Enables unconditional stub router support"; description "Unconditional stub router state (advertises transit links with 'MaxLinkMetric')."; reference "RFC 6987: OSPF Stub Router Advertisement"; } // container always } // choice trigger } // container stub-router container mpls { description "OSPF MPLS configuration state."; container te-rid { if-feature te-rid; description "Stable OSPF Router IP address used for TE."; leaf ipv4-router-id { type inet:ipv4-address; description "Explicitly configures a TE IPv4 Router ID."; } leaf ipv6-router-id { type inet:ipv6-address; description "Explicitly configures a TE IPv6 Router ID."; } } // container te-rid container ldp { description "OSPF MPLS LDP configuration state."; leaf igp-sync { if-feature ldp-igp-sync; type boolean; description "Enables LDP IGP synchronization."; } } // container ldp } // container mpls container fast-reroute { if-feature fast-reroute; description "This container may be augmented with global parameters for IP-FRR."; container lfa { if-feature lfa; description "This container may be augmented with global parameters for Loop-Free Alternates (LFAs). Container creation has no effect on LFA activation."; } // container lfa } // container fast-reroute container node-tags { if-feature node-tag; description "Container for node administrative tags."; list node-tag { key "tag"; description "List of node tags."; leaf tag { type uint32; description "Node tag value."; } } // list node-tag } // container node-tags leaf router-id { type rt-types:router-id; config false; description "Defined in RFC 2328. A 32-bit number that uniquely identifies the router."; reference "RFC 2328: OSPF Version 2"; } container local-rib { config false; description "Local RIB."; list route { key "prefix"; description "OSPF instance's Local Routes."; leaf prefix { type inet:ip-prefix; description "Destination prefix."; } container next-hops { description "Next hops for the route."; list next-hop { description "List of next hops for the route."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop { type inet:ip-address; description "Address of the next hop."; } } // list next-hop } // container next-hops leaf metric { type uint32; description "Metric for this route."; } leaf route-type { type route-type; description "Route type for this route."; } leaf route-tag { type uint32; description "Route tag for this route."; } } // list route } // container local-rib container statistics { config false; description "Per-instance statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF instance's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF instance was last reinitialized, then this node contains the time the OSPF instance was reinitialized, which normally occurs when it was created."; } leaf originate-new-lsa-count { type yang:counter32; description "The number of new LSAs originated. Discontinuities in the value of this counter can occur when the OSPF instance is reinitialized."; } leaf rx-new-lsas-count { type yang:counter32; description "The number of new LSAs received. Discontinuities in the value of this counter can occur when the OSPF instance is reinitialized."; } leaf as-scope-lsa-count { type yang:gauge32; description "The number of AS-Scope LSAs."; } leaf as-scope-lsa-chksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for AS-Scope LSAs. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } container database { description "Container for per-AS-Scope LSA statistics."; list as-scope-lsa-type { description "List of AS-Scope LSA statistics."; leaf lsa-type { type uint16; description "AS-Scope LSA type."; } leaf lsa-count { type yang:gauge32; description "The number of LSAs of this LSA type."; } leaf lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for LSAs of this type. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } } // list as-scope-lsa-type } // container database container protected-routes { if-feature fast-reroute; config false; description "Instance protection statistics."; list address-family-stats { key "address-family prefix alternate"; description "Per-Address-Family (AF) protected prefix information."; leaf address-family { type iana-rt-types:address-family; description "Address family."; } leaf prefix { type inet:ip-prefix; description "Protected prefix."; } leaf alternate { type inet:ip-address; description "Alternate next hop for the prefix."; } leaf alternate-type { type enumeration { enum "equal-cost" { value 0; description "ECMP-based alternate."; } enum "lfa" { value 1; description "LFA-based alternate."; } enum "remote-lfa" { value 2; description "Remote-LFA-based alternate."; } enum "tunnel" { value 3; description "Tunnel-based alternate (like RSVP-TE or GRE)."; } enum "ti-lfa" { value 4; description "An alternate based on Topology-Independent Loop-Free Alternate (TI-LFA)."; } enum "mrt" { value 5; description "An alternate based on Maximally Redundant Trees (MRTs)."; } enum "other" { value 6; description "Unknown alternate type."; } } description "Type of alternate."; } leaf best { type boolean; description "Indicates that this alternate is preferred."; } leaf non-best-reason { type string { length "1..255"; } description "Information field used to describe why the alternate is not the best choice."; } leaf protection-available { type bits { bit node-protect { position 0; description "Node protection available."; } bit link-protect { position 1; description "Link protection available."; } bit srlg-protect { position 2; description "Shared Risk Link Group (SRLG) protection available."; } bit downstream-protect { position 3; description "Downstream protection available."; } bit other { position 4; description "Other protection available."; } } description "Protection provided by the alternate."; } leaf alternate-metric-1 { type uint32; description "Metric from the Point of Local Repair (PLR) to the destination through the alternate path."; } leaf alternate-metric-2 { type uint32; description "Metric from the PLR to the alternate node."; } leaf alternate-metric-3 { type uint32; description "Metric from the alternate node to the destination."; } } // list address-family-stats } // container protected-routes container unprotected-routes { if-feature fast-reroute; config false; description "List of prefixes that are not protected."; list address-family-stats { key "address-family prefix"; description "Per-AF unprotected prefix statistics."; leaf address-family { type iana-rt-types:address-family; description "Address family."; } leaf prefix { type inet:ip-prefix; description "Unprotected prefix."; } } // list address-family-stats } // container unprotected-routes list protection-statistics { key "frr-protection-method"; config false; description "List of protection method statistics."; leaf frr-protection-method { type string; description "Protection method used."; } list address-family-stats { key "address-family"; description "Per-AF protection statistics."; leaf address-family { type iana-rt-types:address-family; description "Address family."; } leaf total-routes { type uint32; description "Total prefixes."; } leaf unprotected-routes { type uint32; description "Total prefixes that are not protected."; } leaf protected-routes { type uint32; description "Total prefixes that are protected."; } leaf linkprotected-routes { type uint32; description "Total prefixes that are link protected."; } leaf nodeprotected-routes { type uint32; description "Total prefixes that are node protected."; } } // list address-family-stats } // list protection-statistics } // container statistics container database { config false; description "AS-Scope LSDB."; list as-scope-lsa-type { key "lsa-type"; description "List of OSPF AS-Scope LSAs."; leaf lsa-type { type uint16; description "OSPF AS-Scope LSA type."; } container as-scope-lsas { description "All AS-Scope LSAs of this LSA type."; list as-scope-lsa { key "lsa-id adv-router"; description "List of OSPF AS-Scope LSAs."; leaf lsa-id { type union { type yang:dotted-quad; type uint32; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "Advertising router."; } leaf decode-completed { type boolean; description "The OSPF LSA body was successfully decoded, except for unknown TLVs. Unknown LSA types and OSPFv2 unknown Opaque-LSA types are not decoded. Additionally, malformed LSAs are generally not accepted and will not be in the Link State Database (LSDB)."; } leaf raw-data { type yang:hex-string; description "The hexadecimal representation of the complete LSA as received or originated, in network byte order."; } choice version { description "OSPFv2 or OSPFv3 LSA body."; container ospfv2 { description "OSPFv2 LSA."; container header { must "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" { description "The opaque-type and the opaque-id only apply to Opaque-LSAs."; } description "Decoded OSPFv2 LSA header data."; container lsa-options { description "LSA Options."; leaf-list lsa-options { type identityref { base ospfv2-lsa-option; } description "List of LSA Options. This list will contain the identities for the OSPFv2 LSA Options that are set."; } } // container lsa-options leaf lsa-id { type yang:dotted-quad; mandatory true; description "Link State ID."; } leaf opaque-type { type uint8; description "Opaque-LSA type."; } leaf opaque-id { type opaque-id; description "Opaque-LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPFv2 LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits leaf num-of-links { type uint16; description "Number of links in the Router-LSA."; } container links { description "All router links."; list link { description "Router-LSA link."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container topologies { description "All topologies for the link."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled on the link."; } leaf metric { type uint16; description "Metric for the topology."; } } // list topology } // container topologies } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; leaf network-mask { type yang:dotted-quad; description "The IP address mask for the network."; } container attached-routers { description "All attached routers."; leaf-list attached-router { type inet:ipv4-address; description "List of the routers attached to the network."; } } // container attached-routers } // container network container summary { when "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" { description "Only applies to summary LSAs."; } description "Summary LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the summary LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the summary."; } leaf metric { type ospf-metric; description "Metric for the topology."; } } // list topology } // container topologies } // container summary container external { when "derived-from(../../header/type, 'ospfv2-external-lsa-type')" { description "Only applies to AS-External-LSAs and NSSA-LSAs."; } description "External-LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the External-LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the external or NSSA prefix."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } } description "Topology flags."; } leaf metric { type ospf-metric; description "Metric for the topology."; } leaf forwarding-address { type inet:ipv4-address; description "IPv4 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag for the topology."; } } // list topology } // container topologies } // container external container opaque { when "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque-LSAs."; } description "Opaque-LSA."; container ri-opaque { description "OSPF Router-Information-Opaque-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container ri-opaque container te-opaque { description "OSPFv2 TE Opaque-LSA."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; container router-address-tlv { description "Router address TLV."; leaf router-address { type inet:ipv4-address; description "Router address."; } } // container router-address-tlv container link-tlv { description "Describes a single link. It is constructed from a set of sub-TLVs."; leaf link-type { type router-link-type; mandatory true; description "Link type."; } leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } mandatory true; description "Link ID."; } container local-if-ipv4-addrs { description "All local interface IPv4 addresses."; leaf-list local-if-ipv4-addr { type inet:ipv4-address; description "List of local interface IPv4 addresses."; } } // container local-if-ipv4-addrs container remote-if-ipv4-addrs { description "All remote interface IPv4 addresses."; leaf-list remote-if-ipv4-addr { type inet:ipv4-address; description "List of remote interface IPv4 addresses."; } } // container remote-if-ipv4-addrs leaf te-metric { type uint32; description "TE metric."; } leaf max-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum bandwidth."; } leaf max-reservable-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum reservable bandwidth."; } container unreserved-bandwidths { description "All unreserved bandwidths."; list unreserved-bandwidth { description "List of unreserved bandwidths for different priorities."; leaf priority { type uint8 { range "0 .. 7"; } description "Priority from 0 to 7."; } leaf unreserved-bandwidth { type rt-types:bandwidth-ieee-float32; description "Unreserved bandwidth."; } } // list unreserved-bandwidth } // container unreserved-bandwidths leaf admin-group { type uint32; description "Administrative Group / Resource Class/Color."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container link-tlv } // container te-opaque container extended-prefix-opaque { description "All Extended Prefix TLVs in the LSA."; list extended-prefix-tlv { description "Extended Prefix TLV."; leaf route-type { type enumeration { enum "unspecified" { value 0; description "Unspecified."; } enum "intra-area" { value 1; description "OSPF intra-area route."; } enum "inter-area" { value 3; description "OSPF inter-area route."; } enum "external" { value 5; description "OSPF external route."; } enum "nssa" { value 7; description "OSPF NSSA external route."; } } description "Route type."; } container flags { description "Prefix flags."; leaf-list extended-prefix-flags { type identityref { base ospfv2-extended-prefix-flag; } description "List of Extended Prefix TLV flags. This list will contain identities for the prefix flags; these identities are set in the extended prefix flags."; } } // container flags leaf prefix { type inet:ip-prefix; description "Address prefix."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // list extended-prefix-tlv } // container extended-prefix-opaque container extended-link-opaque { description "All Extended Link TLVs in the LSA."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; container extended-link-tlv { description "Extended Link TLV."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container extended-link-tlv } // container extended-link-opaque } // container opaque } // container body } // container ospfv2 container ospfv3 { description "OSPFv3 LSA."; container header { description "Decoded OSPFv3 LSA header data."; leaf lsa-id { type uint32; mandatory true; description "OSPFv3 LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPF LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container links { description "All router links."; list link { description "Router-LSA link."; leaf interface-id { type uint32; description "Interface ID for the link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for the link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for the link."; } leaf type { type router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Reserved for OSPFv3 Links 4 - Virtual Link."; } leaf metric { type uint16; description "Link metric."; } } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container attached-routers { description "All attached routers."; leaf-list attached-router { type rt-types:router-id; description "List of the routers attached to the network."; } } // container attached-routers } // container network container inter-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix-LSAs."; } description "Prefix-LSA."; leaf metric { type ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // container inter-area-prefix container inter-area-router { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router-LSAs."; } description "Inter-Area-Router-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf-metric; description "Autonomous System Boundary Router (ASBR) metric."; } leaf destination-router-id { type rt-types:router-id; description "The Router ID of the ASBR described by the LSA."; } } // container inter-area-router container as-external { when "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" { description "Only applies to AS-External-LSAs."; } description "AS-External-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container as-external container nssa { when "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" { description "Only applies to NSSA-LSAs."; } description "NSSA-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container nssa container link { when "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" { description "Only applies to Link-LSAs."; } description "Link-LSA."; leaf rtr-priority { type uint8; description "Router priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf link-local-interface-address { type inet:ipv6-address; description "The originating router's link-local interface address for the link."; } leaf num-of-prefixes { type uint32; description "Number of prefixes."; } container prefixes { description "All prefixes for the link."; list prefix { description "List of prefixes associated with the link."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // list prefix } // container prefixes } // container link container intra-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix-LSAs."; } description "Intra-Area-Prefix-LSA."; leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced LS Type."; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced Advertising Router."; reference "RFC 5340: OSPF for IPv6"; } leaf num-of-prefixes { type uint16; description "Number of prefixes."; } container prefixes { description "All prefixes in this LSA."; list prefix { description "List of prefixes in this LSA."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf metric { type uint16; description "Prefix metric."; } } // list prefix } // container prefixes } // container intra-area-prefix container router-information { when "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" { description "Only applies to Router-Information-LSAs (RFC 7770)."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; } description "Router-Information-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv } // container router-information container e-as-external { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-as-external-lsa'" { description "Only applies to E-AS-External-LSAs."; } description "E-AS-External-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.5"; list e-external-tlvs { description "E-AS-External-LSA TLVs."; container unknown-tlv { description "Unknown E-External TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container external-prefix-tlv { description "External-Prefix TLV."; container flags { description "External prefix flags."; leaf-list ospfv3-e-external-prefix-bits { type identityref { base ospfv3-e-external-prefix-option; } description "OSPFv3 External-Prefix TLV bits list."; } } // container flags leaf metric { type ospf:ospf-metric; description "External prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.1"; leaf-list prefix-options { type identityref { base ospfv3-e-prefix-option; } description "OSPFv3 prefix options flag list. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options list sub-tlvs { description "External-Prefix TLV sub-TLVs."; container ipv6-fwd-addr-sub-tlv { description "IPv6-Forwarding-Address sub-TLV for E-AS-External-LSAs and E-NSSA-LSAs for the IPv6 address family."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.10"; leaf forwarding-address { type inet:ipv6-address; description "IPv6 forwarding address."; } } // container ipv6-fwd-addr-sub-tlv container ipv4-fwd-addr-sub-tlv { description "IPv4-Forwarding-Address sub-TLV for E-AS-External-LSAs and E-NSSA-LSAs for the IPv4 address family."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.11"; leaf forwarding-address { type inet:ipv4-address; description "IPv4 forwarding address."; } } // container ipv4-fwd-addr-sub-tlv container route-tag-sub-tlv { description "Route-Tag sub-TLV."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.12"; leaf route-tag { type uint32; description "Route tag."; } } // container route-tag-sub-tlv container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container external-prefix-tlv } // list e-external-tlvs } // container e-as-external } // container body } // container ospfv3 } // choice version } // list as-scope-lsa } // container as-scope-lsas } // list as-scope-lsa-type } // container database container spf-log { config false; description "This container lists the SPF log entries."; list event { key "id"; description "List of SPF log entries represented as a wrapping buffer in chronological order, with the oldest entry returned first."; leaf id { type uint32; description "Event identifier. A purely internal value."; } leaf spf-type { type enumeration { enum "full" { value 0; description "The SPF computation was for a full SPF."; } enum "intra" { value 1; description "The SPF computation was only for intra-area routes."; } enum "inter" { value 2; description "The SPF computation was only for inter-area summary routes."; } enum "external" { value 3; description "The SPF computation was only for AS external and NSSA routes."; } } description "The SPF computation type for the SPF log entry."; } leaf schedule-timestamp { type yang:timestamp; description "This is the timestamp when the computation was scheduled."; } leaf start-timestamp { type yang:timestamp; description "This is the timestamp when the computation was started."; } leaf end-timestamp { type yang:timestamp; description "This is the timestamp when the computation was completed."; } list trigger-lsa { description "The list of LSAs that triggered the computation."; leaf area-id { type area-id-type; description "Area ID."; } leaf type { type uint16; description "LSA type."; } leaf lsa-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "LSA advertising router."; } leaf seq-num { type uint32; description "LSA sequence number."; } } // list trigger-lsa } // list event } // container spf-log container lsa-log { config false; description "This container lists the LSA log entries. Local LSA modifications are also included in the list."; list event { key "id"; description "List of LSA log entries represented as a wrapping buffer in chronological order, with the oldest entry returned first."; leaf id { type uint32; description "Event identifier. A purely internal value."; } container lsa { description "This container describes the LSA that was logged."; leaf area-id { type area-id-type; description "Area ID."; } leaf type { type uint16; description "LSA type."; } leaf lsa-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "LSA advertising router."; } leaf seq-num { type uint32; description "LSA sequence number."; } } // container lsa leaf received-timestamp { type yang:timestamp; description "This is the timestamp when the LSA was received. In the case of a local LSA update, the timestamp refers to the LSA origination time."; } leaf reason { type identityref { base lsa-log-reason; } description "Reason for the LSA log entry."; } } // list event } // container lsa-log container areas { description "All OSPF areas."; list area { key "area-id"; description "List of OSPF areas."; leaf area-id { type area-id-type; description "Area ID."; } leaf area-type { type identityref { base area-type; } default "normal-area"; description "Area type."; } leaf summary { when "derived-from(../area-type,'stub-nssa-area')" { description "Summary advertisement into the stub area or NSSA."; } type boolean; description "Enables/disables summary advertisement into the stub area or NSSA."; } leaf default-cost { when "derived-from(../area-type,'stub-nssa-area')" { description "Cost for the LSA default route advertised into the stub area or NSSA."; } type ospf-metric; description "Sets the summary default route cost for a stub area or NSSA."; } container ranges { description "Container for summary ranges."; list range { key "prefix"; description "Summarizes routes matching the address/mask. Applicable to Area Border Routers (ABRs) only."; leaf prefix { type inet:ip-prefix; description "IPv4 or IPv6 prefix."; } leaf advertise { type boolean; description "Advertise or hide."; } leaf cost { type ospf-metric; description "Advertised cost of a summary route."; } } // list range } // container ranges container statistics { config false; description "Per-area statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF area's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF area was last reinitialized, then this node contains the time the OSPF area was reinitialized, which normally occurs when it was created."; } leaf spf-runs-count { type yang:counter32; description "The number of times the intra-area SPF has run. Discontinuities in the value of this counter can occur when the OSPF area is reinitialized."; } leaf abr-count { type yang:gauge32; description "The total number of Area Border Routers (ABRs) reachable within this area."; } leaf asbr-count { type yang:gauge32; description "The total number of AS Boundary Routers (ASBRs) reachable within this area."; } leaf ar-nssa-translator-event-count { type yang:counter32; description "The number of NSSA translator-state changes. Discontinuities in the value of this counter can occur when the OSPF area is reinitialized."; } leaf area-scope-lsa-count { type yang:gauge32; description "The number of area-scope LSAs in the area."; } leaf area-scope-lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for area-scope LSAs. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } container database { description "Container for area-scope LSA type statistics."; list area-scope-lsa-type { description "List of area-scope LSA statistics."; leaf lsa-type { type uint16; description "Area-scope LSA type."; } leaf lsa-count { type yang:gauge32; description "The number of LSAs of this LSA type."; } leaf lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for LSAs of this type. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } } // list area-scope-lsa-type } // container database } // container statistics container database { config false; description "Area-scope LSDB."; list area-scope-lsa-type { key "lsa-type"; description "List of OSPF area-scope LSAs."; leaf lsa-type { type uint16; description "OSPF area-scope LSA type."; } container area-scope-lsas { description "All area-scope LSAs."; list area-scope-lsa { key "lsa-id adv-router"; description "List of OSPF area-scope LSAs."; leaf lsa-id { type union { type yang:dotted-quad; type uint32; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "Advertising router."; } leaf decode-completed { type boolean; description "The OSPF LSA body was successfully decoded, except for unknown TLVs. Unknown LSA types and OSPFv2 unknown Opaque-LSA types are not decoded. Additionally, malformed LSAs are generally not accepted and will not be in the Link State Database (LSDB)."; } leaf raw-data { type yang:hex-string; description "The hexadecimal representation of the complete LSA as received or originated, in network byte order."; } choice version { description "OSPFv2 or OSPFv3 LSA body."; container ospfv2 { description "OSPFv2 LSA."; container header { must "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" { description "The opaque-type and the opaque-id only apply to Opaque-LSAs."; } description "Decoded OSPFv2 LSA header data."; container lsa-options { description "LSA Options."; leaf-list lsa-options { type identityref { base ospfv2-lsa-option; } description "List of LSA Options. This list will contain the identities for the OSPFv2 LSA Options that are set."; } } // container lsa-options leaf lsa-id { type yang:dotted-quad; mandatory true; description "Link State ID."; } leaf opaque-type { type uint8; description "Opaque-LSA type."; } leaf opaque-id { type opaque-id; description "Opaque-LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPFv2 LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits leaf num-of-links { type uint16; description "Number of links in the Router-LSA."; } container links { description "All router links."; list link { description "Router-LSA link."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container topologies { description "All topologies for the link."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled on the link."; } leaf metric { type uint16; description "Metric for the topology."; } } // list topology } // container topologies } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; leaf network-mask { type yang:dotted-quad; description "The IP address mask for the network."; } container attached-routers { description "All attached routers."; leaf-list attached-router { type inet:ipv4-address; description "List of the routers attached to the network."; } } // container attached-routers } // container network container summary { when "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" { description "Only applies to summary LSAs."; } description "Summary LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the summary LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the summary."; } leaf metric { type ospf-metric; description "Metric for the topology."; } } // list topology } // container topologies } // container summary container external { when "derived-from(../../header/type, 'ospfv2-external-lsa-type')" { description "Only applies to AS-External-LSAs and NSSA-LSAs."; } description "External-LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the External-LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the external or NSSA prefix."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } } description "Topology flags."; } leaf metric { type ospf-metric; description "Metric for the topology."; } leaf forwarding-address { type inet:ipv4-address; description "IPv4 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag for the topology."; } } // list topology } // container topologies } // container external container opaque { when "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque-LSAs."; } description "Opaque-LSA."; container ri-opaque { description "OSPF Router-Information-Opaque-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container ri-opaque container te-opaque { description "OSPFv2 TE Opaque-LSA."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; container router-address-tlv { description "Router address TLV."; leaf router-address { type inet:ipv4-address; description "Router address."; } } // container router-address-tlv container link-tlv { description "Describes a single link. It is constructed from a set of sub-TLVs."; leaf link-type { type router-link-type; mandatory true; description "Link type."; } leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } mandatory true; description "Link ID."; } container local-if-ipv4-addrs { description "All local interface IPv4 addresses."; leaf-list local-if-ipv4-addr { type inet:ipv4-address; description "List of local interface IPv4 addresses."; } } // container local-if-ipv4-addrs container remote-if-ipv4-addrs { description "All remote interface IPv4 addresses."; leaf-list remote-if-ipv4-addr { type inet:ipv4-address; description "List of remote interface IPv4 addresses."; } } // container remote-if-ipv4-addrs leaf te-metric { type uint32; description "TE metric."; } leaf max-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum bandwidth."; } leaf max-reservable-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum reservable bandwidth."; } container unreserved-bandwidths { description "All unreserved bandwidths."; list unreserved-bandwidth { description "List of unreserved bandwidths for different priorities."; leaf priority { type uint8 { range "0 .. 7"; } description "Priority from 0 to 7."; } leaf unreserved-bandwidth { type rt-types:bandwidth-ieee-float32; description "Unreserved bandwidth."; } } // list unreserved-bandwidth } // container unreserved-bandwidths leaf admin-group { type uint32; description "Administrative Group / Resource Class/Color."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container link-tlv } // container te-opaque container extended-prefix-opaque { description "All Extended Prefix TLVs in the LSA."; list extended-prefix-tlv { description "Extended Prefix TLV."; leaf route-type { type enumeration { enum "unspecified" { value 0; description "Unspecified."; } enum "intra-area" { value 1; description "OSPF intra-area route."; } enum "inter-area" { value 3; description "OSPF inter-area route."; } enum "external" { value 5; description "OSPF external route."; } enum "nssa" { value 7; description "OSPF NSSA external route."; } } description "Route type."; } container flags { description "Prefix flags."; leaf-list extended-prefix-flags { type identityref { base ospfv2-extended-prefix-flag; } description "List of Extended Prefix TLV flags. This list will contain identities for the prefix flags; these identities are set in the extended prefix flags."; } } // container flags leaf prefix { type inet:ip-prefix; description "Address prefix."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // list extended-prefix-tlv } // container extended-prefix-opaque container extended-link-opaque { description "All Extended Link TLVs in the LSA."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; container extended-link-tlv { description "Extended Link TLV."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container extended-link-tlv } // container extended-link-opaque } // container opaque } // container body } // container ospfv2 container ospfv3 { description "OSPFv3 LSA."; container header { description "Decoded OSPFv3 LSA header data."; leaf lsa-id { type uint32; mandatory true; description "OSPFv3 LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPF LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container links { description "All router links."; list link { description "Router-LSA link."; leaf interface-id { type uint32; description "Interface ID for the link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for the link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for the link."; } leaf type { type router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Reserved for OSPFv3 Links 4 - Virtual Link."; } leaf metric { type uint16; description "Link metric."; } } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container attached-routers { description "All attached routers."; leaf-list attached-router { type rt-types:router-id; description "List of the routers attached to the network."; } } // container attached-routers } // container network container inter-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix-LSAs."; } description "Prefix-LSA."; leaf metric { type ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // container inter-area-prefix container inter-area-router { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router-LSAs."; } description "Inter-Area-Router-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf-metric; description "Autonomous System Boundary Router (ASBR) metric."; } leaf destination-router-id { type rt-types:router-id; description "The Router ID of the ASBR described by the LSA."; } } // container inter-area-router container as-external { when "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" { description "Only applies to AS-External-LSAs."; } description "AS-External-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container as-external container nssa { when "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" { description "Only applies to NSSA-LSAs."; } description "NSSA-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container nssa container link { when "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" { description "Only applies to Link-LSAs."; } description "Link-LSA."; leaf rtr-priority { type uint8; description "Router priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf link-local-interface-address { type inet:ipv6-address; description "The originating router's link-local interface address for the link."; } leaf num-of-prefixes { type uint32; description "Number of prefixes."; } container prefixes { description "All prefixes for the link."; list prefix { description "List of prefixes associated with the link."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // list prefix } // container prefixes } // container link container intra-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix-LSAs."; } description "Intra-Area-Prefix-LSA."; leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced LS Type."; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced Advertising Router."; reference "RFC 5340: OSPF for IPv6"; } leaf num-of-prefixes { type uint16; description "Number of prefixes."; } container prefixes { description "All prefixes in this LSA."; list prefix { description "List of prefixes in this LSA."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf metric { type uint16; description "Prefix metric."; } } // list prefix } // container prefixes } // container intra-area-prefix container router-information { when "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" { description "Only applies to Router-Information-LSAs (RFC 7770)."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; } description "Router-Information-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv } // container router-information container e-router { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-router-lsa'" { description "Only valid for OSPFv3 E-Router-LSAs."; } description "OSPFv3 E-Router-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.1"; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options list e-router-tlvs { description "E-Router-LSA TLVs."; container unknown-tlv { description "Unknown E-Router TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container link-tlv { description "E-Router-LSA TLV."; leaf interface-id { type uint32; description "Interface ID for link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for link."; } leaf type { type ospf:router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Stub Network Link 4 - Virtual Link."; } leaf metric { type ospf:ospf-link-metric; description "Link metric."; } list sub-tlvs { description "Link TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container link-tlv } // list e-router-tlvs } // container e-router container e-network { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-network-lsa'" { description "Only applies to E-Network-LSAs."; } description "E-Network-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.2"; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options list e-network-tlvs { description "E-Network-LSA TLVs."; container unknown-tlv { description "Unknown E-Network TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container attached-router-tlv { description "Attached-Routers TLV."; leaf-list adjacent-neighbor-router-id { type rt-types:router-id; description "Adjacent neighbor's Router ID."; } } // container attached-router-tlv } // list e-network-tlvs } // container e-network container e-nssa { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-nssa-lsa'" { description "Only applies to E-NSSA-LSAs."; } description "E-NSSA-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.6"; list e-external-tlvs { description "E-NSSA-LSA TLVs."; container unknown-tlv { description "Unknown E-External TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container external-prefix-tlv { description "External-Prefix TLV."; container flags { description "External prefix flags."; leaf-list ospfv3-e-external-prefix-bits { type identityref { base ospfv3-e-external-prefix-option; } description "OSPFv3 External-Prefix TLV bits list."; } } // container flags leaf metric { type ospf:ospf-metric; description "External prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.1"; leaf-list prefix-options { type identityref { base ospfv3-e-prefix-option; } description "OSPFv3 prefix options flag list. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options list sub-tlvs { description "External-Prefix TLV sub-TLVs."; container ipv6-fwd-addr-sub-tlv { description "IPv6-Forwarding-Address sub-TLV for E-AS-External-LSAs and E-NSSA-LSAs for the IPv6 address family."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.10"; leaf forwarding-address { type inet:ipv6-address; description "IPv6 forwarding address."; } } // container ipv6-fwd-addr-sub-tlv container ipv4-fwd-addr-sub-tlv { description "IPv4-Forwarding-Address sub-TLV for E-AS-External-LSAs and E-NSSA-LSAs for the IPv4 address family."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.11"; leaf forwarding-address { type inet:ipv4-address; description "IPv4 forwarding address."; } } // container ipv4-fwd-addr-sub-tlv container route-tag-sub-tlv { description "Route-Tag sub-TLV."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.12"; leaf route-tag { type uint32; description "Route tag."; } } // container route-tag-sub-tlv container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container external-prefix-tlv } // list e-external-tlvs } // container e-nssa container e-inter-area-prefix { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-inter-area-prefix-lsa'" { description "Only applies to E-Inter-Area-Prefix-LSAs."; } description "E-Inter-Area-Prefix-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.3"; list e-inter-prefix-tlvs { description "E-Inter-Area-Prefix-LSA TLVs."; container unknown-tlv { description "Unknown E-Inter-Area-Prefix TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container inter-prefix-tlv { description "Unknown E-Inter-Area-Prefix-LSA TLV."; leaf metric { type ospf:ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.1"; leaf-list prefix-options { type identityref { base ospfv3-e-prefix-option; } description "OSPFv3 prefix options flag list. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options list sub-tlvs { description "Inter-Area-Prefix TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container inter-prefix-tlv } // list e-inter-prefix-tlvs } // container e-inter-area-prefix container e-inter-area-router { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-inter-area-router-lsa'" { description "Only applies to E-Inter-Area-Router-LSAs."; } description "E-Inter-Area-Router-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.4"; list e-inter-router-tlvs { description "E-Inter-Area-Router-LSA TLVs."; container unknown-tlv { description "Unknown E-Inter-Area-Router TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container inter-router-tlv { description "Unknown E-Inter-Area-Router-LSA TLV."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf:ospf-metric; description "Inter-Area Router metric."; } leaf destination-router-id { type rt-types:router-id; description "Destination Router ID."; } list sub-tlvs { description "Inter-Area-Router TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container inter-router-tlv } // list e-inter-router-tlvs } // container e-inter-area-router container e-intra-area-prefix { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-intra-area-prefix-lsa'" { description "Only applies to E-Intra-Area-Prefix-LSAs."; } description "E-Intra-Area-Prefix-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.8"; leaf referenced-ls-type { type uint16; description "Referenced Link State type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced advertising router."; } list e-intra-prefix-tlvs { description "E-Intra-Area-Prefix-LSA TLVs."; container unknown-tlv { description "Unknown E-Intra-Area-Prefix TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container intra-prefix-tlv { description "Intra-Area-Prefix-LSA TLV."; leaf metric { type ospf:ospf-metric; description "Intra-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.1"; leaf-list prefix-options { type identityref { base ospfv3-e-prefix-option; } description "OSPFv3 prefix options flag list. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options list sub-tlvs { description "Intra-Area-Prefix TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container intra-prefix-tlv } // list e-intra-prefix-tlvs } // container e-intra-area-prefix } // container body } // container ospfv3 } // choice version } // list area-scope-lsa } // container area-scope-lsas } // list area-scope-lsa-type } // container database container virtual-links { when "derived-from-or-self(../area-type, 'normal-area') and ../area-id = '0.0.0.0'" { description "Virtual links must be in a backbone area."; } description "All virtual links."; list virtual-link { key "transit-area-id router-id"; description "OSPF virtual link."; leaf transit-area-id { type leafref { path "../../../../area/area-id"; } must "derived-from-or-self(../../../../area[area-id=current()]/area-type, 'normal-area') and ../../../../area[area-id=current()]/area-id != '0.0.0.0'" { error-message "The virtual link transit area must not be the backbone area."; description "The virtual link transit area must not be the backbone area (0.0.0.0)."; } description "Virtual link transit area ID."; } leaf router-id { type rt-types:router-id; description "Virtual link remote endpoint Router ID."; } leaf hello-interval { type uint16; units "seconds"; description "Interval between Hello packets (seconds). It must be the same for all routers on the same network. Different networks, implementations, and deployments will use different Hello intervals. A sample value for a LAN network would be 10 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf dead-interval { type uint16; units "seconds"; must "../dead-interval > ../hello-interval" { error-message "The dead interval must be larger than the Hello interval"; description "The value must be greater than 'hello-interval'."; } description "Interval after which a neighbor is declared down (seconds) if Hello packets are not received. It is typically 3 or 4 times the 'hello-interval' period. A typical value for LAN networks is 40 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf retransmit-interval { type uint16 { range "1..3600"; } units "seconds"; description "Interval between retransmitting unacknowledged Link State Advertisements (LSAs) (seconds). This should be well over the round-trip transmit delay for any two routers on the network. A sample value would be 5 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf transmit-delay { type uint16; units "seconds"; description "Estimated time needed to transmit Link State Update (LSU) packets on the interface (seconds). LSAs have their age incremented by this amount when advertised on the interface. A sample value would be 1 second."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf lls { if-feature lls; type boolean; description "Enables/disables link-local signaling (LLS) support."; } container ttl-security { if-feature ttl-security; description "Time to Live (TTL) security checking."; leaf enabled { type boolean; description "Enables/disables TTL security checking."; } leaf hops { type uint8 { range "1..254"; } default "1"; description "Maximum number of hops that an OSPF packet may have traversed before reception."; } } // container ttl-security leaf enabled { type boolean; default "true"; description "Enables/disables the OSPF protocol on the interface."; } container authentication { description "Authentication configuration."; choice auth-type-selection { description "Options for OSPFv2/OSPFv3 authentication configuration."; case ospfv2-auth { when "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" { description "Applied to OSPFv2 only."; } leaf ospfv2-auth-trailer-rfc { if-feature ospfv2-authentication-trailer; type ospfv2-auth-trailer-rfc-version; description "Version of OSPFv2 authentication trailer support. See RFCs 5709 and 7474."; reference "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication RFC 7474: Security Extension for OSPFv2 When Using Manual Key Management"; } choice ospfv2-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv2-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv2-key-id { type uint32; description "Key identifier."; } leaf ospfv2-key { type string; description "OSPFv2 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv2-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv2-auth-specification } // case ospfv2-auth case ospfv3-auth-ipsec { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-ipsec; leaf sa { type string; description "Name of the Security Association (SA)."; } } // case ospfv3-auth-ipsec case ospfv3-auth-trailer { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-trailer; choice ospfv3-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv3-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv3-sa-id { type uint16; description "Security Association (SA) Identifier."; } leaf ospfv3-key { type string; description "OSPFv3 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv3-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv3-auth-specification } // case ospfv3-auth-trailer } // choice auth-type-selection } // container authentication leaf cost { type ospf-link-metric; config false; description "Virtual link interface's cost."; } leaf state { type if-state-type; config false; description "Interface state."; } leaf hello-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the next Hello packet is sent on the interface."; } leaf wait-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the interface exits the 'Waiting' state."; } leaf dr-router-id { type rt-types:router-id; config false; description "DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "BDR IP address."; } container statistics { config false; description "Per-interface statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF interface's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF interface was last reinitialized, then this node contains the time the OSPF interface was reinitialized, which normally occurs when it was created."; } leaf if-event-count { type yang:counter32; description "The number of times this interface has changed its state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF interface is reinitialized."; } leaf link-scope-lsa-count { type yang:gauge32; description "The number of link-scope LSAs."; } leaf link-scope-lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for link-scope LSAs. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } container database { description "Container for link-scope LSA type statistics."; list link-scope-lsa-type { description "List of link-scope LSA statistics."; leaf lsa-type { type uint16; description "Link-scope LSA type."; } leaf lsa-count { type yang:gauge32; description "The number of LSAs of this LSA type."; } leaf lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for LSAs of this type. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } } // list link-scope-lsa-type } // container database } // container statistics container neighbors { config false; description "All neighbors for the interface."; list neighbor { key "neighbor-router-id"; description "List of interface OSPF neighbors."; leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID."; } leaf address { type inet:ip-address; config false; description "Neighbor's address."; } leaf dr-router-id { type rt-types:router-id; config false; description "Neighbor's DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "Neighbor's DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "Neighbor's BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "Neighbor's BDR IP address."; } leaf state { type nbr-state-type; config false; description "OSPF neighbor state."; } leaf cost { type ospf-link-metric; config false; description "Cost to reach the neighbor for point-to-multipoint and Hybrid networks."; } leaf dead-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the neighbor is declared dead."; } container statistics { config false; description "Per-neighbor statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF neighbor's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF neighbor was last reinitialized, then this node contains the time the OSPF neighbor was reinitialized, which normally occurs when the neighbor is dynamically discovered and created."; } leaf nbr-event-count { type yang:counter32; description "The number of times this neighbor has changed state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF neighbor is reinitialized."; } leaf nbr-retrans-qlen { type yang:gauge32; description "The current length of the retransmission queue."; } } // container statistics } // list neighbor } // container neighbors container database { config false; description "Link-scope LSDB."; list link-scope-lsa-type { key "lsa-type"; description "List of OSPF link-scope LSAs."; leaf lsa-type { type uint16; description "OSPF link-scope LSA type."; } container link-scope-lsas { description "All link-scope LSAs of this LSA type."; list link-scope-lsa { key "lsa-id adv-router"; description "List of OSPF link-scope LSAs."; leaf lsa-id { type union { type yang:dotted-quad; type uint32; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "Advertising router."; } leaf decode-completed { type boolean; description "The OSPF LSA body was successfully decoded, except for unknown TLVs. Unknown LSA types and OSPFv2 unknown Opaque-LSA types are not decoded. Additionally, malformed LSAs are generally not accepted and will not be in the Link State Database (LSDB)."; } leaf raw-data { type yang:hex-string; description "The hexadecimal representation of the complete LSA as received or originated, in network byte order."; } choice version { description "OSPFv2 or OSPFv3 LSA body."; container ospfv2 { description "OSPFv2 LSA."; container header { must "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" { description "The opaque-type and the opaque-id only apply to Opaque-LSAs."; } description "Decoded OSPFv2 LSA header data."; container lsa-options { description "LSA Options."; leaf-list lsa-options { type identityref { base ospfv2-lsa-option; } description "List of LSA Options. This list will contain the identities for the OSPFv2 LSA Options that are set."; } } // container lsa-options leaf lsa-id { type yang:dotted-quad; mandatory true; description "Link State ID."; } leaf opaque-type { type uint8; description "Opaque-LSA type."; } leaf opaque-id { type opaque-id; description "Opaque-LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPFv2 LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits leaf num-of-links { type uint16; description "Number of links in the Router-LSA."; } container links { description "All router links."; list link { description "Router-LSA link."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container topologies { description "All topologies for the link."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled on the link."; } leaf metric { type uint16; description "Metric for the topology."; } } // list topology } // container topologies } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; leaf network-mask { type yang:dotted-quad; description "The IP address mask for the network."; } container attached-routers { description "All attached routers."; leaf-list attached-router { type inet:ipv4-address; description "List of the routers attached to the network."; } } // container attached-routers } // container network container summary { when "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" { description "Only applies to summary LSAs."; } description "Summary LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the summary LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the summary."; } leaf metric { type ospf-metric; description "Metric for the topology."; } } // list topology } // container topologies } // container summary container external { when "derived-from(../../header/type, 'ospfv2-external-lsa-type')" { description "Only applies to AS-External-LSAs and NSSA-LSAs."; } description "External-LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the External-LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the external or NSSA prefix."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } } description "Topology flags."; } leaf metric { type ospf-metric; description "Metric for the topology."; } leaf forwarding-address { type inet:ipv4-address; description "IPv4 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag for the topology."; } } // list topology } // container topologies } // container external container opaque { when "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque-LSAs."; } description "Opaque-LSA."; container ri-opaque { description "OSPF Router-Information-Opaque-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container ri-opaque container te-opaque { description "OSPFv2 TE Opaque-LSA."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; container router-address-tlv { description "Router address TLV."; leaf router-address { type inet:ipv4-address; description "Router address."; } } // container router-address-tlv container link-tlv { description "Describes a single link. It is constructed from a set of sub-TLVs."; leaf link-type { type router-link-type; mandatory true; description "Link type."; } leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } mandatory true; description "Link ID."; } container local-if-ipv4-addrs { description "All local interface IPv4 addresses."; leaf-list local-if-ipv4-addr { type inet:ipv4-address; description "List of local interface IPv4 addresses."; } } // container local-if-ipv4-addrs container remote-if-ipv4-addrs { description "All remote interface IPv4 addresses."; leaf-list remote-if-ipv4-addr { type inet:ipv4-address; description "List of remote interface IPv4 addresses."; } } // container remote-if-ipv4-addrs leaf te-metric { type uint32; description "TE metric."; } leaf max-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum bandwidth."; } leaf max-reservable-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum reservable bandwidth."; } container unreserved-bandwidths { description "All unreserved bandwidths."; list unreserved-bandwidth { description "List of unreserved bandwidths for different priorities."; leaf priority { type uint8 { range "0 .. 7"; } description "Priority from 0 to 7."; } leaf unreserved-bandwidth { type rt-types:bandwidth-ieee-float32; description "Unreserved bandwidth."; } } // list unreserved-bandwidth } // container unreserved-bandwidths leaf admin-group { type uint32; description "Administrative Group / Resource Class/Color."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container link-tlv } // container te-opaque container extended-prefix-opaque { description "All Extended Prefix TLVs in the LSA."; list extended-prefix-tlv { description "Extended Prefix TLV."; leaf route-type { type enumeration { enum "unspecified" { value 0; description "Unspecified."; } enum "intra-area" { value 1; description "OSPF intra-area route."; } enum "inter-area" { value 3; description "OSPF inter-area route."; } enum "external" { value 5; description "OSPF external route."; } enum "nssa" { value 7; description "OSPF NSSA external route."; } } description "Route type."; } container flags { description "Prefix flags."; leaf-list extended-prefix-flags { type identityref { base ospfv2-extended-prefix-flag; } description "List of Extended Prefix TLV flags. This list will contain identities for the prefix flags; these identities are set in the extended prefix flags."; } } // container flags leaf prefix { type inet:ip-prefix; description "Address prefix."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // list extended-prefix-tlv } // container extended-prefix-opaque container extended-link-opaque { description "All Extended Link TLVs in the LSA."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; container extended-link-tlv { description "Extended Link TLV."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container extended-link-tlv } // container extended-link-opaque } // container opaque } // container body } // container ospfv2 container ospfv3 { description "OSPFv3 LSA."; container header { description "Decoded OSPFv3 LSA header data."; leaf lsa-id { type uint32; mandatory true; description "OSPFv3 LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPF LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container links { description "All router links."; list link { description "Router-LSA link."; leaf interface-id { type uint32; description "Interface ID for the link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for the link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for the link."; } leaf type { type router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Reserved for OSPFv3 Links 4 - Virtual Link."; } leaf metric { type uint16; description "Link metric."; } } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container attached-routers { description "All attached routers."; leaf-list attached-router { type rt-types:router-id; description "List of the routers attached to the network."; } } // container attached-routers } // container network container inter-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix-LSAs."; } description "Prefix-LSA."; leaf metric { type ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // container inter-area-prefix container inter-area-router { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router-LSAs."; } description "Inter-Area-Router-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf-metric; description "Autonomous System Boundary Router (ASBR) metric."; } leaf destination-router-id { type rt-types:router-id; description "The Router ID of the ASBR described by the LSA."; } } // container inter-area-router container as-external { when "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" { description "Only applies to AS-External-LSAs."; } description "AS-External-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container as-external container nssa { when "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" { description "Only applies to NSSA-LSAs."; } description "NSSA-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container nssa container link { when "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" { description "Only applies to Link-LSAs."; } description "Link-LSA."; leaf rtr-priority { type uint8; description "Router priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf link-local-interface-address { type inet:ipv6-address; description "The originating router's link-local interface address for the link."; } leaf num-of-prefixes { type uint32; description "Number of prefixes."; } container prefixes { description "All prefixes for the link."; list prefix { description "List of prefixes associated with the link."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // list prefix } // container prefixes } // container link container intra-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix-LSAs."; } description "Intra-Area-Prefix-LSA."; leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced LS Type."; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced Advertising Router."; reference "RFC 5340: OSPF for IPv6"; } leaf num-of-prefixes { type uint16; description "Number of prefixes."; } container prefixes { description "All prefixes in this LSA."; list prefix { description "List of prefixes in this LSA."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf metric { type uint16; description "Prefix metric."; } } // list prefix } // container prefixes } // container intra-area-prefix container router-information { when "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" { description "Only applies to Router-Information-LSAs (RFC 7770)."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; } description "Router-Information-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv } // container router-information } // container body } // container ospfv3 } // choice version } // list link-scope-lsa } // container link-scope-lsas } // list link-scope-lsa-type } // container database } // list virtual-link } // container virtual-links container sham-links { if-feature pe-ce-protocol; description "All sham links."; list sham-link { key "local-id remote-id"; description "OSPF sham link."; leaf local-id { type inet:ip-address; description "Address of the local sham link endpoint."; } leaf remote-id { type inet:ip-address; description "Address of the remote sham link endpoint."; } leaf hello-interval { type uint16; units "seconds"; description "Interval between Hello packets (seconds). It must be the same for all routers on the same network. Different networks, implementations, and deployments will use different Hello intervals. A sample value for a LAN network would be 10 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf dead-interval { type uint16; units "seconds"; must "../dead-interval > ../hello-interval" { error-message "The dead interval must be larger than the Hello interval"; description "The value must be greater than 'hello-interval'."; } description "Interval after which a neighbor is declared down (seconds) if Hello packets are not received. It is typically 3 or 4 times the 'hello-interval' period. A typical value for LAN networks is 40 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf retransmit-interval { type uint16 { range "1..3600"; } units "seconds"; description "Interval between retransmitting unacknowledged Link State Advertisements (LSAs) (seconds). This should be well over the round-trip transmit delay for any two routers on the network. A sample value would be 5 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf transmit-delay { type uint16; units "seconds"; description "Estimated time needed to transmit Link State Update (LSU) packets on the interface (seconds). LSAs have their age incremented by this amount when advertised on the interface. A sample value would be 1 second."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf lls { if-feature lls; type boolean; description "Enables/disables link-local signaling (LLS) support."; } container ttl-security { if-feature ttl-security; description "Time to Live (TTL) security checking."; leaf enabled { type boolean; description "Enables/disables TTL security checking."; } leaf hops { type uint8 { range "1..254"; } default "1"; description "Maximum number of hops that an OSPF packet may have traversed before reception."; } } // container ttl-security leaf enabled { type boolean; default "true"; description "Enables/disables the OSPF protocol on the interface."; } container authentication { description "Authentication configuration."; choice auth-type-selection { description "Options for OSPFv2/OSPFv3 authentication configuration."; case ospfv2-auth { when "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" { description "Applied to OSPFv2 only."; } leaf ospfv2-auth-trailer-rfc { if-feature ospfv2-authentication-trailer; type ospfv2-auth-trailer-rfc-version; description "Version of OSPFv2 authentication trailer support. See RFCs 5709 and 7474."; reference "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication RFC 7474: Security Extension for OSPFv2 When Using Manual Key Management"; } choice ospfv2-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv2-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv2-key-id { type uint32; description "Key identifier."; } leaf ospfv2-key { type string; description "OSPFv2 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv2-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv2-auth-specification } // case ospfv2-auth case ospfv3-auth-ipsec { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-ipsec; leaf sa { type string; description "Name of the Security Association (SA)."; } } // case ospfv3-auth-ipsec case ospfv3-auth-trailer { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-trailer; choice ospfv3-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv3-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv3-sa-id { type uint16; description "Security Association (SA) Identifier."; } leaf ospfv3-key { type string; description "OSPFv3 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv3-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv3-auth-specification } // case ospfv3-auth-trailer } // choice auth-type-selection } // container authentication leaf cost { type ospf-link-metric; description "Interface's cost."; } leaf mtu-ignore { if-feature mtu-ignore; type boolean; description "Enables/disables bypassing the MTU mismatch check in Database Description packets as specified in Section 10.6 of RFC 2328."; reference "RFC 2328: OSPF Version 2, Section 10.6"; } leaf prefix-suppression { if-feature prefix-suppression; type boolean; description "Suppresses advertisement of the prefixes associated with the interface."; } leaf state { type if-state-type; config false; description "Interface state."; } leaf hello-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the next Hello packet is sent on the interface."; } leaf wait-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the interface exits the 'Waiting' state."; } leaf dr-router-id { type rt-types:router-id; config false; description "DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "BDR IP address."; } container statistics { config false; description "Per-interface statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF interface's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF interface was last reinitialized, then this node contains the time the OSPF interface was reinitialized, which normally occurs when it was created."; } leaf if-event-count { type yang:counter32; description "The number of times this interface has changed its state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF interface is reinitialized."; } leaf link-scope-lsa-count { type yang:gauge32; description "The number of link-scope LSAs."; } leaf link-scope-lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for link-scope LSAs. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } container database { description "Container for link-scope LSA type statistics."; list link-scope-lsa-type { description "List of link-scope LSA statistics."; leaf lsa-type { type uint16; description "Link-scope LSA type."; } leaf lsa-count { type yang:gauge32; description "The number of LSAs of this LSA type."; } leaf lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for LSAs of this type. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } } // list link-scope-lsa-type } // container database } // container statistics container neighbors { config false; description "All neighbors for the interface."; list neighbor { key "neighbor-router-id"; description "List of interface OSPF neighbors."; leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID."; } leaf address { type inet:ip-address; config false; description "Neighbor's address."; } leaf dr-router-id { type rt-types:router-id; config false; description "Neighbor's DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "Neighbor's DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "Neighbor's BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "Neighbor's BDR IP address."; } leaf state { type nbr-state-type; config false; description "OSPF neighbor state."; } leaf cost { type ospf-link-metric; config false; description "Cost to reach the neighbor for point-to-multipoint and Hybrid networks."; } leaf dead-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the neighbor is declared dead."; } container statistics { config false; description "Per-neighbor statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF neighbor's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF neighbor was last reinitialized, then this node contains the time the OSPF neighbor was reinitialized, which normally occurs when the neighbor is dynamically discovered and created."; } leaf nbr-event-count { type yang:counter32; description "The number of times this neighbor has changed state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF neighbor is reinitialized."; } leaf nbr-retrans-qlen { type yang:gauge32; description "The current length of the retransmission queue."; } } // container statistics } // list neighbor } // container neighbors container database { config false; description "Link-scope LSDB."; list link-scope-lsa-type { key "lsa-type"; description "List of OSPF link-scope LSAs."; leaf lsa-type { type uint16; description "OSPF link-scope LSA type."; } container link-scope-lsas { description "All link-scope LSAs of this LSA type."; list link-scope-lsa { key "lsa-id adv-router"; description "List of OSPF link-scope LSAs."; leaf lsa-id { type union { type yang:dotted-quad; type uint32; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "Advertising router."; } leaf decode-completed { type boolean; description "The OSPF LSA body was successfully decoded, except for unknown TLVs. Unknown LSA types and OSPFv2 unknown Opaque-LSA types are not decoded. Additionally, malformed LSAs are generally not accepted and will not be in the Link State Database (LSDB)."; } leaf raw-data { type yang:hex-string; description "The hexadecimal representation of the complete LSA as received or originated, in network byte order."; } choice version { description "OSPFv2 or OSPFv3 LSA body."; container ospfv2 { description "OSPFv2 LSA."; container header { must "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" { description "The opaque-type and the opaque-id only apply to Opaque-LSAs."; } description "Decoded OSPFv2 LSA header data."; container lsa-options { description "LSA Options."; leaf-list lsa-options { type identityref { base ospfv2-lsa-option; } description "List of LSA Options. This list will contain the identities for the OSPFv2 LSA Options that are set."; } } // container lsa-options leaf lsa-id { type yang:dotted-quad; mandatory true; description "Link State ID."; } leaf opaque-type { type uint8; description "Opaque-LSA type."; } leaf opaque-id { type opaque-id; description "Opaque-LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPFv2 LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits leaf num-of-links { type uint16; description "Number of links in the Router-LSA."; } container links { description "All router links."; list link { description "Router-LSA link."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container topologies { description "All topologies for the link."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled on the link."; } leaf metric { type uint16; description "Metric for the topology."; } } // list topology } // container topologies } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; leaf network-mask { type yang:dotted-quad; description "The IP address mask for the network."; } container attached-routers { description "All attached routers."; leaf-list attached-router { type inet:ipv4-address; description "List of the routers attached to the network."; } } // container attached-routers } // container network container summary { when "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" { description "Only applies to summary LSAs."; } description "Summary LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the summary LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the summary."; } leaf metric { type ospf-metric; description "Metric for the topology."; } } // list topology } // container topologies } // container summary container external { when "derived-from(../../header/type, 'ospfv2-external-lsa-type')" { description "Only applies to AS-External-LSAs and NSSA-LSAs."; } description "External-LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the External-LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the external or NSSA prefix."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } } description "Topology flags."; } leaf metric { type ospf-metric; description "Metric for the topology."; } leaf forwarding-address { type inet:ipv4-address; description "IPv4 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag for the topology."; } } // list topology } // container topologies } // container external container opaque { when "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque-LSAs."; } description "Opaque-LSA."; container ri-opaque { description "OSPF Router-Information-Opaque-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container ri-opaque container te-opaque { description "OSPFv2 TE Opaque-LSA."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; container router-address-tlv { description "Router address TLV."; leaf router-address { type inet:ipv4-address; description "Router address."; } } // container router-address-tlv container link-tlv { description "Describes a single link. It is constructed from a set of sub-TLVs."; leaf link-type { type router-link-type; mandatory true; description "Link type."; } leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } mandatory true; description "Link ID."; } container local-if-ipv4-addrs { description "All local interface IPv4 addresses."; leaf-list local-if-ipv4-addr { type inet:ipv4-address; description "List of local interface IPv4 addresses."; } } // container local-if-ipv4-addrs container remote-if-ipv4-addrs { description "All remote interface IPv4 addresses."; leaf-list remote-if-ipv4-addr { type inet:ipv4-address; description "List of remote interface IPv4 addresses."; } } // container remote-if-ipv4-addrs leaf te-metric { type uint32; description "TE metric."; } leaf max-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum bandwidth."; } leaf max-reservable-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum reservable bandwidth."; } container unreserved-bandwidths { description "All unreserved bandwidths."; list unreserved-bandwidth { description "List of unreserved bandwidths for different priorities."; leaf priority { type uint8 { range "0 .. 7"; } description "Priority from 0 to 7."; } leaf unreserved-bandwidth { type rt-types:bandwidth-ieee-float32; description "Unreserved bandwidth."; } } // list unreserved-bandwidth } // container unreserved-bandwidths leaf admin-group { type uint32; description "Administrative Group / Resource Class/Color."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container link-tlv } // container te-opaque container extended-prefix-opaque { description "All Extended Prefix TLVs in the LSA."; list extended-prefix-tlv { description "Extended Prefix TLV."; leaf route-type { type enumeration { enum "unspecified" { value 0; description "Unspecified."; } enum "intra-area" { value 1; description "OSPF intra-area route."; } enum "inter-area" { value 3; description "OSPF inter-area route."; } enum "external" { value 5; description "OSPF external route."; } enum "nssa" { value 7; description "OSPF NSSA external route."; } } description "Route type."; } container flags { description "Prefix flags."; leaf-list extended-prefix-flags { type identityref { base ospfv2-extended-prefix-flag; } description "List of Extended Prefix TLV flags. This list will contain identities for the prefix flags; these identities are set in the extended prefix flags."; } } // container flags leaf prefix { type inet:ip-prefix; description "Address prefix."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // list extended-prefix-tlv } // container extended-prefix-opaque container extended-link-opaque { description "All Extended Link TLVs in the LSA."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; container extended-link-tlv { description "Extended Link TLV."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container extended-link-tlv } // container extended-link-opaque } // container opaque } // container body } // container ospfv2 container ospfv3 { description "OSPFv3 LSA."; container header { description "Decoded OSPFv3 LSA header data."; leaf lsa-id { type uint32; mandatory true; description "OSPFv3 LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPF LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container links { description "All router links."; list link { description "Router-LSA link."; leaf interface-id { type uint32; description "Interface ID for the link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for the link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for the link."; } leaf type { type router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Reserved for OSPFv3 Links 4 - Virtual Link."; } leaf metric { type uint16; description "Link metric."; } } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container attached-routers { description "All attached routers."; leaf-list attached-router { type rt-types:router-id; description "List of the routers attached to the network."; } } // container attached-routers } // container network container inter-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix-LSAs."; } description "Prefix-LSA."; leaf metric { type ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // container inter-area-prefix container inter-area-router { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router-LSAs."; } description "Inter-Area-Router-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf-metric; description "Autonomous System Boundary Router (ASBR) metric."; } leaf destination-router-id { type rt-types:router-id; description "The Router ID of the ASBR described by the LSA."; } } // container inter-area-router container as-external { when "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" { description "Only applies to AS-External-LSAs."; } description "AS-External-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container as-external container nssa { when "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" { description "Only applies to NSSA-LSAs."; } description "NSSA-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container nssa container link { when "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" { description "Only applies to Link-LSAs."; } description "Link-LSA."; leaf rtr-priority { type uint8; description "Router priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf link-local-interface-address { type inet:ipv6-address; description "The originating router's link-local interface address for the link."; } leaf num-of-prefixes { type uint32; description "Number of prefixes."; } container prefixes { description "All prefixes for the link."; list prefix { description "List of prefixes associated with the link."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // list prefix } // container prefixes } // container link container intra-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix-LSAs."; } description "Intra-Area-Prefix-LSA."; leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced LS Type."; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced Advertising Router."; reference "RFC 5340: OSPF for IPv6"; } leaf num-of-prefixes { type uint16; description "Number of prefixes."; } container prefixes { description "All prefixes in this LSA."; list prefix { description "List of prefixes in this LSA."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf metric { type uint16; description "Prefix metric."; } } // list prefix } // container prefixes } // container intra-area-prefix container router-information { when "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" { description "Only applies to Router-Information-LSAs (RFC 7770)."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; } description "Router-Information-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv } // container router-information } // container body } // container ospfv3 } // choice version } // list link-scope-lsa } // container link-scope-lsas } // list link-scope-lsa-type } // container database } // list sham-link } // container sham-links container interfaces { description "All OSPF interfaces."; list interface { key "name"; description "List of OSPF interfaces."; leaf name { type if:interface-ref; description "Interface name reference."; } leaf interface-type { type enumeration { enum "broadcast" { value 0; description "Specifies an OSPF broadcast multi-access network."; } enum "non-broadcast" { value 1; description "Specifies an OSPF Non-Broadcast Multi-Access (NBMA) network."; } enum "point-to-multipoint" { value 2; description "Specifies an OSPF point-to-multipoint network."; } enum "point-to-point" { value 3; description "Specifies an OSPF point-to-point network."; } enum "hybrid" { value 4; description "Specifies an OSPF hybrid broadcast / point-to-multipoint network."; } } description "Interface type."; } leaf passive { type boolean; description "Enables/disables a passive interface. A passive interface's prefix will be advertised, but no neighbor adjacencies will be formed on the interface."; } leaf demand-circuit { if-feature demand-circuit; type boolean; description "Enables/disables a demand circuit."; } leaf priority { type uint8; description "Configures OSPF router priority. In a multi-access network, this value is for Designated Router (DR) election. The priority is ignored on other interface types. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or Backup DR (BDR)."; } container multi-areas { if-feature multi-area-adj; description "Container for multi-area configuration."; list multi-area { key "multi-area-id"; description "Configures an OSPF multi-area adjacency."; leaf multi-area-id { type area-id-type; description "Multi-area adjacency area ID."; } leaf cost { type ospf-link-metric; description "Interface cost for a multi-area adjacency."; } } // list multi-area } // container multi-areas container static-neighbors { description "Statically configured neighbors."; list neighbor { key "identifier"; description "Specifies a static OSPF neighbor."; leaf identifier { type inet:ip-address; description "Neighbor's Router ID, IPv4 address, or IPv6 address."; } leaf cost { type ospf-link-metric; description "Interface cost. Different implementations have different default costs, with some defaulting to a cost inversely proportional to the interface speed. Others will default to 1, equating the cost to a hop count."; } leaf poll-interval { type uint16; units "seconds"; description "Neighbor's poll interval (seconds) for sending OSPF Hello packets to discover the neighbor on NBMA networks. This interval dictates the granularity for discovery of new neighbors. A sample would be 120 seconds (2 minutes) for a legacy Packet Data Network (PDN) X.25 network."; reference "RFC 2328: OSPF Version 2, Appendix C.5"; } leaf priority { type uint8; description "Neighbor's priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } } // list neighbor } // container static-neighbors leaf node-flag { if-feature node-flag; type boolean; default "false"; description "Sets the prefix as identifying the advertising router."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; } container bfd { if-feature bfd; description "BFD interface configuration."; reference "RFC 5880: Bidirectional Forwarding Detection (BFD) RFC 5881: Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop) RFC 9314: YANG Data Model for Bidirectional Forwarding Detection (BFD)"; leaf enabled { type boolean; default "false"; description "Indicates whether BFD is enabled."; } leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type } // container bfd container fast-reroute { if-feature fast-reroute; description "Interface IP-FRR configuration."; container lfa { if-feature lfa; description "LFA configuration."; leaf candidate-enabled { type boolean; default "true"; description "Enables the interface to be used as a backup."; } leaf enabled { type boolean; default "false"; description "Activates an LFA. Per-prefix LFA computation is assumed."; } container remote-lfa { if-feature remote-lfa; description "R-LFA configuration."; leaf enabled { type boolean; default "false"; description "Activates a Remote LFA (R-LFA)."; } } // container remote-lfa } // container lfa } // container fast-reroute leaf hello-interval { type uint16; units "seconds"; description "Interval between Hello packets (seconds). It must be the same for all routers on the same network. Different networks, implementations, and deployments will use different Hello intervals. A sample value for a LAN network would be 10 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf dead-interval { type uint16; units "seconds"; must "../dead-interval > ../hello-interval" { error-message "The dead interval must be larger than the Hello interval"; description "The value must be greater than 'hello-interval'."; } description "Interval after which a neighbor is declared down (seconds) if Hello packets are not received. It is typically 3 or 4 times the 'hello-interval' period. A typical value for LAN networks is 40 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf retransmit-interval { type uint16 { range "1..3600"; } units "seconds"; description "Interval between retransmitting unacknowledged Link State Advertisements (LSAs) (seconds). This should be well over the round-trip transmit delay for any two routers on the network. A sample value would be 5 seconds."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf transmit-delay { type uint16; units "seconds"; description "Estimated time needed to transmit Link State Update (LSU) packets on the interface (seconds). LSAs have their age incremented by this amount when advertised on the interface. A sample value would be 1 second."; reference "RFC 2328: OSPF Version 2, Appendix C.3"; } leaf lls { if-feature lls; type boolean; description "Enables/disables link-local signaling (LLS) support."; } container ttl-security { if-feature ttl-security; description "Time to Live (TTL) security checking."; leaf enabled { type boolean; description "Enables/disables TTL security checking."; } leaf hops { type uint8 { range "1..254"; } default "1"; description "Maximum number of hops that an OSPF packet may have traversed before reception."; } } // container ttl-security leaf enabled { type boolean; default "true"; description "Enables/disables the OSPF protocol on the interface."; } container authentication { description "Authentication configuration."; choice auth-type-selection { description "Options for OSPFv2/OSPFv3 authentication configuration."; case ospfv2-auth { when "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" { description "Applied to OSPFv2 only."; } leaf ospfv2-auth-trailer-rfc { if-feature ospfv2-authentication-trailer; type ospfv2-auth-trailer-rfc-version; description "Version of OSPFv2 authentication trailer support. See RFCs 5709 and 7474."; reference "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication RFC 7474: Security Extension for OSPFv2 When Using Manual Key Management"; } choice ospfv2-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv2-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv2-key-id { type uint32; description "Key identifier."; } leaf ospfv2-key { type string; description "OSPFv2 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv2-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv2-auth-specification } // case ospfv2-auth case ospfv3-auth-ipsec { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-ipsec; leaf sa { type string; description "Name of the Security Association (SA)."; } } // case ospfv3-auth-ipsec case ospfv3-auth-trailer { when "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-trailer; choice ospfv3-auth-specification { description "Key chain or explicit key parameter specification."; case auth-key-chain { if-feature key-chain; leaf ospfv3-key-chain { type key-chain:key-chain-ref; description "Name of the key chain."; } } // case auth-key-chain case auth-key-explicit { leaf ospfv3-sa-id { type uint16; description "Security Association (SA) Identifier."; } leaf ospfv3-key { type string; description "OSPFv3 authentication key. The length of the key may be dependent on the cryptographic algorithm."; } leaf ospfv3-crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } description "Cryptographic algorithm associated with the key."; } } // case auth-key-explicit } // choice ospfv3-auth-specification } // case ospfv3-auth-trailer } // choice auth-type-selection } // container authentication leaf cost { type ospf-link-metric; description "Interface's cost."; } leaf mtu-ignore { if-feature mtu-ignore; type boolean; description "Enables/disables bypassing the MTU mismatch check in Database Description packets as specified in Section 10.6 of RFC 2328."; reference "RFC 2328: OSPF Version 2, Section 10.6"; } leaf prefix-suppression { if-feature prefix-suppression; type boolean; description "Suppresses advertisement of the prefixes associated with the interface."; } leaf state { type if-state-type; config false; description "Interface state."; } leaf hello-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the next Hello packet is sent on the interface."; } leaf wait-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the interface exits the 'Waiting' state."; } leaf dr-router-id { type rt-types:router-id; config false; description "DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "BDR IP address."; } container statistics { config false; description "Per-interface statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF interface's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF interface was last reinitialized, then this node contains the time the OSPF interface was reinitialized, which normally occurs when it was created."; } leaf if-event-count { type yang:counter32; description "The number of times this interface has changed its state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF interface is reinitialized."; } leaf link-scope-lsa-count { type yang:gauge32; description "The number of link-scope LSAs."; } leaf link-scope-lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for link-scope LSAs. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } container database { description "Container for link-scope LSA type statistics."; list link-scope-lsa-type { description "List of link-scope LSA statistics."; leaf lsa-type { type uint16; description "Link-scope LSA type."; } leaf lsa-count { type yang:gauge32; description "The number of LSAs of this LSA type."; } leaf lsa-cksum-sum { type uint32; description "The modulo 2^32 sum of the LSA checksums for LSAs of this type. The value should be treated as unsigned when comparing two sums of checksums. While differing checksums indicate a different combination of LSAs, equivalent checksums don't guarantee that the LSAs are the same, given that multiple combinations of LSAs can result in the same checksum."; } } // list link-scope-lsa-type } // container database } // container statistics container neighbors { config false; description "All neighbors for the interface."; list neighbor { key "neighbor-router-id"; description "List of interface OSPF neighbors."; leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID."; } leaf address { type inet:ip-address; config false; description "Neighbor's address."; } leaf dr-router-id { type rt-types:router-id; config false; description "Neighbor's DR Router ID."; } leaf dr-ip-addr { type inet:ip-address; config false; description "Neighbor's DR IP address."; } leaf bdr-router-id { type rt-types:router-id; config false; description "Neighbor's BDR Router ID."; } leaf bdr-ip-addr { type inet:ip-address; config false; description "Neighbor's BDR IP address."; } leaf state { type nbr-state-type; config false; description "OSPF neighbor state."; } leaf cost { type ospf-link-metric; config false; description "Cost to reach the neighbor for point-to-multipoint and Hybrid networks."; } leaf dead-timer { type rt-types:timer-value-seconds16; config false; description "This timer tracks the remaining time before the neighbor is declared dead."; } container statistics { config false; description "Per-neighbor statistics."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this OSPF neighbor's counters suffered a discontinuity. If no such discontinuities have occurred since the OSPF neighbor was last reinitialized, then this node contains the time the OSPF neighbor was reinitialized, which normally occurs when the neighbor is dynamically discovered and created."; } leaf nbr-event-count { type yang:counter32; description "The number of times this neighbor has changed state or an error has occurred. Discontinuities in the value of this counter can occur when the OSPF neighbor is reinitialized."; } leaf nbr-retrans-qlen { type yang:gauge32; description "The current length of the retransmission queue."; } } // container statistics } // list neighbor } // container neighbors container database { config false; description "Link-scope LSDB."; list link-scope-lsa-type { key "lsa-type"; description "List of OSPF link-scope LSAs."; leaf lsa-type { type uint16; description "OSPF link-scope LSA type."; } container link-scope-lsas { description "All link-scope LSAs of this LSA type."; list link-scope-lsa { key "lsa-id adv-router"; description "List of OSPF link-scope LSAs."; leaf lsa-id { type union { type yang:dotted-quad; type uint32; } description "Link State ID."; } leaf adv-router { type rt-types:router-id; description "Advertising router."; } leaf decode-completed { type boolean; description "The OSPF LSA body was successfully decoded, except for unknown TLVs. Unknown LSA types and OSPFv2 unknown Opaque-LSA types are not decoded. Additionally, malformed LSAs are generally not accepted and will not be in the Link State Database (LSDB)."; } leaf raw-data { type yang:hex-string; description "The hexadecimal representation of the complete LSA as received or originated, in network byte order."; } choice version { description "OSPFv2 or OSPFv3 LSA body."; container ospfv2 { description "OSPFv2 LSA."; container header { must "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" { description "The opaque-type and the opaque-id only apply to Opaque-LSAs."; } description "Decoded OSPFv2 LSA header data."; container lsa-options { description "LSA Options."; leaf-list lsa-options { type identityref { base ospfv2-lsa-option; } description "List of LSA Options. This list will contain the identities for the OSPFv2 LSA Options that are set."; } } // container lsa-options leaf lsa-id { type yang:dotted-quad; mandatory true; description "Link State ID."; } leaf opaque-type { type uint8; description "Opaque-LSA type."; } leaf opaque-id { type opaque-id; description "Opaque-LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPFv2 LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits leaf num-of-links { type uint16; description "Number of links in the Router-LSA."; } container links { description "All router links."; list link { description "Router-LSA link."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container topologies { description "All topologies for the link."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled on the link."; } leaf metric { type uint16; description "Metric for the topology."; } } // list topology } // container topologies } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; leaf network-mask { type yang:dotted-quad; description "The IP address mask for the network."; } container attached-routers { description "All attached routers."; leaf-list attached-router { type inet:ipv4-address; description "List of the routers attached to the network."; } } // container attached-routers } // container network container summary { when "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" { description "Only applies to summary LSAs."; } description "Summary LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the summary LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the summary."; } leaf metric { type ospf-metric; description "Metric for the topology."; } } // list topology } // container topologies } // container summary container external { when "derived-from(../../header/type, 'ospfv2-external-lsa-type')" { description "Only applies to AS-External-LSAs and NSSA-LSAs."; } description "External-LSA."; leaf network-mask { type inet:ipv4-address; description "The IP address mask for the network."; } container topologies { description "All topologies for the External-LSA."; list topology { description "Topology-specific information."; leaf mt-id { type uint8; description "The MT-ID for the topology enabled for the external or NSSA prefix."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } } description "Topology flags."; } leaf metric { type ospf-metric; description "Metric for the topology."; } leaf forwarding-address { type inet:ipv4-address; description "IPv4 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag for the topology."; } } // list topology } // container topologies } // container external container opaque { when "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque-LSAs."; } description "Opaque-LSA."; container ri-opaque { description "OSPF Router-Information-Opaque-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container ri-opaque container te-opaque { description "OSPFv2 TE Opaque-LSA."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; container router-address-tlv { description "Router address TLV."; leaf router-address { type inet:ipv4-address; description "Router address."; } } // container router-address-tlv container link-tlv { description "Describes a single link. It is constructed from a set of sub-TLVs."; leaf link-type { type router-link-type; mandatory true; description "Link type."; } leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } mandatory true; description "Link ID."; } container local-if-ipv4-addrs { description "All local interface IPv4 addresses."; leaf-list local-if-ipv4-addr { type inet:ipv4-address; description "List of local interface IPv4 addresses."; } } // container local-if-ipv4-addrs container remote-if-ipv4-addrs { description "All remote interface IPv4 addresses."; leaf-list remote-if-ipv4-addr { type inet:ipv4-address; description "List of remote interface IPv4 addresses."; } } // container remote-if-ipv4-addrs leaf te-metric { type uint32; description "TE metric."; } leaf max-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum bandwidth."; } leaf max-reservable-bandwidth { type rt-types:bandwidth-ieee-float32; description "Maximum reservable bandwidth."; } container unreserved-bandwidths { description "All unreserved bandwidths."; list unreserved-bandwidth { description "List of unreserved bandwidths for different priorities."; leaf priority { type uint8 { range "0 .. 7"; } description "Priority from 0 to 7."; } leaf unreserved-bandwidth { type rt-types:bandwidth-ieee-float32; description "Unreserved bandwidth."; } } // list unreserved-bandwidth } // container unreserved-bandwidths leaf admin-group { type uint32; description "Administrative Group / Resource Class/Color."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container link-tlv } // container te-opaque container extended-prefix-opaque { description "All Extended Prefix TLVs in the LSA."; list extended-prefix-tlv { description "Extended Prefix TLV."; leaf route-type { type enumeration { enum "unspecified" { value 0; description "Unspecified."; } enum "intra-area" { value 1; description "OSPF intra-area route."; } enum "inter-area" { value 3; description "OSPF inter-area route."; } enum "external" { value 5; description "OSPF external route."; } enum "nssa" { value 7; description "OSPF NSSA external route."; } } description "Route type."; } container flags { description "Prefix flags."; leaf-list extended-prefix-flags { type identityref { base ospfv2-extended-prefix-flag; } description "List of Extended Prefix TLV flags. This list will contain identities for the prefix flags; these identities are set in the extended prefix flags."; } } // container flags leaf prefix { type inet:ip-prefix; description "Address prefix."; } container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // list extended-prefix-tlv } // container extended-prefix-opaque container extended-link-opaque { description "All Extended Link TLVs in the LSA."; reference "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement"; container extended-link-tlv { description "Extended Link TLV."; leaf link-id { type union { type inet:ipv4-address; type yang:dotted-quad; } description "Router-LSA Link ID."; } leaf link-data { type union { type inet:ipv4-address; type uint32; } description "Router-LSA link data."; } leaf type { type router-link-type; description "Router-LSA link type."; } container maximum-sid-depth-tlv { description "OSPF Node MSD TLV."; list msd-type { description "List of MSD tuples."; leaf msd-type { type uint8; description "Maximum SID Depth (MSD) type."; } leaf msd-value { type uint8; description "MSD value for the type."; } } // list msd-type } // container maximum-sid-depth-tlv container unknown-tlvs { description "All unknown TLVs."; list unknown-tlv { description "Unknown TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // list unknown-tlv } // container unknown-tlvs } // container extended-link-tlv } // container extended-link-opaque } // container opaque } // container body } // container ospfv2 container ospfv3 { description "OSPFv3 LSA."; container header { description "Decoded OSPFv3 LSA header data."; leaf lsa-id { type uint32; mandatory true; description "OSPFv3 LSA ID."; } leaf age { type uint16; mandatory true; description "LSA age."; } leaf type { type identityref { base ospf-lsa-type; } mandatory true; description "LSA type."; } leaf adv-router { type rt-types:router-id; mandatory true; description "LSA advertising router."; } leaf seq-num { type uint32; mandatory true; description "LSA sequence number."; } leaf checksum { type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } leaf length { type uint16; mandatory true; description "LSA length, including the header."; } } // container header container body { description "Decoded OSPF LSA body data."; container router { when "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" { description "Only applies to Router-LSAs."; } description "Router-LSA."; container router-bits { description "Router-LSA bits."; leaf-list rtr-lsa-bits { type identityref { base router-lsa-bit; } description "List of Router-LSA bits. This list will contain identities for the bits; these identities are set in the Router-LSA bits."; } } // container router-bits container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container links { description "All router links."; list link { description "Router-LSA link."; leaf interface-id { type uint32; description "Interface ID for the link."; } leaf neighbor-interface-id { type uint32; description "Neighbor's Interface ID for the link."; } leaf neighbor-router-id { type rt-types:router-id; description "Neighbor's Router ID for the link."; } leaf type { type router-link-type; description "Link type: 1 - Point-to-Point Link 2 - Transit Network Link 3 - Reserved for OSPFv3 Links 4 - Virtual Link."; } leaf metric { type uint16; description "Link metric."; } } // list link } // container links } // container router container network { when "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" { description "Only applies to Network-LSAs."; } description "Network-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options container attached-routers { description "All attached routers."; leaf-list attached-router { type rt-types:router-id; description "List of the routers attached to the network."; } } // container attached-routers } // container network container inter-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix-LSAs."; } description "Prefix-LSA."; leaf metric { type ospf-metric; description "Inter-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // container inter-area-prefix container inter-area-router { when "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router-LSAs."; } description "Inter-Area-Router-LSA."; container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf metric { type ospf-metric; description "Autonomous System Boundary Router (ASBR) metric."; } leaf destination-router-id { type rt-types:router-id; description "The Router ID of the ASBR described by the LSA."; } } // container inter-area-router container as-external { when "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" { description "Only applies to AS-External-LSAs."; } description "AS-External-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container as-external container nssa { when "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" { description "Only applies to NSSA-LSAs."; } description "NSSA-LSA."; leaf metric { type ospf-metric; description "AS-External-LSA or NSSA-LSA Metric."; } leaf flags { type bits { bit E { position 0; description "When set, the metric specified is a Type 2 external metric."; } bit F { position 1; description "When set, a forwarding address is included in the LSA."; } bit T { position 2; description "When set, an external route tag is included in the LSA."; } } description "AS-External-LSA or NSSA-LSA flags."; } leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced Link State (LS) Type."; reference "RFC 5340: OSPF for IPv6"; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf forwarding-address { type inet:ipv6-address; description "IPv6 Forwarding address."; } leaf external-route-tag { type uint32; description "Route tag."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; reference "RFC 5340: OSPF for IPv6"; } } // container nssa container link { when "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" { description "Only applies to Link-LSAs."; } description "Link-LSA."; leaf rtr-priority { type uint8; description "Router priority for DR election. A router with a higher priority will be preferred in the election. A value of 0 indicates that the router is not eligible to become the DR or BDR."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options leaf link-local-interface-address { type inet:ipv6-address; description "The originating router's link-local interface address for the link."; } leaf num-of-prefixes { type uint32; description "Number of prefixes."; } container prefixes { description "All prefixes for the link."; list prefix { description "List of prefixes associated with the link."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options } // list prefix } // container prefixes } // container link container intra-area-prefix { when "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix-LSAs."; } description "Intra-Area-Prefix-LSA."; leaf referenced-ls-type { type identityref { base ospfv3-lsa-type; } description "Referenced LS Type."; } leaf unknown-referenced-ls-type { type uint16; description "Value for an unknown Referenced LS Type."; } leaf referenced-link-state-id { type uint32; description "Referenced Link State ID."; } leaf referenced-adv-router { type rt-types:router-id; description "Referenced Advertising Router."; reference "RFC 5340: OSPF for IPv6"; } leaf num-of-prefixes { type uint16; description "Number of prefixes."; } container prefixes { description "All prefixes in this LSA."; list prefix { description "List of prefixes in this LSA."; leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; leaf-list prefix-options { type identityref { base ospfv3-prefix-option; } description "List of OSPFv3 prefix Options. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options leaf metric { type uint16; description "Prefix metric."; } } // list prefix } // container prefixes } // container intra-area-prefix container router-information { when "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" { description "Only applies to Router-Information-LSAs (RFC 7770)."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; } description "Router-Information-LSA."; reference "RFC 7770: Extensions to OSPF for Advertising Optional Router Capabilities"; container router-capabilities-tlv { description "Informational and functional router capabilities."; container router-informational-capabilities { description "OSPF Router Informational Flag definitions."; leaf-list informational-capabilities { type identityref { base informational-capability; } description "List of informational capabilities. This list will contain the identities for the informational capabilities supported by the router."; } } // container router-informational-capabilities list informational-capabilities-flags { description "List of informational capability flags. This will return all the 32-bit informational flags, irrespective of whether or not they are known to the device."; leaf informational-flag { type uint32; description "Individual informational capability flag."; } } // list informational-capabilities-flags list functional-capabilities { description "List of functional capability flags. This will return all the 32-bit functional flags, irrespective of whether or not they are known to the device."; leaf functional-flag { type uint32; description "Individual functional capability flag."; } } // list functional-capabilities } // container router-capabilities-tlv container node-tag-tlvs { description "All Node Admin Tag TLVs."; list node-tag-tlv { description "Node Admin Tag TLV."; list node-tag { description "List of tags."; leaf tag { type uint32; description "Value of the node administrative tag."; } } // list node-tag } // list node-tag-tlv } // container node-tag-tlvs container dynamic-hostname-tlv { description "OSPF Dynamic Hostname TLV."; leaf hostname { type string { length "1..255"; } description "Dynamic hostname."; } } // container dynamic-hostname-tlv container sbfd-discriminator-tlv { description "OSPF S-BFD Discriminator TLV."; list sbfd-discriminators { description "List of S-BFD Discriminators."; leaf sbfd-discriminator { type uint32; description "Individual S-BFD Discriminator."; } } // list sbfd-discriminators } // container sbfd-discriminator-tlv } // container router-information container e-link { when "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-link-lsa'" { description "Only applies to E-Link-LSAs."; } description "E-Link-LSA contents."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 4.7"; leaf rtr-priority { type uint8; description "Router priority for the interface."; } container lsa-options { description "OSPFv3 LSA Options."; leaf-list lsa-options { type identityref { base ospfv3-lsa-option; } description "List of OSPFv3 LSA Options. This list will contain the identities for the OSPFv3 LSA Options that are set for the LSA."; } } // container lsa-options list e-link-tlvs { description "E-Link-LSA TLVs."; container unknown-tlv { description "Unknown E-Link TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-tlv container intra-prefix-tlv { description "Intra-Area-Prefix-LSA TLV."; leaf metric { type ospf:ospf-metric; description "Intra-Area Prefix metric."; } leaf prefix { type inet:ip-prefix; description "LSA prefix."; } container prefix-options { description "Prefix options."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Section 3.1"; leaf-list prefix-options { type identityref { base ospfv3-e-prefix-option; } description "OSPFv3 prefix options flag list. This list will contain the identities for the OSPFv3 options that are set for the OSPFv3 prefix."; } } // container prefix-options list sub-tlvs { description "Intra-Area-Prefix TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container intra-prefix-tlv container ipv6-link-local-addr-tlv { description "IPv6 Link-Local Address TLV."; leaf link-local-address { type inet:ipv6-address; description "IPv6 Link-Local address."; } list sub-tlvs { description "IPv6 Link-Local Address TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container ipv6-link-local-addr-tlv container ipv4-link-local-addr-tlv { description "IPv4 Link-Local Address TLV."; leaf link-local-address { type inet:ipv4-address; description "IPv4 Link-Local address."; } list sub-tlvs { description "IPv4 Link-Local Address TLV sub-TLVs."; container unknown-sub-tlv { description "Unknown External TLV sub-TLV."; leaf type { type uint16; description "TLV type."; } leaf length { type uint16; description "TLV length (octets)."; } leaf value { type yang:hex-string; description "TLV value."; } } // container unknown-sub-tlv } // list sub-tlvs } // container ipv4-link-local-addr-tlv } // list e-link-tlvs } // container e-link } // container body } // container ospfv3 } // choice version } // list link-scope-lsa } // container link-scope-lsas } // list link-scope-lsa-type } // container database container topologies { description "All topologies for the interface."; list topology { key "name"; description "OSPF interface topology."; leaf name { type leafref { path "../../../../../../../../../../rt:ribs/rt:rib/rt:name"; } description "Single topology enabled on this interface."; } leaf cost { type ospf-link-metric; description "Interface cost for this topology."; } } // list topology } // container topologies leaf instance-id { type uint8; default "0"; description "OSPFv3 instance ID."; } leaf interface-id { type uint32; config false; description "OSPFv3 interface ID."; } } // list interface } // container interfaces container topologies { description "All topologies for the area."; list topology { key "name"; description "OSPF area topology."; leaf name { type leafref { path "../../../../../../../../rt:ribs/rt:rib/rt:name"; } description "Single topology enabled for this area."; } leaf summary { when "derived-from(../../../area-type, 'stub-nssa-area')" { description "Summary advertisement into the stub area or NSSA."; } type boolean; description "Enables/disables a summary advertisement into the topology in the stub area or NSSA."; } leaf default-cost { when "derived-from(../../../area-type, 'stub-nssa-area')" { description "Cost for the LSA default route advertised into the topology in the stub area or NSSA."; } type ospf-metric; description "Sets the summary default route cost for a stub area or NSSA."; } container ranges { description "Container for summary ranges."; list range { key "prefix"; description "Summarizes routes matching the address/mask. Applicable to Area Border Routers (ABRs) only."; leaf prefix { type inet:ip-prefix; description "IPv4 or IPv6 prefix."; } leaf advertise { type boolean; description "Advertise or hide."; } leaf cost { type ospf-metric; description "Advertised cost of a summary route."; } } // list range } // container ranges } // list topology } // container topologies leaf extended-lsa-support { type boolean; must "derived-from(../ospf:area-type,'stub-nssa-area') or (current() = 'true') or (../../../extended-lsa-support = 'false')" { description "For regular areas, i.e., areas where AS-scoped LSAs are flooded, disabling AreaExtendedLSASupport at the area level is prohibited when ExtendedLSASupport is enabled at the instance level. E-AS-External-LSAs are flooded into all OSPFv3 regular areas (i.e., not a stub or an NSSA), and disabling support at the area level is not possible."; } description "This augments the OSPFv3 protocol area-level configuration with Extended LSA support. When enabled, OSPFv3 Extended LSAs will be advertised and OSPFv3 Legacy LSAs will not be advertised. When disabled, OSPFv3 Legacy LSAs will be advertised. However, OSPFv3 Extended LSAs could still be advertised in Extended LSA Sparse Mode to support incrementally deployed features as described in Section 6.2 of RFC 8362. If not specified, Extended LSA support status is inherited from the instance-level configuration."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Appendix B - Area Configuration Support"; } } // list area } // container areas container topologies { description "All topologies."; list topology { key "name"; description "OSPF topology. The OSPF topology address family must coincide with the routing instance's address family."; leaf name { type leafref { path "../../../../../../rt:ribs/rt:rib/rt:name"; } description "RIB name corresponding to the OSPF topology."; } container local-rib { config false; description "Local RIB."; list route { key "prefix"; description "OSPF instance's Local Routes."; leaf prefix { type inet:ip-prefix; description "Destination prefix."; } container next-hops { description "Next hops for the route."; list next-hop { description "List of next hops for the route."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop { type inet:ip-address; description "Address of the next hop."; } } // list next-hop } // container next-hops leaf metric { type uint32; description "Metric for this route."; } leaf route-type { type route-type; description "Route type for this route."; } leaf route-tag { type uint32; description "Route tag for this route."; } } // list route } // container local-rib } // list topology } // container topologies leaf extended-lsa-support { type boolean; default "false"; description "Enable OSPFv3 Extended LSA support for the OSPFv3 domain."; reference "RFC 8362: OSPFv3 Link State Advertisement (LSA) Extensibility, Appendix A - Global Configuration Support"; } } // container ospf container igmp { if-feature feature-igmp; description "IGMP configuration and operational state data."; container global { description "Global attributes."; leaf enabled { if-feature global-admin-enable; type boolean; default "true"; description "When this grouping is used for IGMP, this leaf indicates whether IGMP is enabled ('true') or disabled ('false') in the routing instance. When this grouping is used for MLD, this leaf indicates whether MLD is enabled ('true') or disabled ('false') in the routing instance."; } leaf max-entries { if-feature global-max-entries; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of entries in the IGMP instance. When this grouping is used for MLD, this leaf indicates the maximum number of entries in the MLD instance. If this leaf is not specified, the number of entries is not limited."; } leaf max-groups { if-feature global-max-groups; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of groups in the IGMP instance. When this grouping is used for MLD, this leaf indicates the maximum number of groups in the MLD instance. If this leaf is not specified, the number of groups is not limited."; } leaf entries-count { type uint32; config false; description "When this grouping is used for IGMP, this leaf indicates the number of entries in the IGMP instance. When this grouping is used for MLD, this leaf indicates the number of entries in the MLD instance."; } leaf groups-count { type uint32; config false; description "When this grouping is used for IGMP, this leaf indicates the number of existing groups in the IGMP instance. When this grouping is used for MLD, this leaf indicates the number of existing groups in the MLD instance."; } container statistics { config false; description "When this grouping is used for IGMP, this container contains the statistics for the IGMP instance. When this grouping is used for MLD, this leaf indicates the statistics for the MLD instance."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistic counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container error { description "Statistics of errors."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } leaf checksum { type yang:counter64; description "The number of checksum errors."; } leaf too-short { type yang:counter64; description "The number of messages that are too short."; } } // container error container received { description "Statistics of received messages."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } } // container received container sent { description "Statistics of sent messages."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } } // container sent } // container statistics } // container global container interfaces { description "Containing a list of interfaces."; leaf last-member-query-interval { type uint16 { range "1..1023"; } units "seconds"; description "When used in IGMP schema, this leaf indicates the Last Member Query Interval, which may be tuned to modify the leave latency of the network; when used in MLD schema, this leaf indicates the Last Listener Query Interval, which may be tuned to modify the leave latency of the network. This leaf is not applicable for version 1 of the IGMP. For version 2 and version 3 of the IGMP, and for all versions of the MLD, the default value of this leaf is 1. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Section 8.8 of RFC 2236: Internet Group Management Protocol, Version 2. Section 8.8 of RFC 3376: Internet Group Management Protocol, Version 3. Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) for IPv6. Section 9.8 of RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf query-interval { type uint16 { range "1..31744"; } units "seconds"; default "125"; description "The Query Interval is the interval between General Queries sent by the Querier. In RFC 3376, the Querier's Query Interval (QQI) is represented from the Querier's Query Interval Code (QQIC) in query message as follows: If QQIC < 128, QQI = QQIC. If QQIC >= 128, QQIC represents a floating-point value as follows: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ QQI = (mant | 0x10) << (exp + 3). The maximum value of QQI is 31744. The default value is 125. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf query-max-response-time { type uint16 { range "1..1023"; } units "seconds"; default "10"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. The default value is 10. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf require-router-alert { if-feature intf-require-router-alert; type boolean; description "Protocol packets should contain the router alert IP option. When this leaf is not configured, the server uses the following rules to determine the operational value of this leaf: if this grouping is used in IGMP schema and the value of the leaf 'version' is 1, the value 'false' is operationally used by the server; if this grouping is used in IGMP schema and the value of the leaf 'version' is 2 or 3, the value 'true' is operationally used by the server; if this grouping is used in MLD schema, the value 'true' is operationally used by the server. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; } leaf robustness-variable { type uint8 { range "1..7"; } default "2"; description "The Querier's Robustness Variable allows tuning for the expected packet loss on a network. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf version { type uint8 { range "1..3"; } default "2"; description "IGMP version. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "RFC 1112: Host Extensions for IP Multicasting, RFC 2236: Internet Group Management Protocol, Version 2, RFC 3376: Internet Group Management Protocol, Version 3."; } leaf max-groups-per-interface { if-feature intf-max-groups; type uint32; description "The maximum number of groups associated with each interface. If this leaf is not specified, the number of groups is not limited."; } list interface { key "interface-name"; description "List of IGMP interfaces."; leaf interface-name { type if:interface-ref; must "/if:interfaces/if:interface[if:name = current()]/ip:ipv4" { error-message "The interface must have IPv4 configured, either enabled or disabled."; } description "Reference to an entry in the global interface list."; } leaf last-member-query-interval { type uint16 { range "1..1023"; } units "seconds"; must "../version != 1 or (not(../version) and (../../version != 1 or not(../../version)))" { error-message "IGMPv1 does not support last-member-query-interval."; } description "When used in IGMP schema, this leaf indicates the Last Member Query Interval, which may be tuned to modify the leave latency of the network; when used in MLD schema, this leaf indicates the Last Listener Query Interval, which may be tuned to modify the leave latency of the network. This leaf is not applicable for version 1 of the IGMP. For version 2 and version 3 of the IGMP, and for all versions of the MLD, the default value of this leaf is 1. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Section 8.8 of RFC 2236: Internet Group Management Protocol, Version 2. Section 8.8 of RFC 3376: Internet Group Management Protocol, Version 3. Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) for IPv6. Section 9.8 of RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf query-interval { type uint16 { range "1..31744"; } units "seconds"; description "The Query Interval is the interval between General Queries sent by the Querier. In RFC 3376, the Querier's Query Interval (QQI) is represented from the Querier's Query Interval Code (QQIC) in query message as follows: If QQIC < 128, QQI = QQIC. If QQIC >= 128, QQIC represents a floating-point value as follows: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ QQI = (mant | 0x10) << (exp + 3). The maximum value of QQI is 31744. The default value is 125. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf query-max-response-time { type uint16 { range "1..1023"; } units "seconds"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. The default value is 10. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf require-router-alert { if-feature intf-require-router-alert; type boolean; description "Protocol packets should contain the router alert IP option. When this leaf is not configured, the server uses the following rules to determine the operational value of this leaf: if this grouping is used in IGMP schema and the value of the leaf 'version' is 1, the value 'false' is operationally used by the server; if this grouping is used in IGMP schema and the value of the leaf 'version' is 2 or 3, the value 'true' is operationally used by the server; if this grouping is used in MLD schema, the value 'true' is operationally used by the server. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; } leaf robustness-variable { type uint8 { range "1..7"; } description "The Querier's Robustness Variable allows tuning for the expected packet loss on a network. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf version { type uint8 { range "1..3"; } description "IGMP version. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "RFC 1112: Host Extensions for IP Multicasting, RFC 2236: Internet Group Management Protocol, Version 2, RFC 3376: Internet Group Management Protocol, Version 3."; } leaf enabled { if-feature intf-admin-enable; type boolean; default "true"; description "When this grouping is used for IGMP, this leaf indicates whether IGMP is enabled ('true') or disabled ('false') on the interface. When this grouping is used for MLD, this leaf indicates whether MLD is enabled ('true') or disabled ('false') on the interface."; } leaf group-policy { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "When this grouping is used for IGMP, this leaf specifies the name of the access policy used to filter the IGMP membership. When this grouping is used for MLD, this leaf specifies the name of the access policy used to filter the MLD membership. The value space of this leaf is restricted to the existing policy instances defined by the referenced schema in RFC 8519. As specified by RFC 8519, the length of the name is between 1 and 64; a device MAY further restrict the length of this name; space and special characters are not allowed. If this leaf is not specified, no policy is applied, and all packets received from this interface are accepted."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } leaf immediate-leave { if-feature intf-immediate-leave; type empty; description "When this grouping is used for IGMP, the presence of this leaf requests IGMP to perform an immediate leave upon receiving an IGMPv2 leave message. If the router is IGMP-enabled, it sends an IGMP last member query with a last member query response time. However, the router does not wait for the response time before it prunes the group. When this grouping is used for MLD, the presence of this leaf requests MLD to perform an immediate leave upon receiving an MLDv1 leave message. If the router is MLD-enabled, it sends an MLD last member query with a last member query response time. However, the router does not wait for the response time before it prunes the group."; } leaf max-groups { if-feature intf-max-groups; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of groups associated with the IGMP interface. When this grouping is used for MLD, this leaf indicates the maximum number of groups associated with the MLD interface. If this leaf is not specified, the number of groups is not limited."; } leaf max-group-sources { if-feature intf-max-group-sources; type uint32; must "../version = 3 or (not(../version) and (../../version = 3))" { error-message "The version of IGMP must be 3 to support the source-specific parameters."; } description "The maximum number of group sources. If this leaf is not specified, the number of group sources is not limited."; } leaf source-policy { if-feature intf-source-policy; type leafref { path "/acl:acls/acl:acl/acl:name"; } must "../version = 3 or (not(../version) and (../../version = 3))" { error-message "The version of IGMP must be 3 to support the source-specific parameters."; } description "Name of the access policy used to filter sources. The value space of this leaf is restricted to the existing policy instances defined by the referenced schema in RFC 8519. As specified by RFC 8519, the length of the name is between 1 and 64; a device MAY further restrict the length of this name; space and special characters are not allowed. If this leaf is not specified, no policy is applied, and all packets received from this interface are accepted."; } leaf verify-source-subnet { if-feature intf-verify-source-subnet; type empty; description "If present, the interface accepts packets with matching source IP subnet only."; } leaf explicit-tracking { if-feature intf-explicit-tracking; type empty; must "../version = 3 or (not(../version) and (../../version = 3))" { error-message "The version of IGMP must be 3 to support the explicit tracking function."; } description "When this grouping is used for IGMP, the presence of this leaf enables an IGMP-based explicit membership tracking function for multicast routers and IGMP proxy devices supporting IGMPv3. When this grouping is used for MLD, the presence of this leaf enables an MLD-based explicit membership tracking function for multicast routers and MLD proxy devices supporting MLDv2. The explicit membership tracking function contributes to saving network resources and shortening leave latency."; reference "Section 3 of RFC 6636: Tuning the Behavior of the Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) for Routers in Mobile and Wireless Networks"; } leaf lite-exclude-filter { if-feature intf-lite-exclude-filter; type empty; must "../version = 3 or (not(../version) and (../../version = 3))" { error-message "The version of IGMP must be 3 to support the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol."; } description "When this grouping is used for IGMP, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol, which simplifies the standard versions of IGMPv3. When this grouping is used for MLD, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight MLDv2 protocol, which simplifies the standard versions of MLDv2."; reference "RFC 5790: Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols"; } leaf-list join-group { if-feature intf-join-group; type rt-types:ipv4-multicast-group-address; description "The router joins this multicast group on the interface."; } list ssm-map { if-feature intf-ssm-map; key "ssm-map-source-addr ssm-map-group-policy"; description "The policy for (*,G) mapping to (S,G)."; leaf ssm-map-source-addr { type ssm-map-ipv4-addr-type; description "Multicast source IPv4 address."; } leaf ssm-map-group-policy { type string; description "Name of the policy used to define ssm-map rules. A device can restrict the length and value of this name, possibly space and special characters are not allowed."; } } // list ssm-map list static-group { if-feature intf-static-group; key "group-addr source-addr"; description "A static multicast route, (*,G) or (S,G). The version of IGMP must be 3 to support (S,G)."; leaf group-addr { type rt-types:ipv4-multicast-group-address; description "Multicast group IPv4 address."; } leaf source-addr { type rt-types:ipv4-multicast-source-address; description "Multicast source IPv4 address."; } } // list static-group leaf oper-status { type enumeration { enum "up" { value 0; description "Ready to pass packets."; } enum "down" { value 1; description "The interface does not pass any packets."; } } config false; mandatory true; description "Indicates whether the operational state of the interface is up or down."; } leaf querier { type inet:ipv4-address; config false; mandatory true; description "The querier address in the subnet."; } leaf-list joined-group { if-feature intf-join-group; type rt-types:ipv4-multicast-group-address; config false; description "The routers that joined this multicast group."; } list group { key "group-address"; config false; description "Multicast group membership information that joined on the interface."; leaf group-address { type rt-types:ipv4-multicast-group-address; description "Multicast group address."; } leaf expire { type uint32; units "seconds"; mandatory true; description "The time left before the multicast group state expires."; } leaf filter-mode { type enumeration { enum "include" { value 0; description "In include mode, reception of packets sent to the specified multicast address is requested only from those IP source addresses listed in the source-list parameter"; } enum "exclude" { value 1; description "In exclude mode, reception of packets sent to the given multicast address is requested from all IP source addresses except those listed in the source-list parameter."; } } mandatory true; description "Filter mode for a multicast group, may be either include or exclude."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The elapsed time since the device created multicast group record."; } leaf last-reporter { type inet:ipv4-address; description "The IPv4 address of the last host that has sent the report to join the multicast group."; } list source { key "source-address"; description "List of multicast source information of the multicast group."; leaf source-address { type inet:ipv4-address; description "Multicast source address in group record."; } leaf expire { type uint32; units "seconds"; mandatory true; description "The time left before multicast source-group state expires."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The elapsed time since the device created multicast source-group record."; } leaf host-count { if-feature intf-explicit-tracking; type uint32; description "The number of host addresses."; } leaf last-reporter { type inet:ipv4-address; description "The IPv4 address of the last host that has sent the report to join the multicast source and group."; } list host { if-feature intf-explicit-tracking; key "host-address"; description "List of hosts with the membership for the specific multicast source-group."; leaf host-address { type inet:ipv4-address; description "The IPv4 address of the host."; } leaf host-filter-mode { type enumeration { enum "include" { value 0; description "In include mode."; } enum "exclude" { value 1; description "In exclude mode."; } } mandatory true; description "Filter mode for a multicast membership host may be either include or exclude."; } } // list host } // list source } // list group } // list interface } // container interfaces action clear-groups { if-feature action-clear-groups; description "Clears the specified IGMP cache entries."; input { choice interface { mandatory true; description "Indicates the interface(s) from which the cache entries are cleared."; leaf interface-name { type leafref { path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface/igmp-mld:interface-name"; } description "Name of the IGMP interface."; } leaf all-interfaces { type empty; description "IGMP groups from all interfaces are cleared."; } } // choice interface leaf group-address { type union { type enumeration { enum "*" { value 0; description "Any group address."; } } type rt-types:ipv4-multicast-group-address; } mandatory true; description "Multicast group IPv4 address. If the value '*' is specified, all IGMP group entries are cleared."; } leaf source-address { type rt-types:ipv4-multicast-source-address; mandatory true; description "Multicast source IPv4 address. If the value '*' is specified, all IGMP source-group entries are cleared."; } } } // rpc clear-groups } // container igmp container mld { if-feature feature-mld; description "MLD configuration and operational state data."; container global { description "Global attributes."; leaf enabled { if-feature global-admin-enable; type boolean; default "true"; description "When this grouping is used for IGMP, this leaf indicates whether IGMP is enabled ('true') or disabled ('false') in the routing instance. When this grouping is used for MLD, this leaf indicates whether MLD is enabled ('true') or disabled ('false') in the routing instance."; } leaf max-entries { if-feature global-max-entries; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of entries in the IGMP instance. When this grouping is used for MLD, this leaf indicates the maximum number of entries in the MLD instance. If this leaf is not specified, the number of entries is not limited."; } leaf max-groups { if-feature global-max-groups; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of groups in the IGMP instance. When this grouping is used for MLD, this leaf indicates the maximum number of groups in the MLD instance. If this leaf is not specified, the number of groups is not limited."; } leaf entries-count { type uint32; config false; description "When this grouping is used for IGMP, this leaf indicates the number of entries in the IGMP instance. When this grouping is used for MLD, this leaf indicates the number of entries in the MLD instance."; } leaf groups-count { type uint32; config false; description "When this grouping is used for IGMP, this leaf indicates the number of existing groups in the IGMP instance. When this grouping is used for MLD, this leaf indicates the number of existing groups in the MLD instance."; } container statistics { config false; description "When this grouping is used for IGMP, this container contains the statistics for the IGMP instance. When this grouping is used for MLD, this leaf indicates the statistics for the MLD instance."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistic counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container error { description "Statistics of errors."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } leaf checksum { type yang:counter64; description "The number of checksum errors."; } leaf too-short { type yang:counter64; description "The number of messages that are too short."; } } // container error container received { description "Statistics of received messages."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } } // container received container sent { description "Statistics of sent messages."; leaf total { type yang:counter64; description "The number of total messages."; } leaf query { type yang:counter64; description "The number of query messages."; } leaf report { type yang:counter64; description "The number of report messages."; } leaf leave { type yang:counter64; description "The number of leave messages."; } } // container sent } // container statistics } // container global container interfaces { description "Containing a list of interfaces."; leaf last-member-query-interval { type uint16 { range "1..1023"; } units "seconds"; default "1"; description "When used in IGMP schema, this leaf indicates the Last Member Query Interval, which may be tuned to modify the leave latency of the network; when used in MLD schema, this leaf indicates the Last Listener Query Interval, which may be tuned to modify the leave latency of the network. This leaf is not applicable for version 1 of the IGMP. For version 2 and version 3 of the IGMP, and for all versions of the MLD, the default value of this leaf is 1. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Section 8.8 of RFC 2236: Internet Group Management Protocol, Version 2. Section 8.8 of RFC 3376: Internet Group Management Protocol, Version 3. Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) for IPv6. Section 9.8 of RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf query-interval { type uint16 { range "1..31744"; } units "seconds"; default "125"; description "The Query Interval is the interval between General Queries sent by the Querier. In RFC 3376, the Querier's Query Interval (QQI) is represented from the Querier's Query Interval Code (QQIC) in query message as follows: If QQIC < 128, QQI = QQIC. If QQIC >= 128, QQIC represents a floating-point value as follows: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ QQI = (mant | 0x10) << (exp + 3). The maximum value of QQI is 31744. The default value is 125. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf query-max-response-time { type uint16 { range "1..1023"; } units "seconds"; default "10"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. The default value is 10. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf require-router-alert { if-feature intf-require-router-alert; type boolean; default "true"; description "Protocol packets should contain the router alert IP option. When this leaf is not configured, the server uses the following rules to determine the operational value of this leaf: if this grouping is used in IGMP schema and the value of the leaf 'version' is 1, the value 'false' is operationally used by the server; if this grouping is used in IGMP schema and the value of the leaf 'version' is 2 or 3, the value 'true' is operationally used by the server; if this grouping is used in MLD schema, the value 'true' is operationally used by the server. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; } leaf robustness-variable { type uint8 { range "1..7"; } default "2"; description "The Querier's Robustness Variable allows tuning for the expected packet loss on a network. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf version { type uint8 { range "1..2"; } default "2"; description "MLD version. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6, RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf max-groups-per-interface { if-feature intf-max-groups; type uint32; description "The maximum number of groups associated with each interface. If this leaf is not specified, the number of groups is not limited."; } list interface { key "interface-name"; description "List of MLD interfaces."; leaf interface-name { type if:interface-ref; must "/if:interfaces/if:interface[if:name = current()]/ip:ipv6" { error-message "The interface must have IPv6 configured, either enabled or disabled."; } description "Reference to an entry in the global interface list."; } leaf last-member-query-interval { type uint16 { range "1..1023"; } units "seconds"; description "When used in IGMP schema, this leaf indicates the Last Member Query Interval, which may be tuned to modify the leave latency of the network; when used in MLD schema, this leaf indicates the Last Listener Query Interval, which may be tuned to modify the leave latency of the network. This leaf is not applicable for version 1 of the IGMP. For version 2 and version 3 of the IGMP, and for all versions of the MLD, the default value of this leaf is 1. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Section 8.8 of RFC 2236: Internet Group Management Protocol, Version 2. Section 8.8 of RFC 3376: Internet Group Management Protocol, Version 3. Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) for IPv6. Section 9.8 of RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf query-interval { type uint16 { range "1..31744"; } units "seconds"; description "The Query Interval is the interval between General Queries sent by the Querier. In RFC 3376, the Querier's Query Interval (QQI) is represented from the Querier's Query Interval Code (QQIC) in query message as follows: If QQIC < 128, QQI = QQIC. If QQIC >= 128, QQIC represents a floating-point value as follows: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ QQI = (mant | 0x10) << (exp + 3). The maximum value of QQI is 31744. The default value is 125. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf query-max-response-time { type uint16 { range "1..1023"; } units "seconds"; description "Query maximum response time specifies the maximum time allowed before sending a responding report. The default value is 10. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf require-router-alert { if-feature intf-require-router-alert; type boolean; description "Protocol packets should contain the router alert IP option. When this leaf is not configured, the server uses the following rules to determine the operational value of this leaf: if this grouping is used in IGMP schema and the value of the leaf 'version' is 1, the value 'false' is operationally used by the server; if this grouping is used in IGMP schema and the value of the leaf 'version' is 2 or 3, the value 'true' is operationally used by the server; if this grouping is used in MLD schema, the value 'true' is operationally used by the server. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; } leaf robustness-variable { type uint8 { range "1..7"; } description "The Querier's Robustness Variable allows tuning for the expected packet loss on a network. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group Management Protocol, Version 3"; } leaf version { type uint8 { range "1..2"; } description "MLD version. The default value is 2. This leaf may be configured at the interface level or the interface-global level, with precedence given to the value at the interface level. If the leaf is not configured at either level, the default value is used."; reference "RFC 2710: Multicast Listener Discovery (MLD) for IPv6, RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6."; } leaf enabled { if-feature intf-admin-enable; type boolean; default "true"; description "When this grouping is used for IGMP, this leaf indicates whether IGMP is enabled ('true') or disabled ('false') on the interface. When this grouping is used for MLD, this leaf indicates whether MLD is enabled ('true') or disabled ('false') on the interface."; } leaf group-policy { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "When this grouping is used for IGMP, this leaf specifies the name of the access policy used to filter the IGMP membership. When this grouping is used for MLD, this leaf specifies the name of the access policy used to filter the MLD membership. The value space of this leaf is restricted to the existing policy instances defined by the referenced schema in RFC 8519. As specified by RFC 8519, the length of the name is between 1 and 64; a device MAY further restrict the length of this name; space and special characters are not allowed. If this leaf is not specified, no policy is applied, and all packets received from this interface are accepted."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } leaf immediate-leave { if-feature intf-immediate-leave; type empty; description "When this grouping is used for IGMP, the presence of this leaf requests IGMP to perform an immediate leave upon receiving an IGMPv2 leave message. If the router is IGMP-enabled, it sends an IGMP last member query with a last member query response time. However, the router does not wait for the response time before it prunes the group. When this grouping is used for MLD, the presence of this leaf requests MLD to perform an immediate leave upon receiving an MLDv1 leave message. If the router is MLD-enabled, it sends an MLD last member query with a last member query response time. However, the router does not wait for the response time before it prunes the group."; } leaf max-groups { if-feature intf-max-groups; type uint32; description "When this grouping is used for IGMP, this leaf indicates the maximum number of groups associated with the IGMP interface. When this grouping is used for MLD, this leaf indicates the maximum number of groups associated with the MLD interface. If this leaf is not specified, the number of groups is not limited."; } leaf max-group-sources { if-feature intf-max-group-sources; type uint32; must "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" { error-message "The version of MLD must be 2 to support the source-specific parameters."; } description "The maximum number of group sources. If this leaf is not specified, the number of group sources is not limited."; } leaf source-policy { if-feature intf-source-policy; type leafref { path "/acl:acls/acl:acl/acl:name"; } must "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" { error-message "The version of MLD must be 2 to support the source-specific parameters."; } description "Name of the access policy used to filter sources. The value space of this leaf is restricted to the existing policy instances defined by the referenced schema in RFC 8519. As specified by RFC 8519, the length of the name is between 1 and 64; a device MAY further restrict the length of this name; space and special characters are not allowed. If this leaf is not specified, no policy is applied, and all packets received from this interface are accepted."; } leaf verify-source-subnet { if-feature intf-verify-source-subnet; type empty; description "If present, the interface accepts packets with matching source IP subnet only."; } leaf explicit-tracking { if-feature intf-explicit-tracking; type empty; must "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" { error-message "The version of MLD must be 2 to support the explicit tracking function."; } description "When this grouping is used for IGMP, the presence of this leaf enables an IGMP-based explicit membership tracking function for multicast routers and IGMP proxy devices supporting IGMPv3. When this grouping is used for MLD, the presence of this leaf enables an MLD-based explicit membership tracking function for multicast routers and MLD proxy devices supporting MLDv2. The explicit membership tracking function contributes to saving network resources and shortening leave latency."; reference "Section 3 of RFC 6636: Tuning the Behavior of the Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) for Routers in Mobile and Wireless Networks"; } leaf lite-exclude-filter { if-feature intf-lite-exclude-filter; type empty; must "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" { error-message "The version of MLD must be 2 to support the simplified EXCLUDE filter in the Lightweight MLDv2 protocol."; } description "When this grouping is used for IGMP, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol, which simplifies the standard versions of IGMPv3. When this grouping is used for MLD, the presence of this leaf enables the support of the simplified EXCLUDE filter in the Lightweight MLDv2 protocol, which simplifies the standard versions of MLDv2."; reference "RFC 5790: Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols"; } leaf-list join-group { if-feature intf-join-group; type rt-types:ipv6-multicast-group-address; description "The router joins this multicast group on the interface."; } list ssm-map { if-feature intf-ssm-map; key "ssm-map-source-addr ssm-map-group-policy"; description "The policy for (*,G) mapping to (S,G)."; leaf ssm-map-source-addr { type ssm-map-ipv6-addr-type; description "Multicast source IPv6 address."; } leaf ssm-map-group-policy { type string; description "Name of the policy used to define ssm-map rules. A device can restrict the length and value of this name, possibly space and special characters are not allowed."; } } // list ssm-map list static-group { if-feature intf-static-group; key "group-addr source-addr"; description "A static multicast route, (*,G) or (S,G). The version of MLD must be 2 to support (S,G)."; leaf group-addr { type rt-types:ipv6-multicast-group-address; description "Multicast group IPv6 address."; } leaf source-addr { type rt-types:ipv6-multicast-source-address; description "Multicast source IPv6 address."; } } // list static-group leaf oper-status { type enumeration { enum "up" { value 0; description "Ready to pass packets."; } enum "down" { value 1; description "The interface does not pass any packets."; } } config false; mandatory true; description "Indicates whether the operational state of the interface is up or down."; } leaf querier { type inet:ipv6-address; config false; mandatory true; description "The querier address in the subnet."; } leaf-list joined-group { if-feature intf-join-group; type rt-types:ipv6-multicast-group-address; config false; description "The routers that joined this multicast group."; } list group { key "group-address"; config false; description "Multicast group membership information that joined on the interface."; leaf group-address { type rt-types:ipv6-multicast-group-address; description "Multicast group address."; } leaf expire { type uint32; units "seconds"; mandatory true; description "The time left before the multicast group state expires."; } leaf filter-mode { type enumeration { enum "include" { value 0; description "In include mode, reception of packets sent to the specified multicast address is requested only from those IP source addresses listed in the source-list parameter"; } enum "exclude" { value 1; description "In exclude mode, reception of packets sent to the given multicast address is requested from all IP source addresses except those listed in the source-list parameter."; } } mandatory true; description "Filter mode for a multicast group, may be either include or exclude."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The elapsed time since the device created multicast group record."; } leaf last-reporter { type inet:ipv6-address; description "The IPv6 address of the last host that has sent the report to join the multicast group."; } list source { key "source-address"; description "List of multicast sources of the multicast group."; leaf source-address { type inet:ipv6-address; description "Multicast source address in group record."; } leaf expire { type uint32; units "seconds"; mandatory true; description "The time left before multicast source-group state expires."; } leaf up-time { type uint32; units "seconds"; mandatory true; description "The elapsed time since the device created multicast source-group record."; } leaf host-count { if-feature intf-explicit-tracking; type uint32; description "The number of host addresses."; } leaf last-reporter { type inet:ipv6-address; description "The IPv6 address of the last host that has sent the report to join the multicast source and group."; } list host { if-feature intf-explicit-tracking; key "host-address"; description "List of hosts with the membership for the specific multicast source-group."; leaf host-address { type inet:ipv6-address; description "The IPv6 address of the host."; } leaf host-filter-mode { type enumeration { enum "include" { value 0; description "In include mode."; } enum "exclude" { value 1; description "In exclude mode."; } } mandatory true; description "Filter mode for a multicast membership host may be either include or exclude."; } } // list host } // list source } // list group } // list interface } // container interfaces action clear-groups { if-feature action-clear-groups; description "Clears the specified MLD cache entries."; input { choice interface { mandatory true; description "Indicates the interface(s) from which the cache entries are cleared."; leaf interface-name { type leafref { path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/igmp-mld:mld/igmp-mld:interfaces/igmp-mld:interface/igmp-mld:interface-name"; } description "Name of the MLD interface."; } leaf all-interfaces { type empty; description "MLD groups from all interfaces are cleared."; } } // choice interface leaf group-address { type union { type enumeration { enum "*" { value 0; description "Any group address."; } } type rt-types:ipv6-multicast-group-address; } description "Multicast group IPv6 address. If the value '*' is specified, all MLD group entries are cleared."; } leaf source-address { type rt-types:ipv6-multicast-source-address; description "Multicast source IPv6 address. If the value '*' is specified, all MLD source-group entries are cleared."; } } } // rpc clear-groups } // container mld container msdp { description "MSDP configuration and operational state data."; container global { description "Global attributes."; leaf tcp-connection-source { type if:interface-ref; must "/if:interfaces/if:interface[if:name = current()]/ip:ipv4/ip:enabled != 'false'" { error-message "The interface must have IPv4 enabled."; description "The interface must have IPv4 enabled."; reference "RFC 8343: A YANG Data Model for Interface Management"; } description "The interface is to be the source for the TCP connection. It is a reference to an entry in the global interface list."; } list default-peer { if-feature filter-policy; key "peer-addr prefix-policy"; description "The default peer accepts all MSDP Source-Active (SA) messages. A default peer is needed in topologies where MSDP peers do not coexist with BGP peers. The Reverse Path Forwarding (RPF) check on SA messages will fail, and no SA messages will be accepted. In these cases, you can configure the peer as a default peer and bypass RPF checks."; leaf peer-addr { type leafref { path "../../../peers/peer/address"; } mandatory true; description "Reference to a peer that is in the peer list."; } leaf prefix-policy { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "If specified, only those SA entries whose Rendezvous Point (RP) is permitted in the prefix list are allowed; if not specified, all SA messages from the default peer are accepted."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised) RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } } // list default-peer container originating-rp { description "The container of the originating RP."; leaf interface { type if:interface-ref; must "/if:interfaces/if:interface[if:name = current()]/ip:ipv4/ip:enabled != 'false'" { error-message "The interface must have IPv4 enabled."; description "The interface must have IPv4 enabled."; reference "RFC 8343: A YANG Data Model for Interface Management"; } description "Reference to an entry in the global interface list. The IP address of the interface used in the RP field of an SA message entry. When anycast RPs are used, all RPs use the same IP address. This parameter can be used to define a unique IP address for the RP of each MSDP peer. By default, the software uses the RP address of the local system."; } } // container originating-rp container sa-filter { description "Specifies an Access Control List (ACL) to filter SA messages coming into or going out of the peer."; leaf in { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "Filters incoming SA messages only. The value is the name to uniquely identify a policy that contains one or more rules used to accept or reject MSDP SA messages. If the policy is not specified, all MSDP SA messages are accepted."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } leaf out { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "Filters outgoing SA messages only. The value is the name to uniquely identify a policy that contains one or more rules used to accept or reject MSDP SA messages. If the policy is not specified, all MSDP SA messages are sent."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } } // container sa-filter leaf sa-limit { type uint32; description "A limit on the number of SA entries accepted. If not configured or the value is 0, there is no limit."; } leaf ttl-threshold { type uint8 { range "1..255"; } description "The maximum number of hops data packets can traverse before being dropped."; } } // container global container peers { description "Contains a list of peers."; list peer { key "address"; description "A list of MSDP peers."; leaf address { type inet:ipv4-address; description "The address of the peer."; } action clear-peer { description "Clears the TCP connection to the peer."; } // rpc clear-peer container authentication { if-feature peer-authentication; description "A container defining authentication attributes."; choice authentication-type { description "Choice of authentication."; leaf key-chain { type key-chain:key-chain-ref; description "Reference to a key-chain."; reference "RFC 8177: YANG Data Model for Key Chains"; } case password { leaf key { type string; description "This leaf specifies the authentication key."; } leaf crypto-algorithm { type identityref { base key-chain:crypto-algorithm; } must "derived-from-or-self(., 'key-chain:md5')" { error-message "Only the md5 algorithm can be used for MSDP."; description "Check for crypto-algorithm."; } description "Cryptographic algorithm associated with a key. Only the md5 algorithm can be used for MSDP. When 'md5' is specified, MSDP control messages are secured by TCP MD5 signatures as described in RFCs 3618 and 5925. Both peers of a connection SHOULD be configured to the same algorithm for the connection to be established. When this leaf is not configured, unauthenticated TCP is used."; reference "RFC 3618: Multicast Source Discovery Protocol (MSDP) RFC 5925: The TCP Authentication Option RFC 8177: YANG Data Model for Key Chains"; } } // case password } // choice authentication-type } // container authentication leaf enabled { type boolean; description "'true' if the peer is enabled; 'false' if the peer is disabled."; } leaf tcp-connection-source { type if:interface-ref; must "/if:interfaces/if:interface[if:name = current()]/ip:ipv4/ip:enabled != 'false'" { error-message "The interface must have IPv4 enabled."; description "The interface must have IPv4 enabled."; reference "RFC 8343: A YANG Data Model for Interface Management"; } description "The interface is to be the source for the TCP connection. It is a reference to an entry in the global interface list."; } leaf description { type string; description "The peer description."; } leaf mesh-group { type string; description "The name of the mesh-group to which this peer belongs."; reference "RFC 3618: Multicast Source Discovery Protocol (MSDP), Section 10.2"; } leaf peer-as { if-feature peer-as-verification; type inet:as-number; description "The peer's ASN. Using peer-as to perform the verification can provide more controlled ability. The value can be compared with the BGP peer's ASN. If they are different, the SA information that comes from this peer may be rejected. If the ASN is the same as the local ASN, then the peer is within the same domain; otherwise, this peer is external to the domain. This is comparable to the definition and usage in BGP; see RFC 4271."; reference "RFC 4271: A Border Gateway Protocol 4 (BGP-4)"; } container sa-filter { description "Specifies an Access Control List (ACL) to filter SA messages coming into or going out of the peer."; leaf in { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "Filters incoming SA messages only. The value is the name to uniquely identify a policy that contains one or more rules used to accept or reject MSDP SA messages. If the policy is not specified, all MSDP SA messages are accepted."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } leaf out { type leafref { path "/acl:acls/acl:acl/acl:name"; } description "Filters outgoing SA messages only. The value is the name to uniquely identify a policy that contains one or more rules used to accept or reject MSDP SA messages. If the policy is not specified, all MSDP SA messages are sent."; reference "RFC 8519: YANG Data Model for Network Access Control Lists (ACLs)"; } } // container sa-filter leaf sa-limit { type uint32; description "A limit on the number of SA entries accepted from this peer. If not configured or the value is 0, there is no limit."; } container timer { description "Timer attributes."; reference "RFC 3618: Multicast Source Discovery Protocol (MSDP), Section 5"; leaf connect-retry-interval { type uint16; units "seconds"; default "30"; description "The peer timer for connect-retry. By default, MSDP peers wait 30 seconds after the session is reset."; } leaf holdtime-interval { type uint16 { range "3..65535"; } units "seconds"; default "75"; description "The SA hold-down period of this MSDP peer."; } leaf keepalive-interval { type uint16 { range "1..65535"; } units "seconds"; must ". < ../holdtime-interval" { error-message "The keepalive interval must be smaller than the hold-time interval."; } default "60"; description "The keepalive timer of this MSDP peer."; } } // container timer leaf ttl-threshold { type uint8 { range "1..255"; } description "The maximum number of hops data packets can traverse before being dropped."; } leaf session-state { type enumeration { enum "disabled" { value 0; description "Disabled."; } enum "inactive" { value 1; description "Inactive."; } enum "listen" { value 2; description "Listen."; } enum "connecting" { value 3; description "Connecting."; } enum "established" { value 4; description "Established."; } } config false; description "The peer's session state."; reference "RFC 3618: Multicast Source Discovery Protocol (MSDP), Section 11"; } leaf elapsed-time { type yang:gauge32; units "seconds"; config false; description "Elapsed time for being in a state."; } leaf connect-retry-expire { type uint32; units "seconds"; config false; description "Connect retry expire time of a peer connection."; } leaf hold-expire { type uint16; units "seconds"; config false; description "Hold expire time of a peer connection."; } leaf is-default-peer { type boolean; config false; description "'true' if this peer is one of the default peers."; } leaf keepalive-expire { type uint16; units "seconds"; config false; description "Keepalive expire time of this peer."; } leaf reset-count { type yang:zero-based-counter32; config false; description "The reset count of this peer."; } container statistics { config false; description "A container defining statistics attributes."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistics counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container error { description "A grouping defining error statistics attributes."; leaf rpf-failure { type uint32; description "The number of RPF failures."; } } // container error container queue { description "A container that includes queue statistics attributes."; leaf size-in { type uint32; description "The number of messages received from the peer currently queued."; } leaf size-out { type uint32; description "The number of messages queued to be sent to the peer."; } } // container queue container received { description "Received message counters."; leaf keepalive { type yang:counter64; description "The number of keepalive messages."; } leaf notification { type yang:counter64; description "The number of notification messages."; } leaf sa-message { type yang:counter64; description "The number of SA messages."; } leaf sa-response { type yang:counter64; description "The number of SA response messages."; } leaf sa-request { type yang:counter64; description "The number of SA request messages."; } leaf total { type yang:counter64; description "The number of total messages."; } } // container received container sent { description "Sent message counters."; leaf keepalive { type yang:counter64; description "The number of keepalive messages."; } leaf notification { type yang:counter64; description "The number of notification messages."; } leaf sa-message { type yang:counter64; description "The number of SA messages."; } leaf sa-response { type yang:counter64; description "The number of SA response messages."; } leaf sa-request { type yang:counter64; description "The number of SA request messages."; } leaf total { type yang:counter64; description "The number of total messages."; } } // container sent } // container statistics } // list peer } // container peers action clear-all-peers { description "All peers' TCP connections are cleared."; } // rpc clear-all-peers container sa-cache { config false; description "The SA cache information."; list entry { key "group source-addr"; description "A list of SA cache entries."; leaf group { type rt-types:ipv4-multicast-group-address; description "The group address of this SA cache."; } leaf source-addr { type rt-types:ipv4-multicast-source-address; description "Source IPv4 address."; } list origin-rp { key "rp-address"; description "Information regarding the originating RP."; leaf rp-address { type inet:ipv4-address; description "The RP address. This is the IP address used in the RP field of an SA message entry."; } leaf is-local-rp { type boolean; description "'true' if the RP is local; 'false' if the RP is not local."; } leaf sa-adv-expire { type uint32; units "seconds"; description "The remaining time duration before expiration of the periodic SA advertisement timer on a local RP."; } } // list origin-rp container state-attributes { description "SA cache state attributes for MSDP."; leaf up-time { type yang:gauge32; units "seconds"; description "Indicates the duration time when this SA entry is created in the cache. MSDP is a periodic protocol; the value can be used to check the state of the SA cache."; } leaf expire { type yang:gauge32; units "seconds"; description "Indicates the duration time when this SA entry in the cache times out. MSDP is a periodic protocol; the value can be used to check the state of the SA cache."; } leaf holddown-interval { type uint32; units "seconds"; description "Hold-down timer value for SA forwarding."; reference "RFC 3618: Multicast Source Discovery Protocol (MSDP), Section 5.3"; } leaf peer-learned-from { type inet:ipv4-address; description "The address of the peer from which we learned this SA information."; } leaf rpf-peer { type inet:ipv4-address; description "The address is the SA's originating RP."; } } // container state-attributes } // list entry action clear { description "Clears MSDP SA cache entries."; input { container entry { presence "If a particular entry is cleared."; description "The SA cache (S,G) or (*,G) entry to be cleared. If this is not provided, all entries are cleared."; leaf group { type rt-types:ipv4-multicast-group-address; mandatory true; description "The group address."; } leaf source-addr { type rt-types:ipv4-multicast-source-address; description "The address of the multicast source to be cleared. If this is not provided, then all entries related to the given group are cleared."; } } // container entry leaf peer-address { type inet:ipv4-address; description "The peer IP address from which MSDP SA cache entries have been learned. If this is not provided, entries learned from all peers are cleared."; } leaf peer-as { type inet:as-number; description "The ASN from which MSDP SA cache entries have been learned. If this is not provided, entries learned from all ASes are cleared."; } } } // rpc clear } // container sa-cache } // container msdp } // list control-plane-protocol container pim { presence "Enables the PIM protocol."; description "PIM configuration data and operational state data."; container graceful-restart { description "Container of graceful restart attributes."; leaf enabled { type boolean; default "false"; description "Enables or disables graceful restart."; } leaf duration { type uint16; units "seconds"; default "60"; description "Maximum time for graceful restart to finish."; } } // container graceful-restart list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container graceful-restart { description "Container of graceful restart attributes."; leaf enabled { type boolean; default "false"; description "Enables or disables graceful restart."; } leaf duration { type uint16; units "seconds"; default "60"; description "Maximum time for graceful restart to finish."; } } // container graceful-restart container statistics { config false; description "A container defining statistics attributes."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of the statistics counters suffered a discontinuity. If no such discontinuities have occurred since the last reinitialization of the local management subsystem, then this node contains the time the local management subsystem reinitialized itself."; } container error { description "Contains error statistics."; leaf assert { type yang:counter64; description "The number of Assert messages, with the message Type of 5 (RFCs 3973 and 7761)."; reference "RFC 3973: Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised) RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 (RFCs 3973 and 7761)."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 (RFCs 3973 and 7761)."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages, with the message Type of 10 (RFC 5015)."; reference "RFC 5015: Bidirectional Protocol Independent Multicast (BIDIR-PIM)"; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 (RFCs 3973 and 7761)."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 (RFCs 3973 and 7761)."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 (RFCs 3973 and 7761)."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 (RFCs 3973 and 7761)."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 (RFCs 3973 and 7761)."; } leaf register-stop { type yang:counter64; description "The number of Register-Stop messages, with the message Type of 2 (RFCs 3973 and 7761)."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 (RFC 3973)."; } leaf checksum { type yang:counter64; description "The number of PIM messages that were passed to PIM and contained checksum errors."; } leaf format { type yang:counter64; description "The number of PIM messages that passed checksum validation but contained format errors, including errors related to PIM Version, Type, and message length."; } } // container error container queue { description "Contains queue statistics."; leaf size { type uint32; description "The size of the input queue."; } leaf overflow { type yang:counter32; description "The number of input queue overflows."; } } // container queue container received { description "Contains statistics of received messages."; leaf assert { type yang:counter64; description "The number of Assert messages, with the message Type of 5 (RFCs 3973 and 7761)."; reference "RFC 3973: Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised) RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 (RFCs 3973 and 7761)."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 (RFCs 3973 and 7761)."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages, with the message Type of 10 (RFC 5015)."; reference "RFC 5015: Bidirectional Protocol Independent Multicast (BIDIR-PIM)"; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 (RFCs 3973 and 7761)."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 (RFCs 3973 and 7761)."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 (RFCs 3973 and 7761)."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 (RFCs 3973 and 7761)."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 (RFCs 3973 and 7761)."; } leaf register-stop { type yang:counter64; description "The number of Register-Stop messages, with the message Type of 2 (RFCs 3973 and 7761)."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 (RFC 3973)."; } } // container received container sent { description "Contains statistics of sent messages."; leaf assert { type yang:counter64; description "The number of Assert messages, with the message Type of 5 (RFCs 3973 and 7761)."; reference "RFC 3973: Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised) RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)"; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 (RFCs 3973 and 7761)."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 (RFCs 3973 and 7761)."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages, with the message Type of 10 (RFC 5015)."; reference "RFC 5015: Bidirectional Protocol Independent Multicast (BIDIR-PIM)"; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 (RFCs 3973 and 7761)."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 (RFCs 3973 and 7761)."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 (RFCs 3973 and 7761)."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 (RFCs 3973 and 7761)."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 (RFCs 3973 and 7761)."; } leaf register-stop { type yang:counter64; description "The number of Register-Stop messages, with the message Type of 2 (RFCs 3973 and 7761)."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 (RFC 3973)."; } } // container sent } // container statistics container topology-tree-info { config false; description "Contains topology tree information."; list ipv4-route { when "../../address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } key "group source-address is-rpt"; description "A list of IPv4 routes."; leaf group { type rt-types:ipv4-multicast-group-address; description "Group address."; } leaf source-address { type rt-types:ipv4-multicast-source-address; description "Source address."; } leaf is-rpt { type boolean; description "'true' if the tree is an RPT (Rendezvous Point Tree)."; } leaf expiration { type rt-types:timer-value-seconds16; description "When the route will expire."; } leaf incoming-interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } leaf is-spt { type boolean; description "'true' if the SPTbit (Shortest Path Tree bit) is set to indicate that forwarding is taking place on the (S,G) SPT."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised), Section 4.1.3"; } leaf mode { type identityref { base pim-mode; } description "PIM mode."; } leaf msdp-learned { type boolean; description "'true' if the route is learned from MSDP (the Multicast Source Discovery Protocol)."; } leaf rp-address { type inet:ip-address; description "RP (Rendezvous Point) address."; } leaf rpf-neighbor { type inet:ip-address; description "RPF (Reverse Path Forwarding) neighbor address."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the route last transitioned into the active state."; } list outgoing-interface { key "name"; description "A list of outgoing interfaces."; leaf name { type if:interface-ref; description "Interface name."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the 'oper-status' setting of the interface was last changed to 'up'."; } leaf jp-state { type enumeration { enum "no-info" { value 0; description "The interface has no (*,G) Join state and no timers running."; } enum "join" { value 1; description "The interface has Join state."; } enum "prune-pending" { value 2; description "The router has received a Prune on this interface from a downstream neighbor and is waiting to see whether the Prune will be overridden by another downstream router. For forwarding purposes, the Prune-Pending state functions exactly like the Join state."; } } description "Join/Prune state."; } } // list outgoing-interface } // list ipv4-route list ipv6-route { when "../../address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } key "group source-address is-rpt"; description "A list of IPv6 routes."; leaf group { type rt-types:ipv6-multicast-group-address; description "Group address."; } leaf source-address { type rt-types:ipv6-multicast-source-address; description "Source address."; } leaf is-rpt { type boolean; description "'true' if the tree is an RPT."; } leaf expiration { type rt-types:timer-value-seconds16; description "When the route will expire."; } leaf incoming-interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } leaf is-spt { type boolean; description "'true' if the SPTbit (Shortest Path Tree bit) is set to indicate that forwarding is taking place on the (S,G) SPT."; reference "RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised), Section 4.1.3"; } leaf mode { type identityref { base pim-mode; } description "PIM mode."; } leaf msdp-learned { type boolean; description "'true' if the route is learned from MSDP (the Multicast Source Discovery Protocol)."; } leaf rp-address { type inet:ip-address; description "RP (Rendezvous Point) address."; } leaf rpf-neighbor { type inet:ip-address; description "RPF (Reverse Path Forwarding) neighbor address."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the route last transitioned into the active state."; } list outgoing-interface { key "name"; description "A list of outgoing interfaces."; leaf name { type if:interface-ref; description "Interface name."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the 'oper-status' setting of the interface was last changed to 'up'."; } leaf jp-state { type enumeration { enum "no-info" { value 0; description "The interface has no (*,G) Join state and no timers running."; } enum "join" { value 1; description "The interface has Join state."; } enum "prune-pending" { value 2; description "The router has received a Prune on this interface from a downstream neighbor and is waiting to see whether the Prune will be overridden by another downstream router. For forwarding purposes, the Prune-Pending state functions exactly like the Join state."; } } description "Join/Prune state."; } } // list outgoing-interface } // list ipv6-route } // container topology-tree-info container rp { description "PIM RP configuration data."; container static-rp { description "Contains static RP attributes."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } key "rp-address"; description "A list of IPv4 RP addresses."; leaf rp-address { type inet:ipv4-address; description "Specifies a static RP address."; } container bidir { presence "Indicate the support of BIDIR mode."; description "PIM BIDIR configuration data."; leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to determine which multicast group addresses are mapped to this statically configured RP address. If a policy is not specified, the entire multicast address space is mapped. The definition of such a policy is outside the scope of this document."; } leaf override { if-feature static-rp-override; type boolean; default "false"; description "When there is a conflict between static RPs and dynamic RPs, setting this attribute to 'true' will ask the system to use static RPs."; } } // container bidir container sm { presence "Indicate the support of sparse mode."; description "PIM SM configuration data."; leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to determine which multicast group addresses are mapped to this statically configured RP address. If a policy is not specified, the entire multicast address space is mapped. The definition of such a policy is outside the scope of this document."; } leaf override { if-feature static-rp-override; type boolean; default "false"; description "When there is a conflict between static RPs and dynamic RPs, setting this attribute to 'true' will ask the system to use static RPs."; } } // container sm } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } key "rp-address"; description "A list of IPv6 RP addresses."; leaf rp-address { type inet:ipv6-address; description "Specifies a static RP address."; } container bidir { presence "Indicate the support of BIDIR mode."; description "PIM BIDIR configuration data."; leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to determine which multicast group addresses are mapped to this statically configured RP address. If a policy is not specified, the entire multicast address space is mapped. The definition of such a policy is outside the scope of this document."; } leaf override { if-feature static-rp-override; type boolean; default "false"; description "When there is a conflict between static RPs and dynamic RPs, setting this attribute to 'true' will ask the system to use static RPs."; } } // container bidir container sm { presence "Indicate the support of sparse mode."; description "PIM SM configuration data."; leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to determine which multicast group addresses are mapped to this statically configured RP address. If a policy is not specified, the entire multicast address space is mapped. The definition of such a policy is outside the scope of this document."; } leaf override { if-feature static-rp-override; type boolean; default "false"; description "When there is a conflict between static RPs and dynamic RPs, setting this attribute to 'true' will ask the system to use static RPs."; } } // container sm } // list ipv6-rp } // container static-rp container bsr { if-feature bsr; description "Contains BSR (Bootstrap Router) attributes."; container bsr-candidate { presence "Present to serve as a BSR candidate."; description "BSR candidate attributes."; choice interface-or-address { description "Use either an interface or an IP address."; case interface { if-feature candidate-interface; leaf interface { type if:interface-ref; mandatory true; description "Interface to be used by a BSR."; } } // case interface case ipv4-address { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } if-feature candidate-ipv4; leaf ipv4-address { type inet:ipv4-address; mandatory true; description "IP address to be used by a BSR."; } } // case ipv4-address case ipv6-address { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } if-feature candidate-ipv6; leaf ipv6-address { type inet:ipv6-address; mandatory true; description "IP address to be used by a BSR."; } } // case ipv6-address } // choice interface-or-address leaf hash-mask-length { type uint8 { range "0..128"; } mandatory true; description "Value contained in BSR messages used by all routers to hash (map) to an RP."; } leaf priority { type uint8 { range "0..255"; } default "64"; description "BSR election priority among different candidate BSRs. A larger value has a higher priority over a smaller value."; } } // container bsr-candidate container rp-candidate { description "Contains RP candidate attributes."; list interface { if-feature candidate-interface; key "name"; description "A list of RP candidates."; leaf name { type if:interface-ref; description "Interface that the RP candidate uses."; } leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to accept or reject certain multicast groups. If a policy is not specified, the entire multicast address space is accepted. The definition of such a policy is outside the scope of this document."; } leaf mode { type identityref { base rp-mode; } description "The mode of an RP, which can be SM (Sparse Mode) or BIDIR (Bidirectional). Each of these modes is defined in a separate YANG module. If a system supports an RP mode, the corresponding YANG module is implemented. When the value of this leaf is not specified, the default value is the supported mode if only one mode is implemented, or the default value is SM if both SM and BIDIR are implemented."; } } // list interface list ipv4-address { when "../../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } if-feature candidate-ipv4; key "address"; description "A list of RP candidate addresses."; leaf address { type inet:ipv4-address; description "IPv4 address that the RP candidate uses."; } leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to accept or reject certain multicast groups. If a policy is not specified, the entire multicast address space is accepted. The definition of such a policy is outside the scope of this document."; } leaf mode { type identityref { base rp-mode; } description "The mode of an RP, which can be SM (Sparse Mode) or BIDIR (Bidirectional). Each of these modes is defined in a separate YANG module. If a system supports an RP mode, the corresponding YANG module is implemented. When the value of this leaf is not specified, the default value is the supported mode if only one mode is implemented, or the default value is SM if both SM and BIDIR are implemented."; } } // list ipv4-address list ipv6-address { when "../../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } if-feature candidate-ipv6; key "address"; description "A list of RP candidate addresses."; leaf address { type inet:ipv6-address; description "IPv6 address that the RP candidate uses."; } leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to accept or reject certain multicast groups. If a policy is not specified, the entire multicast address space is accepted. The definition of such a policy is outside the scope of this document."; } leaf mode { type identityref { base rp-mode; } description "The mode of an RP, which can be SM (Sparse Mode) or BIDIR (Bidirectional). Each of these modes is defined in a separate YANG module. If a system supports an RP mode, the corresponding YANG module is implemented. When the value of this leaf is not specified, the default value is the supported mode if only one mode is implemented, or the default value is SM if both SM and BIDIR are implemented."; } } // list ipv6-address } // container rp-candidate container bsr { config false; description "BSR information."; leaf address { type inet:ip-address; description "BSR address."; } leaf hash-mask-length { type uint8 { range "0..128"; } description "Hash mask length."; } leaf priority { type uint8 { range "0..255"; } description "Priority."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the BSR came up."; } } // container bsr choice election-state { if-feature bsr-election-state; description "BSR election state."; leaf candidate-bsr-state { type enumeration { enum "candidate" { value 0; description "The router is a candidate to be the BSR for the scope zone, but currently another router is the preferred BSR."; } enum "pending" { value 1; description "The router is a candidate to be the BSR for the scope zone. Currently, no other router is the preferred BSR, but this router is not yet the elected BSR. This is a temporary state that prevents rapid thrashing of the choice of BSR during BSR election."; } enum "elected" { value 2; description "The router is the elected BSR for the scope zone, and it must perform all of the BSR functions."; } } description "Candidate-BSR (C-BSR) state."; reference "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol Independent Multicast (PIM), Section 3.1.1"; } leaf non-candidate-bsr-state { type enumeration { enum "no-info" { value 0; description "The router has no information about this scope zone."; } enum "accept-any" { value 1; description "The router does not know of an active BSR and will accept the first Bootstrap message it sees that provides the new BSR's identity and the RP-Set."; } enum "accept" { value 2; description "The router knows the identity of the current BSR and is using the RP-Set provided by that BSR. Only Bootstrap messages from that BSR or from a Candidate-BSR (C-BSR) with higher weight than the current BSR will be accepted."; } } description "Non-Candidate-BSR state."; reference "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol Independent Multicast (PIM), Section 3.1.2"; } } // choice election-state leaf bsr-next-bootstrap { type uint16; units "seconds"; config false; description "The remaining time interval in seconds until the next Bootstrap will be sent."; } container rp { config false; description "State information of the RP."; leaf rp-address { type inet:ip-address; description "RP address."; } leaf policy-name { type string; description "The string value is the name to uniquely identify a policy that contains one or more policy rules used to accept or reject certain multicast groups. If a policy is not specified, the entire multicast address space is accepted. The definition of such a policy is outside the scope of this document."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the RP became actively available."; } } // container rp leaf rp-candidate-next-advertisement { type uint16; units "seconds"; config false; description "The remaining time interval in seconds until the next RP candidate advertisement will be sent."; } } // container bsr container rp-list { config false; description "Contains a list of RPs."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } key "rp-address mode"; description "A list of IPv4 RP addresses."; leaf rp-address { type inet:ipv4-address; description "RP address."; } leaf mode { type identityref { base rp-mode; } description "RP mode."; } leaf info-source-address { type inet:ipv4-address; description "The address where RP information is learned."; } leaf info-source-type { type identityref { base rp-info-source-type; } description "The information source of an RP."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the RP became actively available."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } key "rp-address mode"; description "A list of IPv6 RP addresses."; leaf rp-address { type inet:ipv6-address; description "RP address."; } leaf mode { type identityref { base rp-mode; } description "RP mode."; } leaf info-source-address { type inet:ipv6-address; description "The address where RP information is learned."; } leaf info-source-type { type identityref { base rp-info-source-type; } description "The information source of an RP."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the RP became actively available."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } } // list ipv6-rp } // container rp-list container rp-mappings { config false; description "Contains a list of group-to-RP mappings."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } key "group-range rp-address"; description "A list of group-to-RP mappings."; leaf group-range { type inet:ipv4-prefix; description "Group range presented in the format of a prefix."; } leaf rp-address { type inet:ipv4-address; description "RP address."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the RP mapping or the RP became actively available."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } key "group-range rp-address"; description "A list of IPv6 RP addresses."; leaf group-range { type inet:ipv6-prefix; description "Group range presented in the format of a prefix."; } leaf rp-address { type inet:ipv6-address; description "RP address."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the RP mapping or the RP became actively available."; } leaf expiration { type rt-types:timer-value-seconds16; description "Expiration time."; } } // list ipv6-rp } // container rp-mappings } // container rp container bidir { presence "Present to enable BIDIR mode."; description "PIM BIDIR configuration data."; } // container bidir container sm { description "PIM SM configuration data."; container asm { description "ASM (Any Source Multicast) attributes."; container anycast-rp { presence "Present to enable anycast RP (Rendezvous Point)."; description "Anycast RP attributes."; container ipv4 { when "../../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } description "IPv4 attributes. Only applicable when pim-base:address-family is IPv4."; list ipv4-anycast-rp { key "anycast-address rp-address"; description "A list of anycast RP settings."; leaf anycast-address { type inet:ipv4-address; description "IP address of the anycast RP set. This IP address is used by the multicast groups or sources to join or register."; } leaf rp-address { type inet:ipv4-address; description "IP address of the router configured with anycast RP. This is the IP address where the Register messages are forwarded."; } } // list ipv4-anycast-rp } // container ipv4 container ipv6 { when "../../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } description "IPv6 attributes. Only applicable when pim-base:address-family is IPv6."; list ipv6-anycast-rp { key "anycast-address rp-address"; description "A list of anycast RP settings."; leaf anycast-address { type inet:ipv6-address; description "IP address of the anycast RP set. This IP address is used by the multicast groups or sources to join or register."; } leaf rp-address { type inet:ipv6-address; description "IP address of the router configured with anycast RP. This is the IP address where the Register messages are forwarded."; } } // list ipv6-anycast-rp } // container ipv6 } // container anycast-rp container spt-switch { description "SPT (Shortest Path Tree) switching attributes."; container infinity { if-feature spt-switch-infinity; presence "Present if SPT switchover threshold is set to infinity, according to the policy specified below."; description "The receiver's DR (Designated Router) never triggers the switchover from the RPT to the SPT."; leaf policy-name { if-feature spt-switch-policy; type string; description "Switch policy."; } } // container infinity } // container spt-switch } // container asm container ssm { presence "Present to enable SSM (Source-Specific Multicast)."; description "SSM (Source-Specific Multicast) attributes."; leaf range-policy { type string; description "Policy used to define SSM address range."; } } // container ssm } // container sm container rp { description "PIM RP configuration data."; container static-rp { description "Containing static RP attributes."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } key "ipv4-address"; description "A list of IPv4 RP addresses."; leaf ipv4-address { type inet:ipv4-address; description "Specifies a static RP address."; } } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } key "ipv6-address"; description "A list of IPv6 RP addresses."; leaf ipv6-address { type inet:ipv6-address; description "Specifies a static RP address."; } } // list ipv6-rp } // container static-rp container bsr { if-feature bsr; description "Containing BSR (BootStrap Router) attributes."; container bsr-candidate { presence "Present to serve as a BSR candidate"; description "BSR candidate attributes."; choice interface-or-address { description "Use either interface or ip-address."; case interface { if-feature candidate-interface; leaf interface { type if:interface-ref; mandatory true; description "Interface to be used by BSR."; } } // case interface case ipv4-address { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } if-feature candidate-ipv4; leaf ipv4-address { type inet:ipv4-address; mandatory true; description "IP address to be used by BSR."; } } // case ipv4-address case ipv6-address { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } if-feature candidate-ipv6; leaf ipv6-address { type inet:ipv6-address; mandatory true; description "IP address to be used by BSR."; } } // case ipv6-address } // choice interface-or-address leaf hash-mask-length { type uint8 { range "0..128"; } mandatory true; description "Value contained in BSR messages used by all routers to hash (map) to an RP."; } leaf priority { type uint8 { range "0..255"; } mandatory true; description "BSR election priority among different candidate BSRs. A larger value has a higher priority over a smaller value."; } } // container bsr-candidate list rp-candidate-interface { if-feature candidate-interface; key "interface"; description "A list of RP candidates"; leaf interface { type if:interface-ref; description "Interface that the RP candidate uses."; } leaf policy { type string; description "ACL (Access Control List) policy used to filter group addresses."; } leaf mode { type identityref { base rp-mode; } description "RP mode."; } } // list rp-candidate-interface list rp-candidate-ipv4-address { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } if-feature candidate-ipv4; key "ipv4-address"; description "A list of RP candidates"; leaf ipv4-address { type inet:ipv4-address; description "IPv4 address that the RP candidate uses."; } leaf policy { type string; description "ACL (Access Control List) policy used to filter group addresses."; } leaf mode { type identityref { base rp-mode; } description "RP mode."; } } // list rp-candidate-ipv4-address list rp-candidate-ipv6-address { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } if-feature candidate-ipv6; key "ipv6-address"; description "A list of RP candidates"; leaf ipv6-address { type inet:ipv6-address; description "IPv6 address that the RP candidate uses."; } leaf policy { type string; description "ACL (Access Control List) policy used to filter group addresses."; } leaf mode { type identityref { base rp-mode; } description "RP mode."; } } // list rp-candidate-ipv6-address } // container bsr } // container rp container dm { presence "Present to enable dense-mode."; description "PIM DM configuration data."; } // container dm } // list address-family container interfaces { description "Contains a list of interfaces."; list interface { key "name"; description "List of PIM interfaces."; leaf name { type if:interface-ref; description "Reference to an entry in the global interface list."; } list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container bfd { if-feature bfd; description "BFD (Bidirectional Forwarding Detection) operation."; leaf enabled { type boolean; default "false"; description "Indicates whether BFD is enabled."; } leaf local-multiplier { type multiplier; default "3"; description "Multiplier transmitted by the local system."; } choice interval-config-type { default "tx-rx-intervals"; description "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval of control packets."; } leaf required-min-rx-interval { type uint32; units "microseconds"; default "1000000"; description "Required minimum receive interval of control packets."; } } // case tx-rx-intervals case single-interval { if-feature single-minimum-interval; leaf min-interval { type uint32; units "microseconds"; default "1000000"; description "Desired minimum transmit interval and required minimum receive interval of control packets."; } } // case single-interval } // choice interval-config-type } // container bfd leaf dr-priority { if-feature intf-dr-priority; type uint32; default "1"; description "DR (Designated Router) priority as the preference in the DR election process."; } leaf hello-interval { if-feature intf-hello-interval; type rt-types:timer-value-seconds16; default "30"; description "Periodic interval for Hello messages. If 'infinity' or 'not-set' is used, no periodic Hello messages are sent."; reference "RFC 3973: Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised), Section 4.8 RFC 7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised), Section 4.11"; } choice hello-holdtime-or-multiplier { description "The Holdtime is the timer value to time out the neighbor state when the timer expires. The Holdtime value can be specified by either (1) the given Holdtime value or (2) the calculation of the Hello interval multiplied by the given value of the multiplier."; case holdtime { if-feature intf-hello-holdtime; leaf hello-holdtime { type rt-types:timer-value-seconds16; default "105"; description "The Hello Holdtime is the amount of time to keep the neighbor reachable until a new Hello message is received."; } } // case holdtime case multiplier { if-feature intf-hello-multiplier; leaf hello-multiplier { type rt-types:timer-multiplier; default "3"; description "The Hello multiplier is the number by which the Hello interval is multiplied to obtain the Hello Holdtime. The value of the Hello Holdtime is calculated as: hello-holdtime = (multiplier + 0.5) * (hello-interval)."; } } // case multiplier } // choice hello-holdtime-or-multiplier leaf jp-interval { if-feature intf-jp-interval; type rt-types:timer-value-seconds16; default "60"; description "Periodic interval between Join/Prune messages. If 'infinity' or 'not-set' is used, no periodic Join/Prune messages are sent."; } choice jp-holdtime-or-multiplier { description "The Join/Prune Holdtime is the amount of time a receiver must keep the Join/Prune state alive. The Holdtime value can be specified by either (1) the given Holdtime value or (2) the calculation of 'jp-interval' multiplied by the given value of the multiplier."; case holdtime { if-feature intf-jp-holdtime; leaf jp-holdtime { type rt-types:timer-value-seconds16; default "210"; description "The Join/Prune Holdtime is the amount of time a receiver must keep the Join/Prune state alive."; } } // case holdtime case multiplier { if-feature intf-jp-multiplier; leaf jp-multiplier { type rt-types:timer-multiplier; default "3"; description "The Join/Prune multiplier is the number by which the Join/Prune interval is multiplied to obtain the Join/Prune Holdtime. The value of the Join/Prune Holdtime is calculated as: jp-holdtime = (multiplier + 0.5) * (jp-interval)."; } } // case multiplier } // choice jp-holdtime-or-multiplier leaf override-interval { if-feature intf-override-interval; type uint16; units "milliseconds"; default "2500"; description "A short period after a Join or Prune to allow other routers on the LAN to override the Join or Prune."; } leaf propagation-delay { if-feature intf-propagation-delay; type uint16; units "milliseconds"; default "500"; description "Expected propagation delay over the local link."; } leaf oper-status { type enumeration { enum "up" { value 0; description "The interface is ready to pass PIM messages."; } enum "down" { value 1; description "The interface does not pass PIM messages."; } } config false; description "PIM operational status on the interface. This status is PIM specific and separate from the operational status of the underlying interface."; } leaf gen-id { type uint32; config false; description "The value of the Generation ID this router uses to insert into the PIM Hello message sent on this interface."; } leaf hello-expiration { type rt-types:timer-value-seconds16; config false; description "Hello interval expiration time."; } container ipv4 { when "../address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } config false; description "Interface state attributes for IPv4."; leaf-list address { type inet:ipv4-address; description "List of addresses on which PIM is operating."; } leaf dr-address { type inet:ipv4-address; description "DR (Designated Router) address."; } } // container ipv4 container ipv6 { when "../address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } config false; description "Interface state attributes for IPv6."; leaf-list address { type inet:ipv6-address; description "List of addresses on which PIM is operating."; } leaf dr-address { type inet:ipv6-address; description "DR address."; } } // container ipv6 container neighbors { config false; description "Information learned from neighbors through this interface."; list ipv4-neighbor { when "../../address-family = 'rt:ipv4'" { description "Only applicable to an IPv4 address family."; } key "address"; description "Neighbor state information."; leaf address { type inet:ipv4-address; description "Neighbor address."; } leaf bfd-state { type bfd-types:state; description "BFD (Bidirectional Forwarding Detection) status."; } leaf expiration { type rt-types:timer-value-seconds16; description "Neighbor expiration time."; } leaf dr-priority { type uint32; description "DR (Designated Router) priority as the preference in the DR election process."; } leaf gen-id { type uint32; description "The value of the Generation ID in the last Hello message from the neighbor."; } container lan-prune-delay { description "The information of the LAN Prune Delay option in the Hello message from the neighbor."; leaf present { type boolean; description "'true' if the LAN Prune Delay option is present in the last Hello message from the neighbor."; } leaf override-interval { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type uint16; units "milliseconds"; description "The value of the Override_Interval field of the LAN Prune Delay option in the last Hello message from the neighbor. The neighbor uses this value to indicate a short period after a Join or Prune to allow other routers on the LAN to override the Join or Prune."; } leaf propagation-delay { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type uint16; units "milliseconds"; description "The value of the Propagation_Delay field of the LAN Prune Delay option in the last Hello message from the neighbor. The value is the propagation delay over the local link expected by the neighbor."; } leaf t-bit { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type boolean; description "'true' if the T bit is set in the LAN Prune Delay option in the last Hello message from the neighbor. This flag indicates the neighbor's ability to disable Join message suppression."; } } // container lan-prune-delay leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the neighbor relationship has been formed as reachable without being timed out."; } } // list ipv4-neighbor list ipv6-neighbor { when "../../address-family = 'rt:ipv6'" { description "Only applicable to an IPv6 address family."; } key "address"; description "Neighbor state information."; leaf address { type inet:ipv6-address; description "Neighbor address."; } leaf bfd-state { type bfd-types:state; description "BFD (Bidirectional Forwarding Detection) status."; } leaf expiration { type rt-types:timer-value-seconds16; description "Neighbor expiration time."; } leaf dr-priority { type uint32; description "DR (Designated Router) priority as the preference in the DR election process."; } leaf gen-id { type uint32; description "The value of the Generation ID in the last Hello message from the neighbor."; } container lan-prune-delay { description "The information of the LAN Prune Delay option in the Hello message from the neighbor."; leaf present { type boolean; description "'true' if the LAN Prune Delay option is present in the last Hello message from the neighbor."; } leaf override-interval { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type uint16; units "milliseconds"; description "The value of the Override_Interval field of the LAN Prune Delay option in the last Hello message from the neighbor. The neighbor uses this value to indicate a short period after a Join or Prune to allow other routers on the LAN to override the Join or Prune."; } leaf propagation-delay { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type uint16; units "milliseconds"; description "The value of the Propagation_Delay field of the LAN Prune Delay option in the last Hello message from the neighbor. The value is the propagation delay over the local link expected by the neighbor."; } leaf t-bit { when "../present = 'true'" { description "Available only when 'leaf present' is 'true'."; } type boolean; description "'true' if the T bit is set in the LAN Prune Delay option in the last Hello message from the neighbor. This flag indicates the neighbor's ability to disable Join message suppression."; } } // container lan-prune-delay leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the neighbor relationship has been formed as reachable without being timed out."; } } // list ipv6-neighbor } // container neighbors container bidir { presence "Present to enable BIDIR mode."; description "PIM BIDIR configuration data."; container df-election { if-feature intf-df-election; description "DF election attributes."; leaf offer-multiplier { type uint8; description "This is number of transmission attempts for DF election messages. When a DF election Offer or Winner message fails to be received, the message is retransmitted. The offer-multiplier sets the minimum number of DF election messages that MUST fail to be received for DF election to fail. If a router receives from a neighbor a better offer than its own, the router stops participating in the election for a period of offer-multiplier * offer-interval. Eventually, all routers except the best candidate stop sending Offer messages."; } } // container df-election } // container bidir container sm { presence "Present to enable sparse-mode."; description "PIM SM configuration data."; leaf passive { type empty; description "Specifies that no PIM messages are sent or accepted on this PIM interface, but the interface can be included in a multicast forwarding entry."; } } // container sm container dm { presence "Present to enable dense-mode."; description "PIM DM configuration data."; } // container dm } // list address-family } // list interface } // container interfaces } // container pim container pim { presence "Container for PIM protocol."; description "PIM configuration data."; container graceful-restart { description "Container of graceful restart attributes."; leaf enabled { type boolean; description "Enable or disable graceful restart."; } leaf duration { type uint16; units "seconds"; description "Maximum time for graceful restart to finish."; } } // container graceful-restart list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container graceful-restart { description "Container of graceful restart attributes."; leaf enabled { type boolean; description "Enable or disable graceful restart."; } leaf duration { type uint16; units "seconds"; description "Maximum time for graceful restart to finish."; } } // container graceful-restart } // list address-family container interfaces { description "Containing a list of interfaces."; list interface { key "interface"; description "List of pim interfaces."; leaf interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container bfd { if-feature bfd; description "BFD (Bidirectional Forwarding Detection) operation."; leaf enable { type boolean; description "'true' to suppport BFD for the interface."; } } // container bfd leaf dr-priority { if-feature intf-dr-priority; type uint32; description "DR (Designated Router) priority"; } leaf hello-interval { if-feature intf-hello-interval; type timer-value; description "Hello interval"; } choice hello-holdtime-or-multiplier { description "Use holdtime or multiplier"; case holdtime { if-feature intf-hello-holdtime; leaf hello-holdtime { type timer-value; description "Hello holdtime"; } } // case holdtime case multiplier { if-feature intf-hello-multiplier; leaf hello-multiplier { type rt-types:timer-multiplier; description "Hello multiplier is the number by which the hello interval is multplied to obtain the hold time"; } } // case multiplier } // choice hello-holdtime-or-multiplier leaf jp-interval { if-feature intf-jp-interval; type timer-value; description "Join prune interval"; } choice jp-holdtime-or-multiplier { description "Use holdtime or multiplier"; case holdtime { if-feature intf-jp-holdtime; leaf jp-holdtime { type timer-value; description "Join prune holdtime"; } } // case holdtime case multiplier { if-feature intf-jp-multiplier; leaf jp-multiplier { type rt-types:timer-multiplier; description "Join prune multiplier is the number by which the join prune interval is multplied to obtain the hold time"; } } // case multiplier } // choice jp-holdtime-or-multiplier leaf propagation-delay { if-feature intf-propagation-delay; type uint16; units "milliseconds"; description "Propagation description"; } leaf override-interval { if-feature intf-override-interval; type uint16; units "milliseconds"; description "Override interval"; } } // list address-family } // list interface } // container interfaces } // container pim } // container control-plane-protocols container ribs { description "Support for RIBs."; list rib { key "name"; description "Each entry contains a configuration for a RIB identified by the 'name' key. Entries having the same key as a system-controlled entry in the list '/routing/ribs/rib' are used for configuring parameters of that entry. Other entries define additional user-controlled RIBs."; leaf name { type string; description "The name of the RIB. For system-controlled entries, the value of this leaf must be the same as the name of the corresponding entry in the operational state. For user-controlled entries, an arbitrary name can be used."; } leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } leaf default-rib { if-feature multiple-ribs; type boolean; default "true"; config false; description "This flag has the value of 'true' if and only if the RIB is the default RIB for the given address family. By default, control-plane protocols place their routes in the default RIBs."; } container routes { config false; description "Current contents of the RIB."; list route { description "A RIB route entry. This data node MUST be augmented with information specific to routes of each address family."; leaf route-preference { type route-preference; description "This route attribute, also known as 'administrative distance', allows for selecting the preferred route among routes with the same destination prefix. A smaller value indicates a route that is more preferred."; } container next-hop { description "Route's next-hop attribute."; choice next-hop-options { mandatory true; description "Options for next hops. It is expected that further cases will be added through augments from other modules, e.g., for recursive next hops."; case simple-next-hop { description "This case represents a simple next hop consisting of the next-hop address and/or outgoing interface. Modules for address families MUST augment this case with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } } // case simple-next-hop leaf special-next-hop { type enumeration { enum "blackhole" { value 0; description "Silently discard the packet."; } enum "unreachable" { value 1; description "Discard the packet and notify the sender with an error message indicating that the destination host is unreachable."; } enum "prohibit" { value 2; description "Discard the packet and notify the sender with an error message indicating that the communication is administratively prohibited."; } enum "receive" { value 3; description "The packet will be received by the local system."; } } description "Options for special next hops."; } container next-hop-list { description "Container for multiple next hops."; list next-hop { description "An entry in a next-hop list. Modules for address families MUST augment this list with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop leaf source-protocol { type identityref { base routing-protocol; } mandatory true; description "Type of the routing protocol from which the route originated."; } leaf active { type empty; description "The presence of this leaf indicates that the route is preferred among all routes in the same RIB that have the same destination prefix."; } leaf last-updated { type yang:date-and-time; description "Timestamp of the last modification of the route. If the route was never modified, it is the time when the route was inserted into the RIB."; } leaf metric { type uint32; description "OSPF route metric."; } leaf tag { type uint32; default "0"; description "OSPF route tag."; } leaf route-type { type route-type; description "OSPF route type."; } } // list route } // container routes action active-route { description "Return the active RIB route that is used for the destination address. Address-family-specific modules MUST augment input parameters with a leaf named 'destination-address'."; output { container route { description "The active RIB route for the specified destination. If no route exists in the RIB for the destination address, no output is returned. Address-family-specific modules MUST augment this container with appropriate route contents."; container next-hop { description "Route's next-hop attribute."; choice next-hop-options { mandatory true; description "Options for next hops. It is expected that further cases will be added through augments from other modules, e.g., for recursive next hops."; case simple-next-hop { description "This case represents a simple next hop consisting of the next-hop address and/or outgoing interface. Modules for address families MUST augment this case with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } } // case simple-next-hop leaf special-next-hop { type enumeration { enum "blackhole" { value 0; description "Silently discard the packet."; } enum "unreachable" { value 1; description "Discard the packet and notify the sender with an error message indicating that the destination host is unreachable."; } enum "prohibit" { value 2; description "Discard the packet and notify the sender with an error message indicating that the communication is administratively prohibited."; } enum "receive" { value 3; description "The packet will be received by the local system."; } } description "Options for special next hops."; } container next-hop-list { description "Container for multiple next hops."; list next-hop { description "An entry in a next-hop list. Modules for address families MUST augment this list with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop leaf source-protocol { type identityref { base routing-protocol; } mandatory true; description "Type of the routing protocol from which the route originated."; } leaf active { type empty; description "The presence of this leaf indicates that the route is preferred among all routes in the same RIB that have the same destination prefix."; } leaf last-updated { type yang:date-and-time; description "Timestamp of the last modification of the route. If the route was never modified, it is the time when the route was inserted into the RIB."; } } // container route } } // rpc active-route leaf description { type string; description "Textual description of the RIB."; } } // list rib } // container ribs container segment-routing { description "Segment Routing configuration. This container is to be augmented by models for different SR data planes."; reference "RFC 8402: Segment Routing Architecture."; container sr-mpls { description "Segment Routing global configuration and operational state."; container bindings { description "List of bindings."; container mapping-server { if-feature mapping-server; description "Configuration of mapping-server local entries."; list policy { key "name"; description "List mapping-server policies."; leaf name { type string; description "Name of the mapping policy."; } container entries { description "IPv4/IPv6 mapping entries."; list mapping-entry { key "prefix algorithm"; description "Mapping entries."; leaf prefix { type inet:ip-prefix; description "Connected Prefix-SID."; } leaf value-type { type enumeration { enum "index" { value 0; description "The value will be interpreted as an index."; } enum "absolute" { value 1; description "The value will become interpreted as an absolute value."; } } default "index"; description "This leaf defines how the value must be interpreted."; } leaf start-sid { type uint32; mandatory true; description "Value associated with prefix. The value must be interpreted in the context of sid-value-type."; } leaf range { type uint32; description "Indicates how many SIDs can be allocated."; } leaf algorithm { type identityref { base prefix-sid-algorithm; } description "Prefix-SID algorithm."; } } // list mapping-entry } // container entries } // list policy } // container mapping-server container connected-prefix-sid-map { description "Prefix-SID configuration."; list connected-prefix-sid { key "prefix algorithm"; description "List of mappings of Prefix-SIDs to IPv4/IPv6 local prefixes."; leaf prefix { type inet:ip-prefix; description "Connected Prefix-SID."; } leaf value-type { type enumeration { enum "index" { value 0; description "The value will be interpreted as an index."; } enum "absolute" { value 1; description "The value will become interpreted as an absolute value."; } } default "index"; description "This leaf defines how the value must be interpreted."; } leaf start-sid { type uint32; mandatory true; description "Value associated with prefix. The value must be interpreted in the context of sid-value-type."; } leaf range { type uint32; description "Indicates how many SIDs can be allocated."; } leaf algorithm { type identityref { base prefix-sid-algorithm; } description "Prefix-SID algorithm."; } leaf last-hop-behavior { if-feature sid-last-hop-behavior; type enumeration { enum "explicit-null" { value 0; description "Use explicit-null for the SID."; } enum "no-php" { value 1; description "Do not use MPLS Penultimate Hop Popping (PHP) for the SID."; } enum "php" { value 2; description "Use MPLS PHP for the SID."; } } description "Configure last-hop behavior."; } } // list connected-prefix-sid } // container connected-prefix-sid-map container local-prefix-sid { description "Local SID configuration."; list local-prefix-sid { key "prefix algorithm"; description "List of local IPv4/IPv6 Prefix-SIDs."; leaf prefix { type inet:ip-prefix; description "Connected Prefix-SID."; } leaf value-type { type enumeration { enum "index" { value 0; description "The value will be interpreted as an index."; } enum "absolute" { value 1; description "The value will become interpreted as an absolute value."; } } default "index"; description "This leaf defines how the value must be interpreted."; } leaf start-sid { type uint32; mandatory true; description "Value associated with prefix. The value must be interpreted in the context of sid-value-type."; } leaf range { type uint32; description "Indicates how many SIDs can be allocated."; } leaf algorithm { type identityref { base prefix-sid-algorithm; } description "Prefix-SID algorithm."; } } // list local-prefix-sid } // container local-prefix-sid } // container bindings container srgb { description "Global SRGB configuration."; list srgb { key "lower-bound upper-bound"; ordered-by user; description "List of global blocks to be advertised."; leaf lower-bound { type uint32; description "Lower value in the label range."; } leaf upper-bound { type uint32; must "../lower-bound < ../upper-bound" { error-message "The upper-bound must be greater than the lower-bound."; description "The value must be greater than lower-bound."; } description "Upper value in the label range."; } } // list srgb } // container srgb container srlb { description "Segment Routing Local Block (SRLB) configuration."; list srlb { key "lower-bound upper-bound"; ordered-by user; description "List of SRLBs."; leaf lower-bound { type uint32; description "Lower value in the label range."; } leaf upper-bound { type uint32; must "../lower-bound < ../upper-bound" { error-message "The upper-bound must be greater than the lower-bound."; description "The value must be greater than lower-bound."; } description "Upper value in the label range."; } } // list srlb } // container srlb list label-blocks { config false; description "List of label blocks currently in use."; leaf lower-bound { type uint32; description "Lower bound of the label block."; } leaf upper-bound { type uint32; description "Upper bound of the label block."; } leaf size { type uint32; description "Number of indexes in the block."; } leaf free { type uint32; description "Number of free indexes in the block."; } leaf used { type uint32; description "Number of indexes in use in the block."; } leaf scope { type enumeration { enum "global" { value 0; description "Global SID."; } enum "local" { value 1; description "Local SID."; } } description "Scope of this label block."; } } // list label-blocks container sid-db { config false; description "List of prefix and SID associations."; list sid { key "target sid source source-protocol binding-type"; description "SID binding."; leaf target { type string; description "Defines the target of the binding. It can be a prefix or something else."; } leaf sid { type uint32; description "Index associated with the prefix."; } leaf algorithm { type uint8; description "Algorithm to be used for the Prefix-SID."; reference "RFC 8665: OSPF Extensions for Segment Routing RFC 8667: IS-IS Extensions for Segment Routing RFC 8669: Segment Routing Prefix Segment Identifier Extensions to BGP"; } leaf source { type inet:ip-address; description "IP address of the router that owns the binding."; } leaf used { type boolean; description "Indicates if the binding is installed in the forwarding plane."; } leaf source-protocol { type leafref { path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/rt:name"; } description "Routing protocol that owns the binding."; } leaf binding-type { type enumeration { enum "prefix-sid" { value 0; description "Binding is learned from a Prefix-SID."; } enum "binding-tlv" { value 1; description "Binding is learned from a binding TLV."; } } description "Type of binding."; } leaf scope { type enumeration { enum "global" { value 0; description "Global SID."; } enum "local" { value 1; description "Local SID."; } } description "SID scoping."; } } // list sid } // container sid-db } // container sr-mpls } // container segment-routing } // container routing container routing-state { config false; status obsolete; description "State data of the routing subsystem."; leaf router-id { type yang:dotted-quad; description "A 32-bit number in the form of a dotted quad that is used by some routing protocols identifying a router."; reference "RFC 2328: OSPF Version 2"; } container interfaces { status obsolete; description "Network-layer interfaces used for routing."; leaf-list interface { type if:interface-state-ref; status obsolete; description "Each entry is a reference to the name of a configured network-layer interface."; } } // container interfaces container control-plane-protocols { status obsolete; description "Container for the list of routing protocol instances."; list control-plane-protocol { key "type name"; status obsolete; description "State data of a control-plane protocol instance. An implementation MUST provide exactly one system-controlled instance of the 'direct' pseudo-protocol. Instances of other control-plane protocols MAY be created by configuration."; leaf type { type identityref { base control-plane-protocol; } status obsolete; description "Type of the control-plane protocol."; } leaf name { type string; status obsolete; description "The name of the control-plane protocol instance. For system-controlled instances, this name is persistent, i.e., it SHOULD NOT change across reboots."; } } // list control-plane-protocol container pim { description "PIM state data."; list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container statistics { description "A container defining statistics attributes."; leaf discontinuity-time { type yang:date-and-time; description "The time on the most recent occasion at which any one or more of the statistic counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container error { description "Containing error statistics."; leaf assert { type yang:counter64; description "The number of assert messages."; } leaf bsr { type yang:counter64; description "The number of BSR (Bootstrap Router) messages."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate-RP-advertisement messages."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages."; } leaf hello { type yang:counter64; description "The number of hello messages."; } leaf join-prune { type yang:counter64; description "The number of join/prune messages."; } leaf register { type yang:counter64; description "The number of register messages."; } leaf register-stop { type yang:counter64; description "The number of register stop messages."; } leaf state-refresh { type yang:counter64; description "The number of state refresh messages."; } } // container error container queue { description "Containing queue statistics."; leaf size { type uint32; description "The size of the input queue."; } leaf overflow { type yang:counter32; description "The number of the input queue overflows."; } } // container queue container received { description "Containing statistics of received messages."; leaf assert { type yang:counter64; description "The number of assert messages."; } leaf bsr { type yang:counter64; description "The number of BSR (Bootstrap Router) messages."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate-RP-advertisement messages."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages."; } leaf hello { type yang:counter64; description "The number of hello messages."; } leaf join-prune { type yang:counter64; description "The number of join/prune messages."; } leaf register { type yang:counter64; description "The number of register messages."; } leaf register-stop { type yang:counter64; description "The number of register stop messages."; } leaf state-refresh { type yang:counter64; description "The number of state refresh messages."; } } // container received container sent { description "Containing statistics of sent messages."; leaf assert { type yang:counter64; description "The number of assert messages."; } leaf bsr { type yang:counter64; description "The number of BSR (Bootstrap Router) messages."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate-RP-advertisement messages."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) election messages."; } leaf hello { type yang:counter64; description "The number of hello messages."; } leaf join-prune { type yang:counter64; description "The number of join/prune messages."; } leaf register { type yang:counter64; description "The number of register messages."; } leaf register-stop { type yang:counter64; description "The number of register stop messages."; } leaf state-refresh { type yang:counter64; description "The number of state refresh messages."; } } // container sent } // container statistics container topology-tree-info { description "Containing topology tree information."; list ipv4-route { when "../../../address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } key "group source-address is-rpt"; description "A list of IPv4 routes."; leaf group { type rt-types:ipv4-multicast-group-address; description "Group address."; } leaf source-address { type rt-types:ipv4-multicast-source-address; description "Source address."; } leaf is-rpt { type boolean; description "'true' if the tree is RPT (Rendezvous-Point Tree)."; } leaf expiration { type timer-value; description "When the route will expire."; } leaf incoming-interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } leaf mode { type pim-mode; description "PIM mode."; } leaf msdp-learned { type boolean; description "'true' if route is learned from MSDP (Multicast Source Discovery Protocol)."; } leaf rp-address { type inet:ip-address; description "RP (Rendezvous Point) address."; } leaf rpf-neighbor { type inet:ip-address; description "RPF (Reverse Path Forwarding) neighbor address."; } leaf spt-bit { type boolean; description "'true' if SPT (Shortest Path Tree) bit is set."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } list outgoing-interface { key "name"; description "A list of outgoing interfaces."; leaf name { type if:interface-ref; description "Interface name."; } leaf expiration { type timer-value; description "Expiring information."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } leaf jp-state { type enumeration { enum "no-info" { value 0; description "The interface has Join state and no timers running"; } enum "join" { value 1; description "The interface has Join state."; } enum "prune-pending" { value 2; description "The router has received a Prune on this interface from a downstream neighbor and is waiting to see whether the prune will be overridden by another downstream router. For forwarding purposes, the Prune-Pending state functions exactly like the Join state."; } } description "Join-prune state."; } } // list outgoing-interface } // list ipv4-route list ipv6-route { when "../../../address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } key "group source-address is-rpt"; description "A list of IPv6 routes."; leaf group { type rt-types:ipv6-multicast-group-address; description "Group address."; } leaf source-address { type rt-types:ipv6-multicast-source-address; description "Source address."; } leaf is-rpt { type boolean; description "'true' if the tree is RPT (Rendezvous-Point Tree)."; } leaf expiration { type timer-value; description "When the route will expire."; } leaf incoming-interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } leaf mode { type pim-mode; description "PIM mode."; } leaf msdp-learned { type boolean; description "'true' if route is learned from MSDP (Multicast Source Discovery Protocol)."; } leaf rp-address { type inet:ip-address; description "RP (Rendezvous Point) address."; } leaf rpf-neighbor { type inet:ip-address; description "RPF (Reverse Path Forwarding) neighbor address."; } leaf spt-bit { type boolean; description "'true' if SPT (Shortest Path Tree) bit is set."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } list outgoing-interface { key "name"; description "A list of outgoing interfaces."; leaf name { type if:interface-ref; description "Interface name."; } leaf expiration { type timer-value; description "Expiring information."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } leaf jp-state { type enumeration { enum "no-info" { value 0; description "The interface has Join state and no timers running"; } enum "join" { value 1; description "The interface has Join state."; } enum "prune-pending" { value 2; description "The router has received a Prune on this interface from a downstream neighbor and is waiting to see whether the prune will be overridden by another downstream router. For forwarding purposes, the Prune-Pending state functions exactly like the Join state."; } } description "Join-prune state."; } } // list outgoing-interface } // list ipv6-route } // container topology-tree-info container dm { presence "Present to enable dense-mode."; description "PIM DM state data."; } // container dm } // list address-family container interfaces { description "Containing a list of interfaces."; list interface { key "interface"; description "List of pim interfaces."; leaf interface { type if:interface-ref; description "Reference to an entry in the global interface list."; } list address-family { key "address-family"; description "Each list entry for one address family."; leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } container bfd { if-feature bfd; description "BFD (Bidirectional Forwarding Detection) operation."; leaf enable { type boolean; description "'true' to suppport BFD for the interface."; } } // container bfd leaf dr-priority { if-feature intf-dr-priority; type uint32; description "DR (Designated Router) priority"; } leaf hello-interval { if-feature intf-hello-interval; type timer-value; description "Hello interval"; } choice hello-holdtime-or-multiplier { description "Use holdtime or multiplier"; case holdtime { if-feature intf-hello-holdtime; leaf hello-holdtime { type timer-value; description "Hello holdtime"; } } // case holdtime case multiplier { if-feature intf-hello-multiplier; leaf hello-multiplier { type rt-types:timer-multiplier; description "Hello multiplier is the number by which the hello interval is multplied to obtain the hold time"; } } // case multiplier } // choice hello-holdtime-or-multiplier leaf jp-interval { if-feature intf-jp-interval; type timer-value; description "Join prune interval"; } choice jp-holdtime-or-multiplier { description "Use holdtime or multiplier"; case holdtime { if-feature intf-jp-holdtime; leaf jp-holdtime { type timer-value; description "Join prune holdtime"; } } // case holdtime case multiplier { if-feature intf-jp-multiplier; leaf jp-multiplier { type rt-types:timer-multiplier; description "Join prune multiplier is the number by which the join prune interval is multplied to obtain the hold time"; } } // case multiplier } // choice jp-holdtime-or-multiplier leaf propagation-delay { if-feature intf-propagation-delay; type uint16; units "milliseconds"; description "Propagation description"; } leaf override-interval { if-feature intf-override-interval; type uint16; units "milliseconds"; description "Override interval"; } container ipv4 { when "../address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } description "Interface state attributes for IPv4."; leaf-list address { type inet:ipv4-address; description "List of addresses."; } leaf dr-address { type inet:ipv4-address; description "DR (Designated Router) address."; } } // container ipv4 container ipv6 { when "../address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } description "Interface state attributes for IPv6."; leaf-list address { type inet:ipv6-address; description "List of addresses."; } leaf dr-address { type inet:ipv6-address; description "DR (Designated Router) address."; } } // container ipv6 leaf oper-status { type enumeration { enum "up" { value 0; description "Ready to pass packets."; } enum "down" { value 1; description "The interface does not pass any packets."; } } description "Operational status."; } leaf hello-expiration { type timer-value; description "Hello interval expiration time."; } list neighbor-ipv4 { when "../address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } key "address"; description "Neighbor state information."; leaf address { type inet:ipv4-address; description "Neighbor address."; } leaf bfd-status { type enumeration { enum "up" { value 0; description "BFD (Bidirectional Forwarding Detection) is up."; } enum "down" { value 1; description "BFD (Bidirectional Forwarding Detection) is down."; } } description "BFD (Bidirectional Forwarding Detection) status."; } leaf expiration { type timer-value; description "Neighbor expiring information."; } leaf dr-priority { type uint32; description "DR (Designated Router) priority"; } leaf gen-id { type uint32; description "Generation ID."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } } // list neighbor-ipv4 list neighbor-ipv6 { when "../address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } key "address"; description "Neighbor state information."; leaf address { type inet:ipv6-address; description "Neighbor address."; } leaf bfd-status { type enumeration { enum "up" { value 0; description "BFD (Bidirectional Forwarding Detection) is up."; } enum "down" { value 1; description "BFD (Bidirectional Forwarding Detection) is down."; } } description "BFD (Bidirectional Forwarding Detection) status."; } leaf expiration { type timer-value; description "Neighbor expiring information."; } leaf dr-priority { type uint32; description "DR (Designated Router) priority"; } leaf gen-id { type uint32; description "Generation ID."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } } // list neighbor-ipv6 container dm { presence "Present to enable dense-mode."; description "PIM DM state data."; } // container dm } // list address-family } // list interface } // container interfaces } // container pim } // container control-plane-protocols container ribs { status obsolete; description "Container for RIBs."; list rib { key "name"; min-elements 1; status obsolete; description "Each entry represents a RIB identified by the 'name' key. All routes in a RIB MUST belong to the same address family. An implementation SHOULD provide one system-controlled default RIB for each supported address family."; leaf name { type string; status obsolete; description "The name of the RIB."; } leaf address-family { type identityref { base address-family; } mandatory true; description "Address family."; } leaf default-rib { if-feature multiple-ribs; type boolean; default "true"; status obsolete; description "This flag has the value of 'true' if and only if the RIB is the default RIB for the given address family. By default, control-plane protocols place their routes in the default RIBs."; } container routes { status obsolete; description "Current contents of the RIB."; list route { status obsolete; description "A RIB route entry. This data node MUST be augmented with information specific to routes of each address family."; leaf route-preference { type route-preference; status obsolete; description "This route attribute, also known as 'administrative distance', allows for selecting the preferred route among routes with the same destination prefix. A smaller value indicates a route that is more preferred."; } container next-hop { status obsolete; description "Route's next-hop attribute."; choice next-hop-options { mandatory true; description "Options for next hops. It is expected that further cases will be added through augments from other modules, e.g., for recursive next hops."; case simple-next-hop { description "This case represents a simple next hop consisting of the next-hop address and/or outgoing interface. Modules for address families MUST augment this case with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // case simple-next-hop leaf special-next-hop { type enumeration { enum "blackhole" { value 0; description "Silently discard the packet."; } enum "unreachable" { value 1; description "Discard the packet and notify the sender with an error message indicating that the destination host is unreachable."; } enum "prohibit" { value 2; description "Discard the packet and notify the sender with an error message indicating that the communication is administratively prohibited."; } enum "receive" { value 3; description "The packet will be received by the local system."; } } description "Options for special next hops."; } container next-hop-list { description "Container for multiple next hops."; list next-hop { description "An entry in a next-hop list. Modules for address families MUST augment this list with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop leaf source-protocol { type identityref { base routing-protocol; } mandatory true; description "Type of the routing protocol from which the route originated."; } leaf active { type empty; description "The presence of this leaf indicates that the route is preferred among all routes in the same RIB that have the same destination prefix."; } leaf last-updated { type yang:date-and-time; description "Timestamp of the last modification of the route. If the route was never modified, it is the time when the route was inserted into the RIB."; } leaf metric { type uint32; description "This leaf describes isis metric of a route."; } leaf-list tag { type uint32; description "This leaf describes list of tags associated with the route."; } leaf route-type { type enumeration { enum "l2-up-internal" { value 0; description "Level 2 internal route and not leaked to a lower level"; } enum "l1-up-internal" { value 1; description "Level 1 internal route and not leaked to a lower level"; } enum "l2-up-external" { value 2; description "Level 2 external route and not leaked to a lower level"; } enum "l1-up-external" { value 3; description "Level 1 external route and not leaked to a lower level"; } enum "l2-down-internal" { value 4; description "Level 2 internal route and leaked to a lower level"; } enum "l1-down-internal" { value 5; description "Level 1 internal route and leaked to a lower level"; } enum "l2-down-external" { value 6; description "Level 2 external route and leaked to a lower level"; } enum "l1-down-external" { value 7; description "Level 1 external route and leaked to a lower level"; } } description "This leaf describes the type of isis route."; } leaf destination-prefix { type inet:ipv6-prefix; description "IPv6 destination prefix."; } } // list route } // container routes action active-route { status obsolete; description "Return the active RIB route that is used for the destination address. Address-family-specific modules MUST augment input parameters with a leaf named 'destination-address'."; output { container route { status obsolete; description "The active RIB route for the specified destination. If no route exists in the RIB for the destination address, no output is returned. Address-family-specific modules MUST augment this container with appropriate route contents."; container next-hop { status obsolete; description "Route's next-hop attribute."; choice next-hop-options { mandatory true; description "Options for next hops. It is expected that further cases will be added through augments from other modules, e.g., for recursive next hops."; case simple-next-hop { description "This case represents a simple next hop consisting of the next-hop address and/or outgoing interface. Modules for address families MUST augment this case with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // case simple-next-hop leaf special-next-hop { type enumeration { enum "blackhole" { value 0; description "Silently discard the packet."; } enum "unreachable" { value 1; description "Discard the packet and notify the sender with an error message indicating that the destination host is unreachable."; } enum "prohibit" { value 2; description "Discard the packet and notify the sender with an error message indicating that the communication is administratively prohibited."; } enum "receive" { value 3; description "The packet will be received by the local system."; } } description "Options for special next hops."; } container next-hop-list { description "Container for multiple next hops."; list next-hop { description "An entry in a next-hop list. Modules for address families MUST augment this list with a leaf containing a next-hop address of that address family."; leaf outgoing-interface { type if:interface-ref; description "Name of the outgoing interface."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop leaf source-protocol { type identityref { base routing-protocol; } mandatory true; description "Type of the routing protocol from which the route originated."; } leaf active { type empty; description "The presence of this leaf indicates that the route is preferred among all routes in the same RIB that have the same destination prefix."; } leaf last-updated { type yang:date-and-time; description "Timestamp of the last modification of the route. If the route was never modified, it is the time when the route was inserted into the RIB."; } leaf destination-prefix { type inet:ipv6-prefix; description "IPv6 destination prefix."; } } // container route } input { leaf destination-address { type inet:ipv6-address; description "IPv6 destination address."; } } } // rpc active-route } // list rib } // container ribs } // container routing-state } // module ietf-routing
© 2023 YumaWorks, Inc. All rights reserved.