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 "Support for 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 "Next hop for the route."; 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 ipv4 { description "Support for 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:ipv4-prefix; mandatory true; description "IPv4 destination prefix."; } leaf description { type string; description "Textual description of the route."; } container next-hop { description "Support for 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:ipv4-address; description "IPv4 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:ipv4-address; description "IPv4 address of the next hop."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop } // list route } // container ipv4 container ipv4 { 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:ipv4-prefix; mandatory true; description "IPv4 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:ipv4-address; description "IPv4 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:ipv4-address; description "IPv4 address of the next hop."; } } // list next-hop } // container next-hop-list } // choice next-hop-options } // container next-hop } // list route } // container ipv4 } // container static-routes 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 lag { description "BFD-over-LAG top-level container."; container micro-bfd-ipv4-session-statistics { description "Micro-BFD IPv4 session counters."; 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 micro-bfd-ipv4-session-statistics container micro-bfd-ipv6-session-statistics { description "Micro-BFD IPv6 session counters."; 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 micro-bfd-ipv6-session-statistics container sessions { description "BFD-over-LAG sessions."; list session { key "lag-name"; description "List of BFD-over-LAG sessions."; leaf lag-name { type if:interface-ref; description "Name of the LAG."; } leaf ipv4-dest-addr { type inet:ipv4-address; description "IPv4 address of the peer, for IPv4 micro-BFD."; } leaf ipv6-dest-addr { type inet:ipv6-address; description "IPv6 address of the peer, for IPv6 micro-BFD."; } 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 use-ipv4 { type boolean; description "Using IPv4 micro-BFD."; } leaf use-ipv6 { type boolean; description "Using IPv6 micro-BFD."; } list member-links { key "member-link"; config false; description "Micro-BFD over a LAG. This represents one member link."; leaf member-link { type if:interface-ref; description "Member link on which micro-BFD is running."; } container micro-bfd-ipv4 { when "../../use-ipv4 = 'true'" { description "Needed only if IPv4 is used."; } description "Micro-BFD IPv4 session state on a member link."; 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 } // container micro-bfd-ipv4 container micro-bfd-ipv6 { when "../../use-ipv6 = 'true'" { description "Needed only if IPv6 is used."; } description "Micro-BFD IPv6 session state on a member link."; 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 } // container micro-bfd-ipv6 } // list member-links } // list session } // container sessions } // container lag container mpls { description "BFD MPLS 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 egress { description "Egress configuration."; 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 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 egress container session-groups { description "BFD-over-MPLS session groups."; list session-group { key "mpls-fec"; description "Group of BFD MPLS sessions (for ECMP). A group of sessions is for one FEC. Each session has a different field in the UDP/IP header for ECMP."; leaf mpls-fec { type inet:ip-prefix; description "MPLS FEC."; } 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 list sessions { config false; description "The BFD sessions for an MPLS FEC. The local discriminator is unique for each session in the group."; 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 mpls-dest-address { type inet:ip-address; config false; description "Destination address as per RFC 5884. Needed if IP encapsulation is used."; } } // list sessions } // list session-group } // container session-groups } // container mpls 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 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 bfd 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 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 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 bfd } // list control-plane-protocol container pim { presence "Enables the PIM protocol."; description "PIM configuration and operational data."; container graceful-restart { description "Container of graceful restart attributes."; leaf enabled { type boolean; default "false"; description "Enable or disable 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 "Enable or disable 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 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, with the message Type of 5 in RFC3973 and RFC7761."; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 in RFC3973 and RFC7761."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 in RFC3973 and RFC7761."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) Election messages, with the message Type of 10 in RFC5015."; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 in RFC3973 and RFC7761."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 in RFC3973 and RFC7761."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 in RFC3973 and RFC7761."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 in RFC3973 and RFC7761."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 in RFC3973 and RFC7761."; } leaf register-stop { type yang:counter64; description "The number of Register Stop messages, with the message Type of 2 in RFC3973 and RFC7761."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 in RFC3973."; } 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 the errors such as PIM Version, Type, and message length."; } } // 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, with the message Type of 5 in RFC3973 and RFC7761."; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 in RFC3973 and RFC7761."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 in RFC3973 and RFC7761."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) Election messages, with the message Type of 10 in RFC5015."; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 in RFC3973 and RFC7761."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 in RFC3973 and RFC7761."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 in RFC3973 and RFC7761."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 in RFC3973 and RFC7761."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 in RFC3973 and RFC7761."; } leaf register-stop { type yang:counter64; description "The number of Register Stop messages, with the message Type of 2 in RFC3973 and RFC7761."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 in RFC3973."; } } // container received container sent { description "Containing statistics of sent messages."; leaf assert { type yang:counter64; description "The number of Assert messages, with the message Type of 5 in RFC3973 and RFC7761."; } leaf bsr { type yang:counter64; description "The number of Bootstrap messages, with the message Type of 4 in RFC3973 and RFC7761."; } leaf candidate-rp-advertisement { type yang:counter64; description "The number of Candidate RP Advertisement messages, with the message Type of 8 in RFC3973 and RFC7761."; } leaf df-election { type yang:counter64; description "The number of DF (Designated Forwarder) Election messages, with the message Type of 10 in RFC5015."; } leaf graft { type yang:counter64; description "The number of Graft messages, with the message Type of 6 in RFC3973 and RFC7761."; } leaf graft-ack { type yang:counter64; description "The number of Graft-Ack messages, with the message Type of 7 in RFC3973 and RFC7761."; } leaf hello { type yang:counter64; description "The number of Hello messages, with the message Type of 0 in RFC3973 and RFC7761."; } leaf join-prune { type yang:counter64; description "The number of Join/Prune messages, with the message Type of 3 in RFC3973 and RFC7761."; } leaf register { type yang:counter64; description "The number of Register messages, with the message Type of 1 in RFC3973 and RFC7761."; } leaf register-stop { type yang:counter64; description "The number of Register Stop messages, with the message Type of 2 in RFC3973 and RFC7761."; } leaf state-refresh { type yang:counter64; description "The number of State Refresh messages, with the message Type of 9 in RFC3973."; } } // container sent } // container statistics container topology-tree-info { config false; 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 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 SPT (Shortest Path Tree) bit is set to indicate forwarding is taking place on the (S,G) Shortest Path Tree (SPT)."; reference "RFC7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised). Sec. 4.1.3."; } leaf mode { type identityref { base 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 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 "Expiring time."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the oper-status 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 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 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 SPT (Shortest Path Tree) bit is set to indicate forwarding is taking place on the (S,G) Shortest Path Tree (SPT)."; reference "RFC7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised). Sec. 4.1.3."; } leaf mode { type identityref { base 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 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 "Expiring time."; } leaf up-time { type rt-types:timeticks64; description "The number of time ticks (hundredths of a second) since the oper-status 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 "Containing static RP attributes."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // container sm } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // container sm } // 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"; } 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 "Containing 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 (bi-directional), each of them is defined in a saparate YNAG 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 (Sparce Mode) if both SM and BIDIR are implemented."; } } // list interface list ipv4-address { when "../../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to 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 (bi-directional), each of them is defined in a saparate YNAG 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 (Sparce Mode) if both SM and BIDIR are implemented."; } } // list ipv4-address list ipv6-address { when "../../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to 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 (bi-directional), each of them is defined in a saparate YNAG 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 (Sparce Mode) 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 became 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 the BSR functions."; } } description "Candidate-BSR state."; reference "RFC5059, 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 as giving 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 "RFC5059, 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 "Containing a list of RPs."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to 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 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 "Containing a list of group-to-RP mappings."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to 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 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 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 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 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 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 } // list address-family container interfaces { description "Containing 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 "RFC3973: Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised). Sec. 4.8. RFC7761: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; } choice hello-holdtime-or-multiplier { description "Holdtime is timer value to time out the neighbor state when the timer expires. The holdtime value can be specified either by the given holdtime value or by 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 "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 "Hello multiplier is the number by which the hello interval is multplied 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 "Join/Prune holdtime is the amount of time a receiver must keep the Join/Prune state alive. The holdtime value can be specified either by the given holdtime value or by the calculation of the 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 "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 "Join prune multiplier is the number by which the join prune interval is multplied 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 in 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 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 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 (Designated Router) 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 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 expiring 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 the 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 the 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 the 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 capability 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 beeing timed out."; } } // list ipv4-neighbor list ipv6-neighbor { 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-state { type bfd-types:state; description "BFD (Bidirectional Forwarding Detection) status."; } leaf expiration { type rt-types:timer-value-seconds16; description "Neighbor expiring 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 the 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 the 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 the 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 capability 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 beeing 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 dm { presence "Present to enable dense-mode."; description "PIM DM configuration data."; } // container dm 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 } // 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."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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."; } leaf address { type inet:ipv4-address; description "IPv4 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."; } leaf destination-prefix { type inet:ipv4-prefix; description "IPv4 destination prefix."; } } // 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."; } leaf next-hop-address { type inet:ipv6-address; description "IPv6 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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."; } leaf destination-prefix { type inet:ipv4-prefix; description "IPv4 destination prefix."; } } // container route } input { leaf destination-address { type inet:ipv6-address; description "IPv6 destination address."; } leaf destination-address { type inet:ipv4-address; description "IPv4 destination address."; } } } // 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 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 rp { description "PIM RP state 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."; } 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // container sm } // 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."; } 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 RP and dynamic RP, setting this attribute to 'true' will ask the system to use static RP."; } } // container sm } // 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 { 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 uint32; units "seconds"; description "Up time duration."; } } // 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 the BSR functions."; } } description "Candidate-BSR state."; reference "RFC5059, 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 as giving 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 "RFC5059, Section 3.1.2."; } } // choice election-state leaf bsr-next-bootstrap { type uint16; units "seconds"; description "The time when next bootstrap will be sent."; } container rp { description "State information of the RP."; leaf rp-address { type inet:ip-address; description "RP address."; } leaf group-policy { type string; description "Group policy."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } } // container rp leaf rp-candidate-next-advertisement { type uint16; units "seconds"; description "When the next advertisement will be sent as RP candidate"; } } // container bsr container rp-list { description "Containing a list of RPs."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } key "ipv4-address mode"; description "A list of IPv4 RP addresses."; leaf ipv4-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 uint32; units "seconds"; description "Up time duration."; } } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } key "ipv6-address mode"; description "A list of IPv6 RP addresses."; leaf ipv6-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 uint32; units "seconds"; description "Up time duration."; } } // list ipv6-rp } // container rp-list container rp-mappings { description "Containing a list of group-to-RP mappings."; list ipv4-rp { when "../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } key "group rp-address"; description "A list of group-to-RP mappings."; leaf group { type inet:ipv4-prefix; description "Group prefix."; } leaf rp-address { type inet:ipv4-address; description "RP address."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } } // list ipv4-rp list ipv6-rp { when "../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } key "group rp-address"; description "A list of IPv6 RP addresses."; leaf group { type inet:ipv6-prefix; description "Group prefix."; } leaf rp-address { type inet:ipv6-address; description "RP address."; } leaf up-time { type uint32; units "seconds"; description "Up time duration."; } } // list ipv6-rp } // container rp-mappings } // container rp container dm { presence "Present to enable dense-mode."; description "PIM DM state data."; } // container dm 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 } // 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 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 } // 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; status obsolete; description "IPv6 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; status obsolete; description "IPv4 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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; status obsolete; description "IPv6 address of the next hop."; } leaf address { type inet:ipv4-address; status obsolete; description "IPv4 address of the next hop."; } leaf address { type inet:ipv4-address; description "IPv4 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; status obsolete; description "IPv6 destination prefix."; } leaf destination-prefix { type inet:ipv4-prefix; status obsolete; description "IPv4 destination prefix."; } leaf destination-prefix { type inet:ipv4-prefix; description "IPv4 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; status obsolete; description "IPv6 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; status obsolete; description "IPv4 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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; status obsolete; description "IPv6 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; status obsolete; description "IPv4 address of the next hop."; } leaf next-hop-address { type inet:ipv4-address; description "IPv4 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; status obsolete; description "IPv6 destination prefix."; } leaf destination-prefix { type inet:ipv4-prefix; status obsolete; description "IPv4 destination prefix."; } leaf destination-prefix { type inet:ipv4-prefix; description "IPv4 destination prefix."; } } // container route } input { leaf destination-address { type inet:ipv6-address; status obsolete; description "IPv6 destination address."; } leaf destination-address { type inet:ipv4-address; status obsolete; description "IPv4 destination address."; } leaf destination-address { type inet:ipv4-address; description "IPv4 destination address."; } } } // rpc active-route } // list rib } // container ribs } // container routing-state } // module ietf-routing
© 2023 YumaWorks, Inc. All rights reserved.