ietf-msdp

This module defines the YANG data model definitions for the Multicast Source Discovery Protocol (MSDP). The key words 'MUST', '...

  • Version: 2020-10-31

    ietf-msdp@2020-10-31


    
      module ietf-msdp {
    
        yang-version 1.1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-msdp";
    
        prefix msdp;
    
        import ietf-yang-types {
          prefix yang;
          reference
            "RFC 6991: Common YANG Data Types";
    
    
        }
        import ietf-inet-types {
          prefix inet;
          reference
            "RFC 6991: Common YANG Data Types";
    
    
        }
        import ietf-routing {
          prefix rt;
          reference
            "RFC 8349: A YANG Data Model for Routing Management
            (NMDA Version)";
    
    
        }
        import ietf-interfaces {
          prefix if;
          reference
            "RFC 8343: A YANG Data Model for Interface Management";
    
    
        }
        import ietf-ip {
          prefix ip;
          reference
            "RFC 8344: A YANG Data Model for IP Management";
    
    
        }
        import ietf-key-chain {
          prefix key-chain;
          reference
            "RFC 8177: YANG Data Model for Key Chains";
    
    
        }
        import ietf-routing-types {
          prefix rt-types;
          reference
            "RFC 8294: Common YANG Data Types for the Routing Area";
    
    
        }
        import ietf-access-control-list {
          prefix acl;
          reference
            "RFC 8519: YANG Data Model for Network Access Control Lists
            (ACLs)";
    
    
        }
    
        organization
          "IETF Protocols for IP Multicast (pim) Working Group";
    
        contact
          "WG Web:   <https://datatracker.ietf.org/wg/pim/>
         WG List:  <mailto:pim@ietf.org>
    
         Editor:   Xufeng Liu
                   <mailto:xufeng.liu.ietf@gmail.com>
    
         Editor:   Zheng Zhang
                   <mailto:zhang.zheng@zte.com.cn>
    
         Editor:   Anish Peter
                   <mailto:anish.ietf@gmail.com>
    
         Editor:   Mahesh Sivakumar
                   <mailto:sivakumar.mahesh@gmail.com>
    
         Editor:   Feng Guo
                   <mailto:guofeng@huawei.com>
    
         Editor:   Pete McAllister
                   <mailto:pete.mcallister@metaswitch.com>";
    
        description
          "This module defines the YANG data model definitions for the
         Multicast Source Discovery Protocol (MSDP).
    
         The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
         NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
         'MAY', and 'OPTIONAL' in this document are to be interpreted as
         described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
         they appear in all capitals, as shown here.
    
         Copyright (c) 2020 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 8916; see the
         RFC itself for full legal notices.";
    
        revision "2020-10-31" {
          description "Initial revision.";
          reference
            "RFC 8916: A YANG Data Model for the Multicast Source
            Discovery Protocol (MSDP)";
    
        }
    
    
        feature filter-policy {
          description
            "Support policy configuration of peer/message filtering.";
          reference
            "RFC 8519: YANG Data Model for Network Access Control
            Lists (ACLs)";
    
        }
    
        feature peer-as-verification {
          description
            "Support configuration of a peer's Autonomous System Number
           (ASN).";
          reference
            "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
    
        }
    
        feature peer-authentication {
          description
            "Support configuration of peer authentication.";
          reference
            "RFC 8177: YANG Data Model for Key Chains";
    
        }
    
        identity msdp {
          base rt:control-plane-protocol;
          description
            "Identity for the Multicast Source Discovery Protocol (MSDP).";
          reference
            "RFC 3618: Multicast Source Discovery Protocol (MSDP)";
    
        }
    
        grouping authentication-container {
          description
            "Authentication attributes.";
          container authentication {
            if-feature peer-authentication;
            description
              "A container defining authentication attributes.";
            choice authentication-type {
              description
                "Choice of authentication.";
              leaf key-chain {
                type key-chain:key-chain-ref;
                description
                  "Reference to a key-chain.";
                reference
                  "RFC 8177: YANG Data Model for Key Chains";
    
              }
    
              case password {
                leaf key {
                  type string;
                  description
                    "This leaf specifies the authentication key.";
                }
    
                leaf crypto-algorithm {
                  type identityref {
                    base key-chain:crypto-algorithm;
                  }
                  must
                    "derived-from-or-self(., 'key-chain:md5')" {
                    error-message
                      "Only the md5 algorithm can be used for MSDP.";
                    description
                      "Check for crypto-algorithm.";
                  }
                  description
                    "Cryptographic algorithm associated with a key.
                   Only the md5 algorithm can be used for MSDP.
                   When 'md5' is specified, MSDP control messages
                   are secured by TCP MD5 signatures as described
                   in RFCs 3618 and 5925.  Both peers of a
                   connection SHOULD be configured to the same
                   algorithm for the connection to be established.
                   When this leaf is not configured, unauthenticated
                   TCP is used.";
                  reference
                    "RFC 3618: Multicast Source Discovery Protocol (MSDP)
                     RFC 5925: The TCP Authentication Option
                     RFC 8177: YANG Data Model for Key Chains";
    
                }
              }  // case password
            }  // choice authentication-type
          }  // container authentication
        }  // grouping authentication-container
    
        grouping tcp-connect-source {
          description
            "Attribute to configure a peer TCP connection source.";
          leaf tcp-connection-source {
            type if:interface-ref;
            must
              "/if:interfaces/if:interface[if:name = current()]/"
                + "ip:ipv4/ip:enabled != 'false'" {
              error-message
                "The interface must have IPv4 enabled.";
              description
                "The interface must have IPv4 enabled.";
              reference
                "RFC 8343: A YANG Data Model for Interface Management";
    
            }
            description
              "The interface is to be the source for the TCP
             connection.  It is a reference to an entry in the global
             interface list.";
          }
        }  // grouping tcp-connect-source
    
        grouping global-config-attributes {
          description
            "Global MSDP configuration.";
          uses tcp-connect-source;
    
          list default-peer {
            if-feature filter-policy;
            key "peer-addr prefix-policy";
            description
              "The default peer accepts all MSDP Source-Active (SA)
             messages.  A default peer is needed in topologies where
             MSDP peers do not coexist with BGP peers.  The Reverse Path
             Forwarding (RPF) check on SA messages will fail, and no
             SA messages will be accepted.  In these cases, you can
             configure the peer as a default peer and bypass
             RPF checks.";
            leaf peer-addr {
              type leafref {
                path
                  "../../../peers/peer/address";
              }
              mandatory true;
              description
                "Reference to a peer that is in the peer list.";
            }
    
            leaf prefix-policy {
              type leafref {
                path
                  "/acl:acls/acl:acl/acl:name";
              }
              description
                "If specified, only those SA entries whose Rendezvous
               Point (RP) is permitted in the prefix list are allowed;
               if not specified, all SA messages from the default
               peer are accepted.";
              reference
                "RFC 7761: Protocol Independent Multicast - Sparse Mode
                (PIM-SM): Protocol Specification (Revised)
                 RFC 8519: YANG Data Model for Network Access Control
                Lists (ACLs)";
    
            }
          }  // list default-peer
    
          container originating-rp {
            description
              "The container of the originating RP.";
            leaf interface {
              type if:interface-ref;
              must
                "/if:interfaces/if:interface[if:name = current()]/"
                  + "ip:ipv4/ip:enabled != 'false'" {
                error-message
                  "The interface must have IPv4 enabled.";
                description
                  "The interface must have IPv4 enabled.";
                reference
                  "RFC 8343: A YANG Data Model for Interface Management";
    
              }
              description
                "Reference to an entry in the global interface list.
               The IP address of the interface used in the RP field of
               an SA message entry.  When anycast RPs are used, all RPs
               use the same IP address.  This parameter can be used to
               define a unique IP address for the RP of each MSDP peer.
               By default, the software uses the RP address of the
               local system.";
            }
          }  // container originating-rp
    
          uses sa-filter-container;
    
          leaf sa-limit {
            type uint32;
            description
              "A limit on the number of SA entries accepted.
             If not configured or the value is 0, there is no limit.";
          }
    
          uses ttl-threshold;
        }  // grouping global-config-attributes
    
        grouping peer-config-attributes {
          description
            "Per-peer configuration for MSDP.";
          uses authentication-container;
    
          leaf enabled {
            type boolean;
            description
              "'true' if the peer is enabled;
             'false' if the peer is disabled.";
          }
    
          uses tcp-connect-source;
    
          leaf description {
            type string;
            description "The peer description.";
          }
    
          leaf mesh-group {
            type string;
            description
              "The name of the mesh-group to which this peer belongs.";
            reference
              "RFC 3618: Multicast Source Discovery Protocol (MSDP),
              	  Section 10.2";
    
          }
    
          leaf peer-as {
            if-feature peer-as-verification;
            type inet:as-number;
            description
              "The peer's ASN.  Using peer-as to perform the verification
             can provide more controlled ability.  The value can be
             compared with the BGP peer's ASN.  If they are different,
             the SA information that comes from this peer may be
             rejected.  If the ASN is the same as the local ASN, then
             the peer is within the same domain; otherwise, this peer
             is external to the domain.  This is comparable to the
             definition and usage in BGP; see RFC 4271.";
            reference
              "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
    
          }
    
          uses sa-filter-container;
    
          leaf sa-limit {
            type uint32;
            description
              "A limit on the number of SA entries accepted from this
             peer.
             If not configured or the value is 0, there is no limit.";
          }
    
          container timer {
            description "Timer attributes.";
            reference
              "RFC 3618: Multicast Source Discovery Protocol (MSDP),
              	  Section 5";
    
            leaf connect-retry-interval {
              type uint16;
              units "seconds";
              default '30';
              description
                "The peer timer for connect-retry.  By default, MSDP peers
               wait 30 seconds after the session is reset.";
            }
    
            leaf holdtime-interval {
              type uint16 {
                range "3..65535";
              }
              units "seconds";
              default '75';
              description
                "The SA hold-down period of this MSDP peer.";
            }
    
            leaf keepalive-interval {
              type uint16 {
                range "1..65535";
              }
              units "seconds";
              must '. < ../holdtime-interval' {
                error-message
                  "The keepalive interval must be smaller than the "
                    + "hold-time interval.";
              }
              default '60';
              description
                "The keepalive timer of this MSDP peer.";
            }
          }  // container timer
    
          uses ttl-threshold;
        }  // grouping peer-config-attributes
    
        grouping peer-state-attributes {
          description
            "Per-peer state attributes for MSDP.";
          leaf session-state {
            type enumeration {
              enum "disabled" {
                value 0;
                description "Disabled.";
              }
              enum "inactive" {
                value 1;
                description "Inactive.";
              }
              enum "listen" {
                value 2;
                description "Listen.";
              }
              enum "connecting" {
                value 3;
                description "Connecting.";
              }
              enum "established" {
                value 4;
                description "Established.";
              }
            }
            config false;
            description
              "The peer's session state.";
            reference
              "RFC 3618: Multicast Source Discovery Protocol (MSDP),
              	  Section 11";
    
          }
    
          leaf elapsed-time {
            type yang:gauge32;
            units "seconds";
            config false;
            description
              "Elapsed time for being in a state.";
          }
    
          leaf connect-retry-expire {
            type uint32;
            units "seconds";
            config false;
            description
              "Connect retry expire time of a peer connection.";
          }
    
          leaf hold-expire {
            type uint16;
            units "seconds";
            config false;
            description
              "Hold expire time of a peer connection.";
          }
    
          leaf is-default-peer {
            type boolean;
            config false;
            description
              "'true' if this peer is one of the default peers.";
          }
    
          leaf keepalive-expire {
            type uint16;
            units "seconds";
            config false;
            description
              "Keepalive expire time of this peer.";
          }
    
          leaf reset-count {
            type yang:zero-based-counter32;
            config false;
            description
              "The reset count of this peer.";
          }
    
          container statistics {
            config false;
            description
              "A container defining statistics attributes.";
            leaf discontinuity-time {
              type yang:date-and-time;
              description
                "The time on the most recent occasion at which any one
               or more of the statistics counters suffered a
               discontinuity.  If no such discontinuities have occurred
               since the last re-initialization of the local
               management subsystem, then this node contains the time
               the local management subsystem re-initialized itself.";
            }
    
            container error {
              description
                "A grouping defining error statistics attributes.";
              leaf rpf-failure {
                type uint32;
                description
                  "The number of RPF failures.";
              }
            }  // container error
    
            container queue {
              description
                "A container that includes queue statistics attributes.";
              leaf size-in {
                type uint32;
                description
                  "The number of messages received from the peer
                 currently queued.";
              }
    
              leaf size-out {
                type uint32;
                description
                  "The number of messages queued to be sent to the peer.";
              }
            }  // container queue
    
            container received {
              description
                "Received message counters.";
              uses statistics-sent-received;
            }  // container received
    
            container sent {
              description
                "Sent message counters.";
              uses statistics-sent-received;
            }  // container sent
          }  // container statistics
        }  // grouping peer-state-attributes
    
        grouping sa-filter-container {
          description
            "A container defining SA filters.";
          container sa-filter {
            description
              "Specifies an Access Control List (ACL) to filter SA messages
             coming into or going out of the peer.";
            leaf in {
              type leafref {
                path "/acl:acls/acl:acl/acl:name";
              }
              description
                "Filters incoming SA messages only.
               The value is the name to uniquely identify a
               policy that contains one or more rules used to
               accept or reject MSDP SA messages.
               If the policy is not specified, all MSDP SA messages are
               accepted.";
              reference
                "RFC 8519: YANG Data Model for Network Access Control
                Lists (ACLs)";
    
            }
    
            leaf out {
              type leafref {
                path "/acl:acls/acl:acl/acl:name";
              }
              description
                "Filters outgoing SA messages only.
               The value is the name to uniquely identify a
               policy that contains one or more rules used to
               accept or reject MSDP SA messages.
               If the policy is not specified, all MSDP SA messages are
               sent.";
              reference
                "RFC 8519: YANG Data Model for Network Access Control
                Lists (ACLs)";
    
            }
          }  // container sa-filter
        }  // grouping sa-filter-container
    
        grouping ttl-threshold {
          description
            "Attribute to configure the TTL threshold.";
          leaf ttl-threshold {
            type uint8 {
              range "1..255";
            }
            description
              "The maximum number of hops data packets can traverse
             before being dropped.";
          }
        }  // grouping ttl-threshold
    
        grouping statistics-sent-received {
          description
            "A grouping defining sent and received statistics attributes.";
          leaf keepalive {
            type yang:counter64;
            description
              "The number of keepalive messages.";
          }
    
          leaf notification {
            type yang:counter64;
            description
              "The number of notification messages.";
          }
    
          leaf sa-message {
            type yang:counter64;
            description
              "The number of SA messages.";
          }
    
          leaf sa-response {
            type yang:counter64;
            description
              "The number of SA response messages.";
          }
    
          leaf sa-request {
            type yang:counter64;
            description
              "The number of SA request messages.";
          }
    
          leaf total {
            type yang:counter64;
            description
              "The number of total messages.";
          }
        }  // grouping statistics-sent-received
    
        augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol {
          when
            "derived-from-or-self(rt:type, 'msdp:msdp')" {
            description
              "This augmentation is only valid for a routing protocol
             instance of MSDP.";
          }
          description
            "MSDP augmentation to routing control-plane protocol
           configuration and state.";
          container msdp {
            description
              "MSDP configuration and operational state data.";
            container global {
              description "Global attributes.";
              uses global-config-attributes;
            }  // container global
    
            container peers {
              description
                "Contains a list of peers.";
              list peer {
                key "address";
                description
                  "A list of MSDP peers.";
                leaf address {
                  type inet:ipv4-address;
                  description
                    "The address of the peer.";
                }
    
                action clear-peer {
                  description
                    "Clears the TCP connection to the peer.";
                }  // rpc clear-peer
    
                uses peer-config-attributes;
    
                uses peer-state-attributes;
              }  // list peer
            }  // container peers
    
            action clear-all-peers {
              description
                "All peers' TCP connections are cleared.";
            }  // rpc clear-all-peers
    
            container sa-cache {
              config false;
              description
                "The SA cache information.";
              list entry {
                key "group source-addr";
                description
                  "A list of SA cache entries.";
                leaf group {
                  type rt-types:ipv4-multicast-group-address;
                  description
                    "The group address of this SA cache.";
                }
    
                leaf source-addr {
                  type rt-types:ipv4-multicast-source-address;
                  description
                    "Source IPv4 address.";
                }
    
                list origin-rp {
                  key "rp-address";
                  description
                    "Information regarding the originating RP.";
                  leaf rp-address {
                    type inet:ipv4-address;
                    description
                      "The RP address.  This is the IP address used in the
                     RP field of an SA message entry.";
                  }
    
                  leaf is-local-rp {
                    type boolean;
                    description
                      "'true' if the RP is local;
                     'false' if the RP is not local.";
                  }
    
                  leaf sa-adv-expire {
                    type uint32;
                    units "seconds";
                    description
                      "The remaining time duration before expiration
                     of the periodic SA advertisement timer on a
                     local RP.";
                  }
                }  // list origin-rp
    
                container state-attributes {
                  description
                    "SA cache state attributes for MSDP.";
                  leaf up-time {
                    type yang:gauge32;
                    units "seconds";
                    description
                      "Indicates the duration time when this SA entry is
                     created in the cache.  MSDP is a periodic protocol;
                     the value can be used to check the state of the
                     SA cache.";
                  }
    
                  leaf expire {
                    type yang:gauge32;
                    units "seconds";
                    description
                      "Indicates the duration time when this SA entry in
                     the cache times out.  MSDP is a periodic protocol;
                     the value can be used to check the state of the
                     SA cache.";
                  }
    
                  leaf holddown-interval {
                    type uint32;
                    units "seconds";
                    description
                      "Hold-down timer value for SA forwarding.";
                    reference
                      "RFC 3618: Multicast Source Discovery Protocol
                      (MSDP), Section 5.3";
    
                  }
    
                  leaf peer-learned-from {
                    type inet:ipv4-address;
                    description
                      "The address of the peer from which we learned this
                     SA information.";
                  }
    
                  leaf rpf-peer {
                    type inet:ipv4-address;
                    description
                      "The address is the SA's originating RP.";
                  }
                }  // container state-attributes
              }  // list entry
    
              action clear {
                description
                  "Clears MSDP SA cache entries.";
                input {
                  container entry {
                    presence
                      "If a particular entry is cleared.";
                    description
                      "The SA cache (S,G) or (*,G) entry to be cleared.
                     If this is not provided, all entries are cleared.";
                    leaf group {
                      type rt-types:ipv4-multicast-group-address;
                      mandatory true;
                      description
                        "The group address.";
                    }
    
                    leaf source-addr {
                      type rt-types:ipv4-multicast-source-address;
                      description
                        "The address of the multicast source to be cleared.
                       If this is not provided, then all entries related
                       to the given group are cleared.";
                    }
                  }  // container entry
    
                  leaf peer-address {
                    type inet:ipv4-address;
                    description
                      "The peer IP address from which MSDP SA cache entries
                     have been learned.  If this is not provided, entries
                     learned from all peers are cleared.";
                  }
    
                  leaf peer-as {
                    type inet:as-number;
                    description
                      "The ASN from which MSDP SA cache entries have been
                     learned.  If this is not provided, entries learned
                     from all ASes are cleared.";
                  }
                }
              }  // rpc clear
            }  // container sa-cache
          }  // container msdp
        }
      }  // module ietf-msdp
    

© 2023 YumaWorks, Inc. All rights reserved.