netconfcentral logo

openconfig-pim@2019-07-09



  module openconfig-pim {

    yang-version 1;

    namespace
      "http://openconfig.net/yang/pim";

    prefix oc-pim;

    import openconfig-pim-types {
      prefix oc-pim-types;
    }
    import openconfig-interfaces {
      prefix oc-if;
    }
    import openconfig-acl {
      prefix oc-acl;
    }
    import openconfig-types {
      prefix oc-types;
    }
    import openconfig-extensions {
      prefix oc-ext;
    }
    import ietf-inet-types {
      prefix inet;
    }

    organization "OpenConfig working group";

    contact
      "OpenConfig working group
www.openconfig.net";

    description
      "An OpenConfig model for Protocol Independent Multicast (PIM).";

    revision "2019-07-09" {
      description
        "Reindent to two spaces.
Ensure that timeticks64 is consistently expressed in nanoseconds.";
      reference
        "0.2.0";

    }

    revision "2018-11-21" {
      description
        "Add OpenConfig module metadata extensions.";
      reference
        "0.1.1";

    }

    revision "2018-02-09" {
      description "Initial revision.";
      reference
        "0.1.0";

    }

    oc-ext:openconfig-version "0.2.0";
    oc-ext:regexp-posix;
    oc-ext:catalog-organization "openconfig";
    oc-ext:origin "openconfig";

    grouping admin-config {
      description
        "Re-usable grouping to enable or disable a particular feature.";
      leaf enabled {
        type boolean;
        default "false";
        description
          "When set to true, the functionality within which this
leaf is defined is enabled, when set to false it is
explicitly disabled.";
      }
    }  // grouping admin-config

    grouping pim-counters-state {
      description
        "Counters related to PIM messages.";
      leaf hello-messages {
        type uint32;
        description
          "Number of hello messages received.";
        reference
          "RFC7761 4.9.2 page 108";

      }

      leaf join-prune-messages {
        type uint32;
        description
          "Number of join/prune messages received.";
        reference
          "RFC7761 4.5 page 44";

      }

      leaf bootstrap-messages {
        type uint32;
        description
          "Number of bootstrap router messages received.";
        reference
          "RFC7761 3.7 page 12";

      }
    }  // grouping pim-counters-state

    grouping pim-interface-config {
      description
        "Configuration data for PIM on each interface.";
      uses admin-config;

      leaf interface-id {
        type oc-if:interface-id;
        description
          "Reference to an interface on which PIM is enabled.";
      }

      leaf mode {
        type identityref {
          base oc-pim-types:PIM_MODE;
        }
        description
          "PIM mode to use when delivering multicast traffic via this
interface.";
      }

      leaf bsr-border {
        type boolean;
        default "false";
        description
          "When set to true the device will not send bootstrap router
messages over this interface. By default these are transmitted
over all PIM sparse mode (PIM-SM) enabled interfaces.";
      }

      leaf border-router {
        type boolean;
        default "false";
        description
          "When set to true the interface is set as MBR (multicast border
router) and allows multicast traffic from sources that are
outside of the PIM domain.";
      }

      leaf dr-priority {
        type oc-pim-types:dr-priority-type;
        description
          "The designated router priority of this interface. Larger always
preferred.";
      }

      leaf join-prune-interval {
        type oc-pim-types:pim-interval-type;
        description
          "Interval at which the router sends the PIM join/prune messages
toward the upstream RPF neighbor.";
      }

      leaf hello-interval {
        type oc-pim-types:pim-interval-type;
        description
          "Interval at which the router sends the PIM hello messages.";
      }

      leaf dead-timer {
        type uint16 {
          range "1..65535";
        }
        description
          "Number of missed hello messages after which a neighbor is
expired.";
      }
    }  // grouping pim-interface-config

    grouping pim-neighbor-state {
      description "PIM neighbor state.";
      leaf neighbor-address {
        type inet:ipv4-address;
        description
          "IPv4 address of neighbor router.";
      }

      leaf dr-address {
        type inet:ipv4-address;
        description
          "IPv4 address of designated router.";
      }

      leaf neighbor-established {
        type oc-types:timeticks64;
        description
          "This timestamp indicates the time that the
PIM neighbor adjacency established. It is expressed
relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).

The PIM session uptime can be computed by clients
as the difference between this value and the
current time in UTC.";
      }

      leaf neighbor-expires {
        type oc-types:timeticks64;
        description
          "This timestamp indicates the time that the
PIM neighbor adjacency will expire should hello
messages fail to arrive from the neighbor. The value
is expressed relative to the Unix Epoch (Jan 1, 1970
00:00:00 UTC).";
      }

      leaf mode {
        type identityref {
          base oc-pim-types:PIM_MODE;
        }
        description
          "PIM mode in use when delivering multicast traffic
via this neighbor.";
      }
    }  // grouping pim-neighbor-state

    grouping pim-neighbors-top {
      description
        "Details about PIM neighbors.";
      container neighbors {
        config false;
        description
          "Details about PIM neighbors.";
        list neighbor {
          key "neighbor-address";
          description
            "Details about a specific PIM neighbor.";
          leaf neighbor-address {
            type leafref {
              path
                "../state/neighbor-address";
            }
            description
              "IPv4 address of neighbor router.";
          }

          container state {
            config false;
            description
              "Details about a specific PIM neighbor.";
            uses pim-neighbor-state;
          }  // container state
        }  // list neighbor
      }  // container neighbors
    }  // grouping pim-neighbors-top

    grouping pim-interfaces-top {
      description
        "Configuration and state data for PIM on each interface.";
      container interfaces {
        description
          "Configuration and state data for PIM on each interface.";
        list interface {
          key "interface-id";
          description
            "This container defines interface PIM configuration and
state information.";
          leaf interface-id {
            type leafref {
              path "../config/interface-id";
            }
            description
              "Reference to an interface on which PIM is enabled.";
          }

          container config {
            description
              "PIM interface configuration.";
            uses pim-interface-config;
          }  // container config

          container state {
            config false;
            description
              "State information for PIM interfaces.";
            uses pim-interface-config;

            container counters {
              description
                "PIM counters for each interface.";
              uses pim-counters-state;
            }  // container counters
          }  // container state

          uses pim-neighbors-top;

          uses oc-if:interface-ref;
        }  // list interface
      }  // container interfaces
    }  // grouping pim-interfaces-top

    grouping pim-global-state {
      description
        "State and session data for PIM on each interface.";
      leaf neighbor-count {
        type uint8;
        description
          "Number of adjacent PIM neighbors.";
      }

      container counters {
        description "Global PIM counters.";
        uses pim-counters-state;
      }  // container counters
    }  // grouping pim-global-state

    grouping pim-sources-joined-top {
      description
        "List of multicast sources joined.";
      container sources-joined {
        config false;
        description
          "List of multicast sources joined.";
        list source {
          key "address";
          description
            "A multicast source that has been joined.";
          leaf address {
            type leafref {
              path "../state/address";
            }
            description
              "Source address of multicast.";
          }

          container state {
            config false;
            description
              "State for a multicast source that has been joined.";
            leaf address {
              type inet:ipv4-address;
              description
                "Source address of multicast.";
            }

            leaf group {
              type inet:ipv4-address;
              description
                "Multicast address.";
            }

            leaf upstream-interface-id {
              type oc-if:interface-id;
              description
                "The upstream interface for this multicast source.";
            }
          }  // container state
        }  // list source
      }  // container sources-joined
    }  // grouping pim-sources-joined-top

    grouping pim-global-ssm-config {
      description
        "Source specific multicast (SSM) configuration.";
      leaf ssm-ranges {
        type leafref {
          path
            "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:config/oc-acl:name";
        }
        description
          "List of accepted source specific multicast (SSM) address
ranges.";
      }
    }  // grouping pim-global-ssm-config

    grouping pim-global-rp-addresses-config {
      description
        "Defines rendezvous points for sparse mode multicast.";
      leaf address {
        type inet:ipv4-address;
        description
          "IPv4 address of rendezvous point.";
      }

      leaf multicast-groups {
        type string;
        description
          "List of multicast groups (multicast IP address ranges) for which
this entry will be used as a rendezvous point. When not
present the default is equivalent to all valid IP multicast
addresses.";
      }
    }  // grouping pim-global-rp-addresses-config

    grouping pim-global-top {
      description
        "Top level grouping for global PIM configuration.";
      container ssm {
        description
          "Source specific multicast (SSM).";
        container config {
          description
            "Configuration for source specific multicast (SSM).";
          uses pim-global-ssm-config;
        }  // container config

        container state {
          config false;
          description
            "State for source specific multicast (SSM).";
          uses pim-global-ssm-config;
        }  // container state
      }  // container ssm

      container rendezvous-points {
        description
          "Defines rendezvous points for sparse mode multicast.";
        list rendezvous-point {
          key "address";
          description
            "Defines a rendezvous point (RP) for sparse mode multicast.";
          leaf address {
            type leafref {
              path "../config/address";
            }
            description
              "IPv4 address of rendezvous point.";
          }

          container config {
            description
              "Rendezvous point configuration.";
            uses pim-global-rp-addresses-config;
          }  // container config

          container state {
            config false;
            description
              "Rendezvous point state.";
            uses pim-global-rp-addresses-config;
          }  // container state
        }  // list rendezvous-point
      }  // container rendezvous-points

      container state {
        config false;
        description "Global PIM state.";
        uses pim-global-state;
      }  // container state

      uses pim-sources-joined-top;
    }  // grouping pim-global-top

    grouping pim-top {
      description
        "Top-level grouping for PIM.";
      container pim {
        description
          "Top-level PIM configuration and operational state.";
        container global {
          description
            "This container defines global PIM configuration and state
information.";
          uses pim-global-top;
        }  // container global

        uses pim-interfaces-top;
      }  // container pim
    }  // grouping pim-top
  }  // module openconfig-pim