ietf-pim-base.yang   ietf-pim-base-formatted.yang 
module ietf-pim-base { module ietf-pim-base {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base";
prefix pim-base; prefix pim-base;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix rt-types;
reference reference
"RFC 8294: Common YANG Data Types for the Routing Area"; "RFC 8294: Common YANG Data Types for the Routing Area";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix rt;
reference reference
"RFC 8349: A YANG Data Model for Routing Management (NMDA "RFC 8349: A YANG Data Model for Routing Management (NMDA
Version)"; Version)";
} }
import ietf-bfd-types { import ietf-bfd-types {
prefix "bfd-types"; prefix bfd-types;
reference reference
"RFC 9127: YANG Data Model for Bidirectional Forwarding "RFC 9127: YANG Data Model for Bidirectional Forwarding
Detection (BFD)"; Detection (BFD)";
} }
organization organization
"IETF PIM Working Group"; "IETF PIM Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/pim/> "WG Web: <https://datatracker.ietf.org/wg/pim/>
WG List: <mailto:pim@ietf.org> WG List: <mailto:pim@ietf.org>
Editor: Xufeng Liu Editor: Xufeng Liu
<mailto:xufeng.liu.ietf@gmail.com> <mailto:xufeng.liu.ietf@gmail.com>
Editor: Pete McAllister Editor: Pete McAllister
<mailto:pete.mcallister@metaswitch.com> <mailto:pete.mcallister@metaswitch.com>
skipping to change at line 298 skipping to change at line 300
identity pim-ssm { identity pim-ssm {
base pim-sm; base pim-sm;
description description
"PIM is operating in Sparse Mode with Source-Specific "PIM is operating in Sparse Mode with Source-Specific
Multicast (SSM)."; Multicast (SSM).";
} }
/* /*
* Groupings * Groupings
*/ */
grouping graceful-restart-container { grouping graceful-restart-container {
description description
"A grouping defining a container of graceful restart "A grouping defining a container of graceful restart
attributes."; attributes.";
container graceful-restart { container graceful-restart {
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default "false";
description description
"Enables or disables graceful restart."; "Enables or disables graceful restart.";
} }
leaf duration { leaf duration {
type uint16; type uint16;
units seconds; units "seconds";
default 60; default "60";
description description
"Maximum time for graceful restart to finish."; "Maximum time for graceful restart to finish.";
} }
description description
"Container of graceful restart attributes."; "Container of graceful restart attributes.";
} }
} // graceful-restart-container } // graceful-restart-container
grouping multicast-route-attributes { grouping multicast-route-attributes {
description description
skipping to change at line 343 skipping to change at line 345
"Reference to an entry in the global interface list."; "Reference to an entry in the global interface list.";
} }
leaf is-spt { leaf is-spt {
type boolean; type boolean;
description description
"'true' if the SPTbit (Shortest Path Tree bit) is set to "'true' if the SPTbit (Shortest Path Tree bit) is set to
indicate that forwarding is taking place on the indicate that forwarding is taking place on the
(S,G) SPT."; (S,G) SPT.";
reference reference
"RFC 7761: Protocol Independent Multicast - Sparse Mode "RFC 7761: Protocol Independent Multicast - Sparse Mode
(PIM-SM): Protocol Specification (Revised), Section 4.1.3"; (PIM-SM): Protocol Specification (Revised), Section 4.1.3";
} }
leaf mode { leaf mode {
type identityref { type identityref {
base pim-mode; base pim-mode;
} }
description description
"PIM mode."; "PIM mode.";
} }
leaf msdp-learned { leaf msdp-learned {
type boolean; type boolean;
skipping to change at line 378 skipping to change at line 380
leaf up-time { leaf up-time {
type rt-types:timeticks64; type rt-types:timeticks64;
description description
"The number of time ticks (hundredths of a second) since the "The number of time ticks (hundredths of a second) since the
route last transitioned into the active state."; route last transitioned into the active state.";
} }
list outgoing-interface { list outgoing-interface {
key "name"; key "name";
description description
"A list of outgoing interfaces."; "A list of outgoing interfaces.";
leaf name { leaf name {
type if:interface-ref; type if:interface-ref;
description description
"Interface name."; "Interface name.";
} }
leaf expiration { leaf expiration {
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
description description
"Expiration time."; "Expiration time.";
} }
leaf up-time { leaf up-time {
type rt-types:timeticks64; type rt-types:timeticks64;
description description
"The number of time ticks (hundredths of a second) since "The number of time ticks (hundredths of a second) since
the 'oper-status' setting of the interface was last the 'oper-status' setting of the interface was last
changed to 'up'."; changed to 'up'.";
} }
leaf jp-state { leaf jp-state {
type enumeration { type enumeration {
enum "no-info" { enum no-info {
description description
"The interface has no (*,G) Join state and no timers "The interface has no (*,G) Join state and no timers
running."; running.";
} }
enum "join" { enum join {
description description
"The interface has Join state."; "The interface has Join state.";
} }
enum "prune-pending" { enum prune-pending {
description description
"The router has received a Prune on this interface from "The router has received a Prune on this interface from
a downstream neighbor and is waiting to see whether a downstream neighbor and is waiting to see whether
the Prune will be overridden by another downstream the Prune will be overridden by another downstream
router. For forwarding purposes, the Prune-Pending router. For forwarding purposes, the Prune-Pending
state functions exactly like the Join state."; state functions exactly like the Join state.";
} }
} }
description description
"Join/Prune state."; "Join/Prune state.";
skipping to change at line 466 skipping to change at line 464
description description
"'true' if the LAN Prune Delay option is present in the "'true' if the LAN Prune Delay option is present in the
last Hello message from the neighbor."; last Hello message from the neighbor.";
} }
leaf override-interval { leaf override-interval {
when "../present = 'true'" { when "../present = 'true'" {
description description
"Available only when 'leaf present' is 'true'."; "Available only when 'leaf present' is 'true'.";
} }
type uint16; type uint16;
units milliseconds; units "milliseconds";
description description
"The value of the Override_Interval field of the LAN Prune "The value of the Override_Interval field of the LAN Prune
Delay option in the last Hello message from the neighbor. Delay option in the last Hello message from the neighbor.
The neighbor uses this value to indicate a short period The neighbor uses this value to indicate a short period
after a Join or Prune to allow other routers on the LAN after a Join or Prune to allow other routers on the LAN
to override the Join or Prune."; to override the Join or Prune.";
} }
leaf propagation-delay { leaf propagation-delay {
when "../present = 'true'" { when "../present = 'true'" {
description description
"Available only when 'leaf present' is 'true'."; "Available only when 'leaf present' is 'true'.";
} }
type uint16; type uint16;
units milliseconds; units "milliseconds";
description description
"The value of the Propagation_Delay field of the LAN Prune "The value of the Propagation_Delay field of the LAN Prune
Delay option in the last Hello message from the neighbor. Delay option in the last Hello message from the neighbor.
The value is the propagation delay over the local link The value is the propagation delay over the local link
expected by the neighbor."; expected by the neighbor.";
} }
leaf t-bit { leaf t-bit {
when "../present = 'true'" { when "../present = 'true'" {
description description
"Available only when 'leaf present' is 'true'."; "Available only when 'leaf present' is 'true'.";
skipping to change at line 515 skipping to change at line 513
without being timed out."; without being timed out.";
} }
} // neighbor-state-af-attributes } // neighbor-state-af-attributes
grouping pim-instance-af-state-ref { grouping pim-instance-af-state-ref {
description description
"An absolute reference to a PIM instance address family."; "An absolute reference to a PIM instance address family.";
leaf instance-af-ref { leaf instance-af-ref {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "pim-base:pim/pim-base:address-family/" + "pim-base:pim/pim-base:address-family/"
+ "pim-base:address-family"; + "pim-base:address-family";
} }
description description
"Reference to a PIM instance address family."; "Reference to a PIM instance address family.";
} }
} // pim-instance-af-state-ref } // pim-instance-af-state-ref
grouping pim-interface-state-ref { grouping pim-interface-state-ref {
description description
"An absolute reference to a PIM interface state."; "An absolute reference to a PIM interface state.";
leaf interface-ref { leaf interface-ref {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ "pim-base:name"; + "pim-base:name";
} }
description description
"Reference to a PIM interface."; "Reference to a PIM interface.";
} }
} // pim-interface-state-ref } // pim-interface-state-ref
grouping statistics-sent-received { grouping statistics-sent-received {
description description
"A grouping defining sent and received statistics "A grouping defining sent and received statistics
on PIM messages."; on PIM messages.";
skipping to change at line 631 skipping to change at line 629
} }
} // statistics-sent-received } // statistics-sent-received
/* /*
* Data nodes * Data nodes
*/ */
augment "/rt:routing/rt:control-plane-protocols" { augment "/rt:routing/rt:control-plane-protocols" {
description description
"PIM augmentation to the routing instance model."; "PIM augmentation to the routing instance model.";
container pim { container pim {
presence presence "Enables the PIM protocol.";
"Enables the PIM protocol.";
description description
"PIM configuration data and operational state data."; "PIM configuration data and operational state data.";
uses graceful-restart-container { uses graceful-restart-container {
if-feature global-graceful-restart; if-feature "global-graceful-restart";
} }
list address-family { list address-family {
key "address-family"; key "address-family";
description description
"Each list entry for one address family."; "Each list entry for one address family.";
uses rt:address-family; uses rt:address-family;
uses graceful-restart-container { uses graceful-restart-container {
if-feature per-af-graceful-restart; if-feature "per-af-graceful-restart";
} }
container statistics { container statistics {
config false; config false;
description description
"A container defining statistics attributes."; "A container defining statistics attributes.";
leaf discontinuity-time { leaf discontinuity-time {
type yang:date-and-time; type yang:date-and-time;
description description
"The time of the most recent occasion at which any one "The time of the most recent occasion at which any one
or more of the statistics counters suffered a or more of the statistics counters suffered a
discontinuity. If no such discontinuities have discontinuity. If no such discontinuities have
skipping to change at line 800 skipping to change at line 788
leaf name { leaf name {
type if:interface-ref; type if:interface-ref;
description description
"Reference to an entry in the global interface list."; "Reference to an entry in the global interface list.";
} }
list address-family { list address-family {
key "address-family"; key "address-family";
description description
"Each list entry for one address family."; "Each list entry for one address family.";
uses rt:address-family; uses rt:address-family;
container bfd { container bfd {
if-feature bfd; if-feature "bfd";
description description
"BFD (Bidirectional Forwarding Detection) "BFD (Bidirectional Forwarding Detection)
operation."; operation.";
uses bfd-types:client-cfg-parms; uses bfd-types:client-cfg-parms;
} }
leaf dr-priority { leaf dr-priority {
if-feature intf-dr-priority; if-feature "intf-dr-priority";
type uint32; type uint32;
default 1; default "1";
description description
"DR (Designated Router) priority as the preference in "DR (Designated Router) priority as the preference in
the DR election process."; the DR election process.";
} }
leaf hello-interval { leaf hello-interval {
if-feature intf-hello-interval; if-feature "intf-hello-interval";
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
default 30; default "30";
description description
"Periodic interval for Hello messages. "Periodic interval for Hello messages.
If 'infinity' or 'not-set' is used, no periodic If 'infinity' or 'not-set' is used, no periodic
Hello messages are sent."; Hello messages are sent.";
reference reference
"RFC 3973: Protocol Independent Multicast - "RFC 3973: Protocol Independent Multicast -
Dense Mode (PIM-DM): Protocol Specification Dense Mode (PIM-DM): Protocol Specification
(Revised), Section 4.8 (Revised), Section 4.8
RFC 7761: Protocol Independent Multicast - Sparse RFC 7761: Protocol Independent Multicast - Sparse
Mode (PIM-SM): Protocol Specification (Revised), Mode (PIM-SM): Protocol Specification (Revised),
skipping to change at line 841 skipping to change at line 828
} }
choice hello-holdtime-or-multiplier { choice hello-holdtime-or-multiplier {
description description
"The Holdtime is the timer value to time out the "The Holdtime is the timer value to time out the
neighbor state when the timer expires. neighbor state when the timer expires.
The Holdtime value can be specified by either The Holdtime value can be specified by either
(1) the given Holdtime value or (2) the calculation (1) the given Holdtime value or (2) the calculation
of the Hello interval multiplied by the given value of the Hello interval multiplied by the given value
of the multiplier."; of the multiplier.";
case holdtime { case holdtime {
if-feature intf-hello-holdtime; if-feature "intf-hello-holdtime";
leaf hello-holdtime { leaf hello-holdtime {
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
default 105; default "105";
description description
"The Hello Holdtime is the amount of time to "The Hello Holdtime is the amount of time to
keep the neighbor reachable until a new keep the neighbor reachable until a new
Hello message is received."; Hello message is received.";
} }
} }
case multiplier { case multiplier {
if-feature intf-hello-multiplier; if-feature "intf-hello-multiplier";
leaf hello-multiplier { leaf hello-multiplier {
type rt-types:timer-multiplier; type rt-types:timer-multiplier;
default 3; default "3";
description description
"The Hello multiplier is the number by which the "The Hello multiplier is the number by which the
Hello interval is multiplied to obtain the Hello interval is multiplied to obtain the
Hello Holdtime. Hello Holdtime.
The value of the Hello Holdtime is calculated The value of the Hello Holdtime is calculated
as: as:
hello-holdtime = hello-holdtime =
(multiplier + 0.5) * (hello-interval)."; (multiplier + 0.5) * (hello-interval).";
} }
} }
} }
leaf jp-interval { leaf jp-interval {
if-feature intf-jp-interval; if-feature "intf-jp-interval";
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
default 60; default "60";
description description
"Periodic interval between Join/Prune messages. "Periodic interval between Join/Prune messages.
If 'infinity' or 'not-set' is used, no periodic If 'infinity' or 'not-set' is used, no periodic
Join/Prune messages are sent."; Join/Prune messages are sent.";
} }
choice jp-holdtime-or-multiplier { choice jp-holdtime-or-multiplier {
description description
"The Join/Prune Holdtime is the amount of time a "The Join/Prune Holdtime is the amount of time a
receiver must keep the Join/Prune state alive. receiver must keep the Join/Prune state alive.
The Holdtime value can be specified by either The Holdtime value can be specified by either
(1) the given Holdtime value or (2) the calculation (1) the given Holdtime value or (2) the calculation
of 'jp-interval' multiplied by the given value of of 'jp-interval' multiplied by the given value of
the multiplier."; the multiplier.";
case holdtime { case holdtime {
if-feature intf-jp-holdtime; if-feature "intf-jp-holdtime";
leaf jp-holdtime { leaf jp-holdtime {
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
default 210; default "210";
description description
"The Join/Prune Holdtime is the amount of time a "The Join/Prune Holdtime is the amount of time a
receiver must keep the Join/Prune state alive."; receiver must keep the Join/Prune state alive.";
} }
} }
case multiplier { case multiplier {
if-feature intf-jp-multiplier; if-feature "intf-jp-multiplier";
leaf jp-multiplier { leaf jp-multiplier {
type rt-types:timer-multiplier; type rt-types:timer-multiplier;
default 3; default "3";
description description
"The Join/Prune multiplier is the number "The Join/Prune multiplier is the number
by which the Join/Prune interval is multiplied by which the Join/Prune interval is multiplied
to obtain the Join/Prune Holdtime. to obtain the Join/Prune Holdtime.
The value of the Join/Prune Holdtime is The value of the Join/Prune Holdtime is
calculated as: calculated as:
jp-holdtime = jp-holdtime =
(multiplier + 0.5) * (jp-interval)."; (multiplier + 0.5) * (jp-interval).";
} }
} }
} }
leaf override-interval { leaf override-interval {
if-feature intf-override-interval; if-feature "intf-override-interval";
type uint16; type uint16;
units milliseconds; units "milliseconds";
default 2500; default "2500";
description description
"A short period after a Join or Prune to allow other "A short period after a Join or Prune to allow other
routers on the LAN to override the Join or Prune."; routers on the LAN to override the Join or Prune.";
} }
leaf propagation-delay { leaf propagation-delay {
if-feature intf-propagation-delay; if-feature "intf-propagation-delay";
type uint16; type uint16;
units milliseconds; units "milliseconds";
default 500; default "500";
description description
"Expected propagation delay over the local link."; "Expected propagation delay over the local link.";
} }
// Interface state attributes // Interface state attributes
leaf oper-status { leaf oper-status {
type enumeration { type enumeration {
enum up { enum up {
description description
"The interface is ready to pass PIM messages."; "The interface is ready to pass PIM messages.";
} }
enum down { enum down {
description description
"The interface does not pass PIM messages."; "The interface does not pass PIM messages.";
skipping to change at line 1037 skipping to change at line 1023
type inet:ipv6-address; type inet:ipv6-address;
description description
"Neighbor address."; "Neighbor address.";
} }
uses neighbor-state-af-attributes; uses neighbor-state-af-attributes;
} // list ipv6-neighbor } // list ipv6-neighbor
} // neighbors } // neighbors
} // address-family } // address-family
} // interface } // interface
} // interfaces } // interfaces
} // pim }
} // augment } // augment
/* /*
* Notifications * Notifications
*/ */
notification pim-neighbor-event { notification pim-neighbor-event {
description description
"Notification event for a neighbor."; "Notification event for a neighbor.";
leaf event-type { leaf event-type {
type neighbor-event-type; type neighbor-event-type;
description description
"Event type."; "Event type.";
} }
uses pim-interface-state-ref; uses pim-interface-state-ref;
leaf interface-af-ref { leaf interface-af-ref {
skipping to change at line 1055 skipping to change at line 1042
"Notification event for a neighbor."; "Notification event for a neighbor.";
leaf event-type { leaf event-type {
type neighbor-event-type; type neighbor-event-type;
description description
"Event type."; "Event type.";
} }
uses pim-interface-state-ref; uses pim-interface-state-ref;
leaf interface-af-ref { leaf interface-af-ref {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ "[pim-base:name = current()/../interface-ref]/" + "[pim-base:name = current()/../interface-ref]/"
+ "pim-base:address-family/pim-base:address-family"; + "pim-base:address-family/pim-base:address-family";
} }
description description
"Reference to a PIM interface address family."; "Reference to a PIM interface address family.";
} }
leaf neighbor-ipv4-ref { leaf neighbor-ipv4-ref {
when "../interface-af-ref = 'rt:ipv4'" { when "../interface-af-ref = 'rt:ipv4'" {
description description
"Only applicable to an IPv4 address family."; "Only applicable to an IPv4 address family.";
} }
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ "[pim-base:name = current()/../interface-ref]/" + "[pim-base:name = current()/../interface-ref]/"
+ "pim-base:address-family" + "pim-base:address-family"
+ "[pim-base:address-family = " + "[pim-base:address-family = "
+ "current()/../interface-af-ref]/" + "current()/../interface-af-ref]/"
+ "pim-base:neighbors/pim-base:ipv4-neighbor/" + "pim-base:neighbors/pim-base:ipv4-neighbor/"
+ "pim-base:address"; + "pim-base:address";
} }
description description
"Reference to a PIM IPv4 neighbor."; "Reference to a PIM IPv4 neighbor.";
} }
leaf neighbor-ipv6-ref { leaf neighbor-ipv6-ref {
when "../interface-af-ref = 'rt:ipv6'" { when "../interface-af-ref = 'rt:ipv6'" {
description description
"Only applicable to an IPv6 address family."; "Only applicable to an IPv6 address family.";
} }
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ "[pim-base:name = current()/../interface-ref]/" + "[pim-base:name = current()/../interface-ref]/"
+ "pim-base:address-family" + "pim-base:address-family"
+ "[pim-base:address-family = " + "[pim-base:address-family = "
+ "current()/../interface-af-ref]/" + "current()/../interface-af-ref]/"
+ "pim-base:neighbors/pim-base:ipv6-neighbor/" + "pim-base:neighbors/pim-base:ipv6-neighbor/"
+ "pim-base:address"; + "pim-base:address";
} }
description description
"Reference to a PIM IPv6 neighbor."; "Reference to a PIM IPv6 neighbor.";
} }
leaf up-time { leaf up-time {
type rt-types:timeticks64; type rt-types:timeticks64;
description description
"The number of time ticks (hundredths of a second) since "The number of time ticks (hundredths of a second) since
the neighbor relationship has been formed as reachable the neighbor relationship has been formed as reachable
without being timed out."; without being timed out.";
 End of changes. 60 change blocks. 
78 lines changed or deleted 63 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/