1 // SPDX-License-Identifier: BSD-2-Clause
4 namespace "http://frrouting.org/yang/pim";
16 import ietf-routing-types {
20 import ietf-inet-types {
28 "FRR Users List: <mailto:frog@lists.frrouting.org>
29 FRR Development List: <mailto:dev@lists.frrouting.org>";
32 "The module defines a collection of YANG definitions common for
33 PIM (Protocol Independent Multicast) model.
35 Copyright 2020 FRRouting
37 Redistribution and use in source and binary forms, with or without
38 modification, are permitted provided that the following conditions
41 1. Redistributions of source code must retain the above copyright notice,
42 this list of conditions and the following disclaimer.
44 2. Redistributions in binary form must reproduce the above copyright
45 notice, this list of conditions and the following disclaimer in the
46 documentation and/or other materials provided with the distribution.
48 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
49 \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
50 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
51 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
52 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
53 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
54 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
55 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
56 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
57 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
58 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
64 "RFC XXXX: A YANG Data Model for PIM";
68 base frr-rt:routing-protocol;
70 "'Pim' routing pseudo-protocol.";
81 grouping msdp-timers {
89 "Hold period is started at the MSDP peer connection establishment
90 and is reset every new message. When the period expires the
91 connection is closed. This value should be greater than the
92 remote keep-alive time.";
102 "To maintain a connection established it is necessary to send
103 keep alive messages in a certain frequency and this allows its
104 configuration. This value should be less than the remote
108 leaf connection-retry {
115 "This period is used in the MSDP peer with the highest IP value
116 in the pair and configures the interval between TCP connection
121 grouping global-pim-config-attributes {
123 "A grouping defining per address family pim global attributes";
132 leaf ecmp-rebalance {
136 "Enable PIM ECMP Rebalance.";
139 leaf keep-alive-timer {
145 "Keep alive Timer in seconds.";
148 leaf rp-keep-alive-timer {
154 "RP keep alive Timer in seconds.";
157 leaf send-v6-secondary {
158 when "../frr-pim:address-family = 'frr-rt:ipv4'" {
160 "Only applicable to IPv4 address family.";
165 "Send v6 secondary addresses.";
168 container spt-switchover {
174 enum "PIM_SPT_IMMEDIATE" {
177 "Immediate switch to SPT Tree.";
179 enum "PIM_SPT_INFINITY" {
182 "Never switch to SPT Tree.";
185 default "PIM_SPT_IMMEDIATE";
187 "SPT-Switchover action";
190 leaf spt-infinity-prefix-list {
191 when "../spt-action = 'PIM_SPT_INFINITY'" {
193 "This leaf is only valid when the spt action
194 is PIM_SPT_INFINITY.";
198 "Prefix-List to control which groups to switch.";
202 leaf ssm-prefix-list {
205 "Prefix-list used to define Source-Specific Multicast address range.";
208 leaf-list ssm-pingd-source-ip {
209 type inet:ip-address;
211 "Enable ssmpingd operation.";
214 /* Global timers configuration. */
216 description "Global MSDP configuration.";
220 list msdp-mesh-groups {
223 "RFC 3618 Section 10.2. MSDP mesh-group semantics
225 Groups multiple MSDP peers to reduce SA flooding typically used
226 in intra-domain settings.";
233 "The mesh group name.";
237 type inet:ip-address;
239 "Source IP address for the TCP connections.";
246 type inet:ip-address;
248 "Peer member IP address.";
256 "Configure MSDP peer.";
259 type inet:ip-address;
261 "MSDP peer IP address.";
266 type inet:ip-address;
268 "MSDP source IP address.";
274 "Multi-chassis link aggregation.";
277 type frr-interface:interface-ref;
279 "Outgoing interface name.";
283 type inet:ip-address;
290 enum "MLAG_ROLE_NONE" {
295 enum "MLAG_ROLE_PRIMARY" {
298 "MLAG role primary.";
301 enum "MLAG_ROLE_SECONDARY" {
304 "MLAG role secondary.";
307 default "MLAG_ROLE_NONE";
320 leaf register-accept-list {
323 "Only accept registers from a specific source prefix list.";
325 } // global-pim-config-attributes
327 grouping interface-pim-config-attributes {
329 "A grouping defining pim interface attributes per address family.";
335 "Enable PIM flag on the interface.";
338 leaf pim-passive-enable {
342 "Disable exchange of protocol packets.";
345 leaf hello-interval {
354 leaf hello-holdtime {
358 must ". > ./../hello-interval" {
359 error-message "HoldTime must be greater than Hello";
367 "Enable BFD support on the interface.";
369 leaf min-rx-interval {
375 "Required min receive interval";
378 leaf min-tx-interval {
384 "Desired min transmit interval";
399 "Use a preconfigure BFD profile.";
407 "Enables BSM support on the interface.";
414 "Accept/Send unicast BSM on the interface.";
421 "Mark interface as Active-Active for MLAG operations.";
430 "DR (Designated Router) priority";
434 type inet:ip-address;
436 "Primary address of the interface set by user.";
439 leaf multicast-boundary-oil {
442 "Prefix-List to define multicast boundary";
446 key "source-addr group-addr";
448 "Add multicast route.";
451 type frr-interface:interface-ref;
453 "Outgoing interface name.";
457 type inet:ip-address;
459 "Multicast source address.";
463 type rt-types:ip-multicast-group-address;
465 "Multicast group address.";
468 } // interface-pim-config-attributes
470 grouping router-pim-config-attributes {
472 "A grouping defining pim router attributes per address family.";
479 "Number of packets to process at one time per fd.";
481 leaf join-prune-interval {
487 "Join Prune Send Interval in seconds.";
489 leaf register-suppress-time {
495 "Register Suppress Timer.";
500 * Global Configuration data nodes
502 augment "/frr-rt:routing/frr-rt:control-plane-protocols/"
503 + "frr-rt:control-plane-protocol" {
505 when "../frr-rt:type = 'frr-pim:pimd'" {
507 "This container is only valid for the 'pim' routing
511 "PIM configuration data.";
512 list address-family {
513 key "address-family";
515 "Each list entry for one address family.";
516 uses frr-rt:address-family;
517 uses global-pim-config-attributes;
524 * Per-interface configuration data
526 augment "/frr-interface:lib/frr-interface:interface" {
528 list address-family {
529 key "address-family";
531 "Each list entry for one address family.";
532 uses frr-rt:address-family;
533 uses interface-pim-config-attributes;
539 * Router configuration data
543 "PIM router parameters.";
544 list address-family {
545 key "address-family";
547 "Each list entry for one address family.";
548 uses frr-rt:address-family;
549 uses router-pim-config-attributes;