module frr-pim { yang-version "1.1"; namespace "http://frrouting.org/yang/pim"; prefix frr-pim; import frr-interface { prefix frr-interface; } import frr-routing { prefix "frr-rt"; } import ietf-routing-types { prefix "rt-types"; } import ietf-inet-types { prefix "inet"; } organization "FRRouting"; contact "FRR Users List: FRR Development List: "; description "The module defines a collection of YANG definitions common for PIM (Protocol Independent Multicast) model."; revision 2017-03-09 { description "Initial revision."; reference "RFC XXXX: A YANG Data Model for PIM"; } identity pimd { base frr-rt:routing-protocol; description "'Pim' routing pseudo-protocol."; } typedef plist-ref { type string; } /* * Groupings */ grouping global-pim-config-attributes { description "A grouping defining pim global attributes."; leaf ecmp { type empty; description "Enable PIM ECMP."; } leaf ecmp-rebalance { type empty; description "Enable PIM ECMP Rebalance."; } leaf join-prune-interval { type uint16 { range "60..600"; } default "60"; description "Join Prune Send Interval in seconds."; } leaf keep-alive-timer { type uint16 { range "31..60000"; } default "210"; description "Keep alive Timer in seconds."; } leaf rp-keep-alive-timer { type uint16 { range "31..60000"; } default "210"; description "RP keep alive Timer in seconds."; } leaf packets { type uint8 { range "1..100"; } default "3"; description "Number of packets to process at one time per fd."; } leaf register-suppress-time { type uint16 { range "5..60000"; } default "60"; description "Register Suppress Timer."; } } grouping per-af-global-pim-config-attributes { description "A grouping defining per address family pim global attributes"; leaf send-v6-secondary { when "../frr-pim:address-family = 'frr-rt:ipv4'" { description "Only applicable to IPv4 address family."; } type empty; description "Send v6 secondary addresses."; } container spt-switchover { description "SPT-Switchover."; leaf spt-action { type enumeration { enum "PIM_SPT_IMMEDIATE" { value 0; description "Immediate switch to SPT Tree."; } enum "PIM_SPT_INFINITY" { value 1; description "Never switch to SPT Tree."; } } default "PIM_SPT_IMMEDIATE"; description "SPT-Switchover action"; } leaf spt-infinity-prefix-list { when "../spt-action = 'PIM_SPT_INFINITY'" { description "This leaf is only valid when the spt action is PIM_SPT_INFINITY."; } type plist-ref; description "Prefix-List to control which groups to switch."; } } leaf ssm-prefix-list { type plist-ref; description "Prefix-list used to define Source-Specific Multicast address range."; } leaf-list ssm-pingd-source-ip { type inet:ip-address; description "Enable ssmpingd operation."; } container msdp-mesh-group { presence "Configure MSDP mesh-group."; leaf mesh-group-name { type string; description "MSDP mesh group name."; } leaf-list member-ip { type inet:ip-address; description "Peer ip address."; } leaf source-ip { type inet:ip-address; description "Source ip address for the TCP connection."; } } list msdp-peer { key "peer-ip"; description "Configure MSDP peer."; leaf peer-ip { type inet:ip-address; description "MSDP peer IP address."; } leaf source-ip { type inet:ip-address; description "MSDP source IP address."; } } container mlag { description "Multi-chassis link aggregation."; leaf peerlink-rif { type frr-interface:interface-ref; description "Outgoing interface name."; } leaf reg-address { type inet:ip-address; description "reg address."; } leaf my-role { type enumeration { enum "MLAG_ROLE_NONE" { value 0; description "MLAG role none."; } enum "MLAG_ROLE_PRIMARY" { value 1; description "MLAG role primary."; } enum "MLAG_ROLE_SECONDARY" { value 2; description "MLAG role secondary."; } } default "MLAG_ROLE_NONE"; description "Mlag role."; } leaf peer-state { type boolean; default "false"; description "Peer state"; } } leaf register-accept-list { type plist-ref; description "Only accept registers from a specific source prefix list."; } } // per-af-global-pim-config-attributes grouping interface-pim-config-attributes { description "A grouping defining pim interface attributes."; leaf pim-enable { type empty; description "Enable PIM flag on the interface."; } leaf dr-priority { type uint32 { range "1..4294967295"; } default 1; description "DR (Designated Router) priority"; } leaf hello-interval { type uint16 { range "1..180"; } default "30"; description "Hello interval"; } leaf hello-holdtime { type uint16 { range "1..180"; } description "Hello holdtime"; } container bfd { presence "Enable BFD support on the interface."; leaf min-rx-interval { type uint16 { range "50..60000"; } default "300"; description "Required min receive interval"; } leaf min-tx-interval { type uint16 { range "50..60000"; } default "300"; description "Desired min transmit interval"; } leaf detect_mult { type uint8 { range "2..255"; } default "3"; description "Detect Multiplier"; } } leaf bsm { type empty; description "Enables BSM support on the interface."; } leaf unicast-bsm { type empty; description "Accept/Send unicast BSM on the interface."; } leaf active-active { type empty; description "Mark interface as Active-Active for MLAG operations."; } } // interface-pim-config-attributes grouping per-af-interface-pim-config-attributes { description "A grouping defining pim interface attributes per address family."; leaf use-source { type inet:ip-address; description "Primary address of the interface set by user."; } leaf multicast-boundary-oil { type plist-ref; description "Prefix-List to define multicast boundary"; } list mroute { key "source-addr group-addr"; description "Add multicast route."; leaf oif { type frr-interface:interface-ref; description "Outgoing interface name."; } leaf source-addr { type inet:ip-address; description "Multicast source address."; } leaf group-addr { type rt-types:ip-multicast-group-address; description "Multicast group address."; } } } // per-af-interface-pim-config-attributes /* * Global Configuration data nodes */ augment "/frr-rt:routing/frr-rt:control-plane-protocols/" + "frr-rt:control-plane-protocol" { container pim { when "../frr-rt:type = 'frr-pim:pimd'" { description "This container is only valid for the 'pim' routing protocol."; } description "PIM configuration data."; uses global-pim-config-attributes; list address-family { key "address-family"; description "Each list entry for one address family."; uses frr-rt:address-family; uses per-af-global-pim-config-attributes; } //address-family } // pim } // augment /* * Per-interface configuration data */ augment "/frr-interface:lib/frr-interface:interface" { container pim { description "PIM interface parameters."; uses interface-pim-config-attributes; list address-family { key "address-family"; description "Each list entry for one address family."; uses frr-rt:address-family; uses per-af-interface-pim-config-attributes; } } } }