ietf-routing

This YANG module defines essential components for the management of a routing subsystem. The model fully conforms to the Networ...

  • Version: 2018-03-13

    ietf-routing@2018-03-13


    
      module ietf-routing {
    
        yang-version 1.1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-routing";
    
        prefix rt;
    
        import ietf-yang-types {
          prefix yang;
        }
        import ietf-interfaces {
          prefix if;
          description
            "An 'ietf-interfaces' module version that is compatible with
    the Network Management Datastore Architecture (NMDA)
    is required.";
        }
    
        organization
          "IETF NETMOD (Network Modeling) Working Group";
    
        contact
          "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
    WG List:  <mailto:rtgwg@ietf.org>
    
    Editor:   Ladislav Lhotka
    	  <mailto:lhotka@nic.cz>
    	  Acee Lindem
    	  <mailto:acee@cisco.com>
    	  Yingzhen Qu
    	  <mailto:yingzhen.qu@huawei.com>";
    
        description
          "This YANG module defines essential components for the management
    of a routing subsystem.  The model fully conforms to the Network
    Management Datastore Architecture (NMDA).
    
    Copyright (c) 2018 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 8349; see
    the RFC itself for full legal notices.";
    
        revision "2018-03-13" {
          description
            "Network Management Datastore Architecture (NMDA) revision.";
          reference
            "RFC 8349: A YANG Data Model for Routing Management
            	  (NMDA Version)";
    
        }
    
        revision "2016-11-04" {
          description "Initial revision.";
          reference
            "RFC 8022: A YANG Data Model for Routing Management";
    
        }
    
    
        feature multiple-ribs {
          description
            "This feature indicates that the server supports
    user-defined RIBs.
    
    Servers that do not advertise this feature SHOULD provide
    exactly one system-controlled RIB per supported address family
    and also make it the default RIB.  This RIB then appears as an
    entry in the list '/routing/ribs/rib'.";
        }
    
        feature router-id {
          description
            "This feature indicates that the server supports an explicit
    32-bit router ID that is used by some routing protocols.
    
    Servers that do not advertise this feature set a router ID
    algorithmically, usually to one of the configured IPv4
    addresses.  However, this algorithm is implementation
    specific.";
        }
    
        identity address-family {
          description
            "Base identity from which identities describing address
    families are derived.";
        }
    
        identity ipv4 {
          base address-family;
          description
            "This identity represents an IPv4 address family.";
        }
    
        identity ipv6 {
          base address-family;
          description
            "This identity represents an IPv6 address family.";
        }
    
        identity control-plane-protocol {
          description
            "Base identity from which control-plane protocol identities are
    derived.";
        }
    
        identity routing-protocol {
          base control-plane-protocol;
          description
            "Identity from which Layer 3 routing protocol identities are
    derived.";
        }
    
        identity direct {
          base routing-protocol;
          description
            "Routing pseudo-protocol that provides routes to directly
    connected networks.";
        }
    
        identity static {
          base routing-protocol;
          description
            "'Static' routing pseudo-protocol.";
        }
    
        typedef route-preference {
          type uint32;
          description
            "This type is used for route preferences.";
        }
    
        container routing {
          description
            "Configuration parameters for the routing subsystem.";
          leaf router-id {
            type yang:dotted-quad;
            description
              "A 32-bit number in the form of a dotted quad that is used by
    some routing protocols identifying a router.";
            reference
              "RFC 2328: OSPF Version 2";
    
          }
    
          container interfaces {
            config false;
            description
              "Network-layer interfaces used for routing.";
            leaf-list interface {
              type if:interface-ref;
              description
                "Each entry is a reference to the name of a configured
    network-layer interface.";
            }
          }  // container interfaces
    
          container control-plane-protocols {
            description
              "Support for control-plane protocol instances.";
            list control-plane-protocol {
              key "type name";
              description
                "Each entry contains a control-plane protocol instance.";
              leaf type {
                type identityref {
                  base control-plane-protocol;
                }
                description
                  "Type of the control-plane protocol -- an identity
    derived from the 'control-plane-protocol'
    base identity.";
              }
    
              leaf name {
                type string;
                description
                  "An arbitrary name of the control-plane protocol
    instance.";
              }
    
              leaf description {
                type string;
                description
                  "Textual description of the control-plane protocol
    instance.";
              }
    
              container static-routes {
                when
                  "derived-from-or-self(../type, 'rt:static')" {
                  description
                    "This container is only valid for the 'static' routing
    protocol.";
                }
                description
                  "Support for the 'static' pseudo-protocol.
    
    Address-family-specific modules augment this node with
    their lists of routes.";
                container ipv6 {
                  description
                    "Configuration of a 'static' pseudo-protocol instance
    consists of a list of routes.";
                  list route {
                    key "destination-prefix";
                    description
                      "A list of static routes.";
                    leaf destination-prefix {
                      type inet:ipv6-prefix;
                      mandatory true;
                      description
                        "IPv6 destination prefix.";
                    }
    
                    leaf description {
                      type string;
                      description
                        "Textual description of the route.";
                    }
    
                    container next-hop {
                      description
                        "Configuration of next-hop.";
                      choice next-hop-options {
                        mandatory true;
                        description
                          "Options for next hops in static routes.
    
    It is expected that further cases will be added through
    augments from other modules.";
                        case simple-next-hop {
                          description
                            "This case represents a simple next hop consisting of the
    next-hop address and/or outgoing interface.
    
    Modules for address families MUST augment this case with a
    leaf containing a next-hop address of that address
    family.";
                          leaf outgoing-interface {
                            type if:interface-ref;
                            description
                              "Name of the outgoing interface.";
                          }
    
                          leaf next-hop-address {
                            type inet:ipv6-address;
                            description
                              "IPv6 address of the next hop.";
                          }
                        }  // case simple-next-hop
                        leaf special-next-hop {
                          type enumeration {
                            enum "blackhole" {
                              value 0;
                              description
                                "Silently discard the packet.";
                            }
                            enum "unreachable" {
                              value 1;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the destination host is
    unreachable.";
                            }
                            enum "prohibit" {
                              value 2;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the communication is
    administratively prohibited.";
                            }
                            enum "receive" {
                              value 3;
                              description
                                "The packet will be received by the local system.";
                            }
                          }
                          description
                            "Options for special next hops.";
                        }
                        container next-hop-list {
                          description
                            "Container for multiple next hops.";
                          list next-hop {
                            key "index";
                            description
                              "An entry in a next-hop list.
    
    Modules for address families MUST augment this list
    with a leaf containing a next-hop address of that
    address family.";
                            leaf index {
                              type string;
                              description
                                "A user-specified identifier utilized to uniquely
    reference the next-hop entry in the next-hop list.
    The value of this index has no semantic meaning
    other than for referencing the entry.";
                            }
    
                            leaf outgoing-interface {
                              type if:interface-ref;
                              description
                                "Name of the outgoing interface.";
                            }
    
                            leaf next-hop-address {
                              type inet:ipv6-address;
                              description
                                "IPv6 address of the next hop.";
                            }
                          }  // list next-hop
                        }  // container next-hop-list
                      }  // choice next-hop-options
                    }  // container next-hop
                  }  // list route
                }  // container ipv6
              }  // container static-routes
    
              container mpls-ldp {
                must
                  "not (../../rt:control-plane-protocol[derived-from-or-self(rt:type, 'ldp:mpls-ldp')][rt:name!=current()/../rt:name])" {
                  description
                    "Only one LDP instance is allowed.";
                }
                description
                  "Containing configuration and operational data for the LDP
    protocol.";
                container global {
                  description
                    "Global attributes for LDP.";
                  container capability {
                    description
                      "Containing the LDP capability data.  The container is
    used for augmentations.";
                    reference
                      "RFC 5036: LDP Specification, Sec. 1.5.";
    
                  }  // container capability
    
                  container graceful-restart {
                    description
                      "Attributes for graceful restart.";
                    leaf enabled {
                      type boolean;
                      default "false";
                      description
                        "Enable or disable graceful restart.";
                    }
    
                    leaf reconnect-time {
                      type uint16 {
                        range "10..1800";
                      }
                      units "seconds";
                      default "120";
                      description
                        "Specifies the time interval that the remote LDP peer
    must wait for the local LDP peer to reconnect after
    the remote peer detects the LDP communication
    failure.";
                    }
    
                    leaf recovery-time {
                      type uint16 {
                        range "30..3600";
                      }
                      units "seconds";
                      default "120";
                      description
                        "Specifies the time interval, in seconds, that the
    remote LDP peer preserves its MPLS forwarding state
    after receiving the Initialization message from the
    restarted local LDP peer.";
                    }
    
                    leaf forwarding-holdtime {
                      type uint16 {
                        range "30..3600";
                      }
                      units "seconds";
                      default "180";
                      description
                        "Specifies the time interval, in seconds, before the
    termination of the recovery phase.";
                    }
                  }  // container graceful-restart
    
                  leaf lsr-id {
                    type rt-types:router-id;
                    description
                      "Specifies the value to act as the LDP LSR Id.
    If this attribute is not specified, LDP uses the router
    ID as determined by the system.";
                  }
    
                  container address-families {
                    description
                      "Per-address-family configuration and operational state.
    The address family can be either IPv4 or IPv6.";
                    container ipv4 {
                      presence
                        "Present if IPv4 is enabled, unless the
    'enabled' leaf is set to 'false'.";
                      description
                        "Containing data related to the IPv4 address family.";
                      leaf enabled {
                        type boolean;
                        default "true";
                        description
                          "'false' to disable the address family.";
                      }
    
                      leaf label-distribution-control-mode {
                        type enumeration {
                          enum "independent" {
                            value 0;
                            description
                              "Independent label distribution control.";
                          }
                          enum "ordered" {
                            value 1;
                            description
                              "Ordered label distribution control.";
                          }
                        }
                        config false;
                        description
                          "Label distribution control mode.";
                        reference
                          "RFC 5036: LDP Specification, Sec. 2.6.";
    
                      }
    
                      container bindings {
                        config false;
                        description
                          "LDP address and label binding information.";
                        list address {
                          key "address";
                          description
                            "List of address bindings learned by LDP.";
                          leaf address {
                            type inet:ipv4-address;
                            description
                              "The IPv4 address learned from an Address
    message received from or advertised to a peer.";
                          }
    
                          leaf advertisement-type {
                            type advertised-received;
                            description
                              "Received or advertised.";
                          }
    
                          container peer {
                            when
                              "../advertisement-type = 'received'" {
                              description
                                "Applicable for received address.";
                            }
                            description
                              "LDP peer from which this address is received.";
                            leaf lsr-id {
                              type leafref {
                                path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id";
                              }
                              description
                                "The LSR Id of the peer, as a portion of the peer LDP ID.";
                            }
    
                            leaf label-space-id {
                              type leafref {
                                path "../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id";
                              }
                              description
                                "The label space Id of the peer, as a portion of the peer
    LDP ID.";
                            }
                          }  // container peer
                        }  // list address
    
                        list fec-label {
                          key "fec";
                          description
                            "List of FEC-label bindings learned by LDP.";
                          leaf fec {
                            type inet:ipv4-prefix;
                            description
                              "The prefix FEC value in the FEC-Label binding,
    learned in a Label Mapping message received from
    or advertised to a peer.";
                          }
    
                          list peer {
                            key "lsr-id label-space-id advertisement-type";
                            description
                              "List of advertised and received peers.";
                            leaf lsr-id {
                              type leafref {
                                path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id";
                              }
                              description
                                "The LSR Id of the peer, as a portion of the peer LDP ID.";
                            }
    
                            leaf label-space-id {
                              type leafref {
                                path "../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id";
                              }
                              description
                                "The label space Id of the peer, as a portion of the peer
    LDP ID.";
                            }
    
                            leaf advertisement-type {
                              type advertised-received;
                              description
                                "Received or advertised.";
                            }
    
                            leaf label {
                              type rt-types:mpls-label;
                              description
                                "Advertised (outbound) or received (inbound)
    label.";
                            }
    
                            leaf used-in-forwarding {
                              type boolean;
                              description
                                "'true' if the label is used in forwarding.";
                            }
                          }  // list peer
                        }  // list fec-label
                      }  // container bindings
                    }  // container ipv4
                  }  // container address-families
                }  // container global
    
                container discovery {
                  description
                    "Neighbor-discovery configuration and operational state.";
                  container interfaces {
                    description
                      "A list of interfaces for LDP Basic Discovery.";
                    reference
                      "RFC 5036: LDP Specification, Sec. 2.4.1.";
    
                    leaf hello-holdtime {
                      type uint16 {
                        range "15..3600";
                      }
                      units "seconds";
                      default "15";
                      description
                        "The time interval for which an LDP link Hello adjacency
    is maintained in the absence of link Hello messages from
    the LDP neighbor.
    This leaf may be configured at the per-interface level or
    the global level, with precedence given to the value at the
    per-interface level.  If the leaf is not configured at
    either level, the default value at the global level is
    used.";
                    }
    
                    leaf hello-interval {
                      type uint16 {
                        range "5..1200";
                      }
                      units "seconds";
                      default "5";
                      description
                        "The interval between consecutive LDP link Hello messages
    used in basic LDP discovery.
    This leaf may be configured at the per-interface level or
    the global level, with precedence given to the value at the
    per-interface level.  If the leaf is not configured at
    either level, the default value at the global level is
    used.";
                    }
    
                    list interface {
                      key "name";
                      description
                        "List of LDP interfaces used for LDP Basic Discovery.";
                      leaf name {
                        type if:interface-ref;
                        must
                          "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4) or (/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" {
                          description
                            "Interface is IPv4 or IPv6.";
                        }
                        description
                          "The name of an LDP interface.";
                      }
    
                      leaf next-hello {
                        type uint16;
                        units "seconds";
                        config false;
                        description
                          "Time to send the next Hello message.";
                      }
    
                      container address-families {
                        description
                          "Container for address families.";
                        container ipv4 {
                          presence
                            "Present if IPv4 is enabled, unless the
    'enabled' leaf is set to 'false'.";
                          description
                            "IPv4 address family.";
                          leaf enabled {
                            type boolean;
                            default "true";
                            description
                              "Set to false to disable the address family on
    the interface.";
                          }
    
                          container hello-adjacencies {
                            config false;
                            description
                              "Containing a list of Hello adjacencies.";
                            list hello-adjacency {
                              key "adjacent-address";
                              config false;
                              description
                                "List of Hello adjacencies.";
                              leaf adjacent-address {
                                type inet:ipv4-address;
                                description
                                  "Neighbor address of the Hello adjacency.";
                              }
    
                              leaf-list flag {
                                type identityref {
                                  base adjacency-flag-base;
                                }
                                description
                                  "One or more flags to indicate whether the adjacency is
    actively created, passively accepted, or both.";
                              }
    
                              container hello-holdtime {
                                description
                                  "Containing Hello holdtime state information.";
                                leaf adjacent {
                                  type uint16;
                                  units
                                    "seconds";
                                  description
                                    "The holdtime value learned from the adjacent LSR.";
                                }
    
                                leaf negotiated {
                                  type uint16;
                                  units
                                    "seconds";
                                  description
                                    "The holdtime negotiated between this LSR and the adjacent
    LSR.";
                                }
    
                                leaf remaining {
                                  type uint16;
                                  units
                                    "seconds";
                                  description
                                    "The time remaining until the holdtime timer expires.";
                                }
                              }  // container hello-holdtime
    
                              leaf next-hello {
                                type uint16;
                                units "seconds";
                                description
                                  "The time when the next Hello message will be sent.";
                              }
    
                              container statistics {
                                description
                                  "Statistics objects.";
                                leaf discontinuity-time {
                                  type yang:date-and-time;
                                  mandatory
                                    true;
                                  description
                                    "The time on the most recent occasion at which any one or
    more of this interface's 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.";
                                }
    
                                leaf hello-received {
                                  type yang:counter64;
                                  description
                                    "The number of Hello messages received.";
                                }
    
                                leaf hello-dropped {
                                  type yang:counter64;
                                  description
                                    "The number of Hello messages dropped.";
                                }
                              }  // container statistics
    
                              container peer {
                                description
                                  "Reference to an LDP peer, by the LDP ID, which consists of
    the LSR Id and the label space Id.";
                                leaf lsr-id {
                                  type leafref {
                                    path "../../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id";
                                  }
                                  description
                                    "The LSR Id of the peer, as a portion of the peer LDP ID.";
                                }
    
                                leaf label-space-id {
                                  type leafref {
                                    path "../../../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id";
                                  }
                                  description
                                    "The label space Id of the peer, as a portion of the peer
    LDP ID.";
                                }
                              }  // container peer
                            }  // list hello-adjacency
                          }  // container hello-adjacencies
                        }  // container ipv4
                      }  // container address-families
                    }  // list interface
                  }  // container interfaces
    
                  container targeted {
                    description
                      "A list of targeted neighbors for extended discovery.";
                    leaf hello-holdtime {
                      type uint16 {
                        range "15..3600";
                      }
                      units "seconds";
                      default "45";
                      description
                        "The time interval for which an LDP targeted Hello
    adjacency is maintained in the absence of targeted
    Hello messages from an LDP neighbor.";
                    }
    
                    leaf hello-interval {
                      type uint16 {
                        range "5..3600";
                      }
                      units "seconds";
                      default "15";
                      description
                        "The interval between consecutive LDP targeted Hello
    messages used in extended LDP discovery.";
                    }
    
                    container hello-accept {
                      description
                        "LDP policy to control the acceptance of extended
    neighbor-discovery Hello messages.";
                      leaf enabled {
                        type boolean;
                        default "false";
                        description
                          "'true' to accept; 'false' to deny.";
                      }
                    }  // container hello-accept
    
                    container address-families {
                      description
                        "Container for address families.";
                      container ipv4 {
                        presence
                          "Present if IPv4 is enabled.";
                        description
                          "IPv4 address family.";
                        container hello-adjacencies {
                          config false;
                          description
                            "Containing a list of Hello adjacencies.";
                          list hello-adjacency {
                            key "local-address adjacent-address";
                            description
                              "List of Hello adjacencies.";
                            leaf local-address {
                              type inet:ipv4-address;
                              description
                                "Local address of the Hello adjacency.";
                            }
    
                            leaf adjacent-address {
                              type inet:ipv4-address;
                              description
                                "Neighbor address of the Hello adjacency.";
                            }
    
                            leaf-list flag {
                              type identityref {
                                base adjacency-flag-base;
                              }
                              description
                                "One or more flags to indicate whether the adjacency is
    actively created, passively accepted, or both.";
                            }
    
                            container hello-holdtime {
                              description
                                "Containing Hello holdtime state information.";
                              leaf adjacent {
                                type uint16;
                                units "seconds";
                                description
                                  "The holdtime value learned from the adjacent LSR.";
                              }
    
                              leaf negotiated {
                                type uint16;
                                units "seconds";
                                description
                                  "The holdtime negotiated between this LSR and the adjacent
    LSR.";
                              }
    
                              leaf remaining {
                                type uint16;
                                units "seconds";
                                description
                                  "The time remaining until the holdtime timer expires.";
                              }
                            }  // container hello-holdtime
    
                            leaf next-hello {
                              type uint16;
                              units "seconds";
                              description
                                "The time when the next Hello message will be sent.";
                            }
    
                            container statistics {
                              description
                                "Statistics objects.";
                              leaf discontinuity-time {
                                type yang:date-and-time;
                                mandatory true;
                                description
                                  "The time on the most recent occasion at which any one or
    more of this interface's 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.";
                              }
    
                              leaf hello-received {
                                type yang:counter64;
                                description
                                  "The number of Hello messages received.";
                              }
    
                              leaf hello-dropped {
                                type yang:counter64;
                                description
                                  "The number of Hello messages dropped.";
                              }
                            }  // container statistics
    
                            container peer {
                              description
                                "Reference to an LDP peer, by the LDP ID, which consists of
    the LSR Id and the label space Id.";
                              leaf lsr-id {
                                type leafref {
                                  path "../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id";
                                }
                                description
                                  "The LSR Id of the peer, as a portion of the peer LDP ID.";
                              }
    
                              leaf label-space-id {
                                type leafref {
                                  path "../../../../../../../../ldp:peers/ldp:peer[ldp:lsr-id=current()/../lsr-id]/ldp:label-space-id";
                                }
                                description
                                  "The label space Id of the peer, as a portion of the peer
    LDP ID.";
                              }
                            }  // container peer
                          }  // list hello-adjacency
                        }  // container hello-adjacencies
    
                        list target {
                          key "adjacent-address";
                          description
                            "Targeted discovery params.";
                          leaf adjacent-address {
                            type inet:ipv4-address;
                            description
                              "Configures a remote LDP neighbor for the
    extended LDP discovery.";
                          }
    
                          leaf enabled {
                            type boolean;
                            default "true";
                            description
                              "'true' to enable the target.";
                          }
    
                          leaf local-address {
                            type inet:ipv4-address;
                            description
                              "The local address used as the source address to
    send targeted Hello messages.
    If the value is not specified, the
    transport address is used as the source
    address.";
                          }
                        }  // list target
                      }  // container ipv4
                    }  // container address-families
                  }  // container targeted
                }  // container discovery
    
                container peers {
                  description
                    "Peers configuration attributes.";
                  container authentication {
                    description
                      "Containing authentication information.";
                    choice authentication-type {
                      description
                        "Choice of authentication.";
                      case password {
                        leaf key {
                          type string;
                          description
                            "This leaf specifies the authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                        }
    
                        leaf crypto-algorithm {
                          type identityref {
                            base key-chain:crypto-algorithm;
                          }
                          description
                            "Cryptographic algorithm associated with key.";
                        }
                      }  // case password
                    }  // choice authentication-type
                  }  // container authentication
    
                  leaf session-ka-holdtime {
                    type uint16 {
                      range "45..3600";
                    }
                    units "seconds";
                    default "180";
                    description
                      "The time interval after which an inactive LDP session
    terminates and the corresponding TCP session closes.
    Inactivity is defined as not receiving LDP packets from the
    peer.
    This leaf may be configured at the per-peer level or the
    global level, with precedence given to the value at the
    per-peer level.  If the leaf is not configured at either
    level, the default value at the global level is used.";
                  }
    
                  leaf session-ka-interval {
                    type uint16 {
                      range "15..1200";
                    }
                    units "seconds";
                    default "60";
                    description
                      "The interval between successive transmissions of KeepAlive
    packets.  Keepalive packets are only sent in the absence of
    other LDP packets transmitted over the LDP session.
    This leaf may be configured at the per-peer level or the
    global level, with precedence given to the value at the
    per-peer level.  If the leaf is not configured at either
    level, the default value at the global level is used.";
                  }
    
                  list peer {
                    key "lsr-id label-space-id";
                    description "List of peers.";
                    leaf lsr-id {
                      type rt-types:router-id;
                      description
                        "The LSR Id of the peer, used to identify the globally
    unique LSR.  This is the first four octets of the LDP
    ID.  This leaf is used together with the leaf
    'label-space-id' to form the LDP ID.";
                      reference
                        "RFC 5036: LDP Specification, Sec. 2.2.2.";
    
                    }
    
                    leaf label-space-id {
                      type uint16;
                      description
                        "The label space Id of the peer, used to identify a
    specific label space within the LSR.  This is the last
    two octets of the LDP ID.  This leaf is used together
    with the leaf 'lsr-id' to form the LDP ID.";
                      reference
                        "RFC 5036: LDP Specification, Sec. 2.2.2.";
    
                    }
    
                    container authentication {
                      description
                        "Containing authentication information.";
                      choice authentication-type {
                        description
                          "Choice of authentication.";
                        case password {
                          leaf key {
                            type string;
                            description
                              "This leaf specifies the authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                          }
    
                          leaf crypto-algorithm {
                            type identityref {
                              base key-chain:crypto-algorithm;
                            }
                            description
                              "Cryptographic algorithm associated with key.";
                          }
                        }  // case password
                      }  // choice authentication-type
                    }  // container authentication
    
                    container address-families {
                      description
                        "Per-vrf per-af params.";
                      container ipv4 {
                        presence
                          "Present if IPv4 is enabled.";
                        description
                          "IPv4 address family.";
                        container hello-adjacencies {
                          config false;
                          description
                            "Containing a list of Hello adjacencies.";
                          list hello-adjacency {
                            key "local-address adjacent-address";
                            description
                              "List of Hello adjacencies.";
                            leaf local-address {
                              type inet:ipv4-address;
                              description
                                "Local address of the Hello adjacency.";
                            }
    
                            leaf adjacent-address {
                              type inet:ipv4-address;
                              description
                                "Neighbor address of the Hello adjacency.";
                            }
    
                            leaf-list flag {
                              type identityref {
                                base adjacency-flag-base;
                              }
                              description
                                "One or more flags to indicate whether the adjacency is
    actively created, passively accepted, or both.";
                            }
    
                            container hello-holdtime {
                              description
                                "Containing Hello holdtime state information.";
                              leaf adjacent {
                                type uint16;
                                units "seconds";
                                description
                                  "The holdtime value learned from the adjacent LSR.";
                              }
    
                              leaf negotiated {
                                type uint16;
                                units "seconds";
                                description
                                  "The holdtime negotiated between this LSR and the adjacent
    LSR.";
                              }
    
                              leaf remaining {
                                type uint16;
                                units "seconds";
                                description
                                  "The time remaining until the holdtime timer expires.";
                              }
                            }  // container hello-holdtime
    
                            leaf next-hello {
                              type uint16;
                              units "seconds";
                              description
                                "The time when the next Hello message will be sent.";
                            }
    
                            container statistics {
                              description
                                "Statistics objects.";
                              leaf discontinuity-time {
                                type yang:date-and-time;
                                mandatory true;
                                description
                                  "The time on the most recent occasion at which any one or
    more of this interface's 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.";
                              }
    
                              leaf hello-received {
                                type yang:counter64;
                                description
                                  "The number of Hello messages received.";
                              }
    
                              leaf hello-dropped {
                                type yang:counter64;
                                description
                                  "The number of Hello messages dropped.";
                              }
                            }  // container statistics
    
                            leaf interface {
                              type if:interface-ref;
                              description
                                "Interface for this adjacency.";
                            }
                          }  // list hello-adjacency
                        }  // container hello-adjacencies
                      }  // container ipv4
                    }  // container address-families
    
                    container label-advertisement-mode {
                      config false;
                      description
                        "Label advertisement mode state.";
                      leaf local {
                        type label-adv-mode;
                        description
                          "Local Label Advertisement Mode.";
                      }
    
                      leaf peer {
                        type label-adv-mode;
                        description
                          "Peer Label Advertisement Mode.";
                      }
    
                      leaf negotiated {
                        type label-adv-mode;
                        description
                          "Negotiated Label Advertisement Mode.";
                      }
                    }  // container label-advertisement-mode
    
                    leaf next-keep-alive {
                      type uint16;
                      units "seconds";
                      config false;
                      description
                        "Time duration from now until sending the next KeepAlive
    message.";
                    }
    
                    container received-peer-state {
                      config false;
                      description
                        "Operational state information learned from the peer.";
                      container graceful-restart {
                        description
                          "Attributes for graceful restart.";
                        leaf enabled {
                          type boolean;
                          description
                            "Enable or disable graceful restart.
    This leaf may be configured at the per-peer level or the
    global level, with precedence given to the value at the
    per-peer level.  If the leaf is not configured at either
    level, the default value at the global level is used.";
                        }
    
                        leaf reconnect-time {
                          type uint16 {
                            range "10..1800";
                          }
                          units "seconds";
                          description
                            "Specifies the time interval that the remote LDP peer
    must wait for the local LDP peer to reconnect after the
    remote peer detects the LDP communication failure.
    This leaf may be configured at the per-peer level or the
    global level, with precedence given to the value at the
    per-peer level.  If the leaf is not configured at either
    level, the default value at the global level is used.";
                        }
    
                        leaf recovery-time {
                          type uint16 {
                            range "30..3600";
                          }
                          units "seconds";
                          description
                            "Specifies the time interval, in seconds, that the remote
    LDP peer preserves its MPLS forwarding state after
    receiving the Initialization message from the restarted
    local LDP peer.
    This leaf may be configured at the per-peer level or the
    global level, with precedence given to the value at the
    per-peer level.  If the leaf is not configured at either
    level, the default value at the global level is used.";
                        }
                      }  // container graceful-restart
    
                      container capability {
                        description
                          "Peer capability information.";
                        container end-of-lib {
                          description
                            "Peer's end-of-lib capability.";
                          leaf enabled {
                            type boolean;
                            description
                              "'true' if peer's end-of-lib capability is enabled.";
                          }
                        }  // container end-of-lib
    
                        container typed-wildcard-fec {
                          description
                            "Peer's typed-wildcard-fec capability.";
                          leaf enabled {
                            type boolean;
                            description
                              "'true' if peer's typed-wildcard-fec capability is
     enabled.";
                          }
                        }  // container typed-wildcard-fec
    
                        container upstream-label-assignment {
                          description
                            "Peer's upstream label assignment capability.";
                          leaf enabled {
                            type boolean;
                            description
                              "'true' if peer's upstream label assignment is
    enabled.";
                          }
                        }  // container upstream-label-assignment
                      }  // container capability
                    }  // container received-peer-state
    
                    container session-holdtime {
                      config false;
                      description
                        "Session holdtime state.";
                      leaf peer {
                        type uint16;
                        units "seconds";
                        description
                          "Peer holdtime.";
                      }
    
                      leaf negotiated {
                        type uint16;
                        units "seconds";
                        description
                          "Negotiated holdtime.";
                      }
    
                      leaf remaining {
                        type uint16;
                        units "seconds";
                        description
                          "Remaining holdtime.";
                      }
                    }  // container session-holdtime
    
                    leaf session-state {
                      type enumeration {
                        enum "non-existent" {
                          value 0;
                          description
                            "NON EXISTENT state.  Transport disconnected.";
                        }
                        enum "initialized" {
                          value 1;
                          description
                            "INITIALIZED state.";
                        }
                        enum "openrec" {
                          value 2;
                          description
                            "OPENREC state.";
                        }
                        enum "opensent" {
                          value 3;
                          description
                            "OPENSENT state.";
                        }
                        enum "operational" {
                          value 4;
                          description
                            "OPERATIONAL state.";
                        }
                      }
                      config false;
                      description
                        "Representing the operational status of the LDP session.";
                      reference
                        "RFC 5036: LDP Specification, Sec. 2.5.4.";
    
                    }
    
                    container tcp-connection {
                      config false;
                      description
                        "TCP connection state.";
                      leaf local-address {
                        type inet:ip-address;
                        description
                          "Local address.";
                      }
    
                      leaf local-port {
                        type inet:port-number;
                        description
                          "Local port number.";
                      }
    
                      leaf remote-address {
                        type inet:ip-address;
                        description
                          "Remote address.";
                      }
    
                      leaf remote-port {
                        type inet:port-number;
                        description
                          "Remote port number.";
                      }
                    }  // container tcp-connection
    
                    leaf up-time {
                      type rt-types:timeticks64;
                      config false;
                      description
                        "The number of time ticks (hundredths of a second) since the
    state of the session with the peer changed to
    OPERATIONAL.";
                    }
    
                    container statistics {
                      config false;
                      description
                        "Statistics objects.";
                      leaf discontinuity-time {
                        type yang:date-and-time;
                        mandatory true;
                        description
                          "The time on the most recent occasion at which any one or
    more of this interface's 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 received {
                        description
                          "Inbound statistics.";
                        leaf total-octets {
                          type yang:counter64;
                          description
                            "The total number of octets sent or received.";
                        }
    
                        leaf total-messages {
                          type yang:counter64;
                          description
                            "The number of messages sent or received.";
                        }
    
                        leaf address {
                          type yang:counter64;
                          description
                            "The number of Address messages sent or received.";
                        }
    
                        leaf address-withdraw {
                          type yang:counter64;
                          description
                            "The number of address-withdraw messages sent or received.";
                        }
    
                        leaf initialization {
                          type yang:counter64;
                          description
                            "The number of Initialization messages sent or received.";
                        }
    
                        leaf keepalive {
                          type yang:counter64;
                          description
                            "The number of KeepAlive messages sent or received.";
                        }
    
                        leaf label-abort-request {
                          type yang:counter64;
                          description
                            "The number of label-abort-request messages sent or
    received.";
                        }
    
                        leaf label-mapping {
                          type yang:counter64;
                          description
                            "The number of label-mapping messages sent or received.";
                        }
    
                        leaf label-release {
                          type yang:counter64;
                          description
                            "The number of label-release messages sent or received.";
                        }
    
                        leaf label-request {
                          type yang:counter64;
                          description
                            "The number of label-request messages sent or received.";
                        }
    
                        leaf label-withdraw {
                          type yang:counter64;
                          description
                            "The number of label-withdraw messages sent or received.";
                        }
    
                        leaf notification {
                          type yang:counter64;
                          description
                            "The number of notification messages sent or received.";
                        }
                      }  // container received
    
                      container sent {
                        description
                          "Outbound statistics.";
                        leaf total-octets {
                          type yang:counter64;
                          description
                            "The total number of octets sent or received.";
                        }
    
                        leaf total-messages {
                          type yang:counter64;
                          description
                            "The number of messages sent or received.";
                        }
    
                        leaf address {
                          type yang:counter64;
                          description
                            "The number of Address messages sent or received.";
                        }
    
                        leaf address-withdraw {
                          type yang:counter64;
                          description
                            "The number of address-withdraw messages sent or received.";
                        }
    
                        leaf initialization {
                          type yang:counter64;
                          description
                            "The number of Initialization messages sent or received.";
                        }
    
                        leaf keepalive {
                          type yang:counter64;
                          description
                            "The number of KeepAlive messages sent or received.";
                        }
    
                        leaf label-abort-request {
                          type yang:counter64;
                          description
                            "The number of label-abort-request messages sent or
    received.";
                        }
    
                        leaf label-mapping {
                          type yang:counter64;
                          description
                            "The number of label-mapping messages sent or received.";
                        }
    
                        leaf label-release {
                          type yang:counter64;
                          description
                            "The number of label-release messages sent or received.";
                        }
    
                        leaf label-request {
                          type yang:counter64;
                          description
                            "The number of label-request messages sent or received.";
                        }
    
                        leaf label-withdraw {
                          type yang:counter64;
                          description
                            "The number of label-withdraw messages sent or received.";
                        }
    
                        leaf notification {
                          type yang:counter64;
                          description
                            "The number of notification messages sent or received.";
                        }
                      }  // container sent
    
                      leaf total-addresses {
                        type uint32;
                        description
                          "The number of learned addresses.";
                      }
    
                      leaf total-labels {
                        type uint32;
                        description
                          "The number of learned labels.";
                      }
    
                      leaf total-fec-label-bindings {
                        type uint32;
                        description
                          "The number of learned label-address bindings.";
                      }
                    }  // container statistics
                  }  // list peer
                }  // container peers
              }  // container mpls-ldp
    
              container igmp-snooping-instance {
                if-feature igmp-snooping;
                description
                  "IGMP snooping instance to configure igmp-snooping.";
                leaf l2-service-type {
                  type l2-service-type;
                  default "bridge";
                  description
                    "It indicates bridge or other services.";
                }
    
                leaf enabled {
                  type boolean;
                  default "false";
                  description
                    "Set the value to true to enable IGMP and MLD snooping.";
                }
    
                leaf forwarding-table-type {
                  type enumeration {
                    enum "mac" {
                      value 0;
                      description
                        "MAC-based lookup mode.";
                    }
                    enum "ip" {
                      value 1;
                      description
                        "IP-based lookup mode.";
                    }
                  }
                  default "ip";
                  description
                    "The default forwarding table type is ip.";
                }
    
                leaf explicit-tracking {
                  if-feature explicit-tracking;
                  type boolean;
                  default "false";
                  description
                    "Track the IGMPv3 and MLDv2 snooping membership reports
    from individual hosts.  It contributes to saving network
    resources and shortening leave latency.";
                }
    
                leaf lite-exclude-filter {
                  if-feature lite-exclude-filter;
                  type empty;
                  description
                    "For IGMP snooping, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight IGMPv3 protocol, which simplifies the
    standard versions of IGMPv3.
    For MLD Snooping, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight MLDv2 protocol, which simplifies the
    standard versions of MLDv2.";
                  reference
                    "RFC 5790: Lightweight Internet Group Management Protocol
                    Version 3 (IGMPv3) and Multicast Listener Discovery Version
                    2 (MLDv2) Protocols";
    
                }
    
                leaf send-query {
                  type boolean;
                  default "false";
                  description
                    "When it is true, this switch will send out a periodic IGMP
    General Query Message or MLD General Query Message.";
                }
    
                leaf fast-leave {
                  if-feature fast-leave;
                  type empty;
                  description
                    "When fast leave is enabled, the software assumes
    that no more than one host is present on each VLAN port.";
                }
    
                leaf last-member-query-interval {
                  type uint16 {
                    range "10..10230";
                  }
                  units "deciseconds";
                  default "10";
                  description
                    "Last Member Query Interval, which may be tuned to modify
    the leave latency of the network.
    It is represented in units of 1/10 second.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Section 8.8";
    
                }
    
                leaf query-interval {
                  type uint16;
                  units "seconds";
                  default "125";
                  description
                    "The Query Interval is the interval between General Queries
    sent by the Querier.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.7, 8.2, and 8.14.2";
    
                }
    
                leaf query-max-response-time {
                  type uint16;
                  units "deciseconds";
                  default "100";
                  description
                    "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    It is represented in units of 1/10 second.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.1, 8.3, and 8.14.3";
    
                }
    
                leaf require-router-alert {
                  if-feature require-router-alert;
                  type boolean;
                  default "false";
                  description
                    "When the value is true, a router alert should exist
    in the IP header of the IGMP or MLD packet.  If it
    doesn't exist, the IGMP or MLD packet will be ignored.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 9.1, 9.2, and 9.3";
    
                }
    
                leaf robustness-variable {
                  type uint8 {
                    range "1..7";
                  }
                  default "2";
                  description
                    "Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.6, 8.1, and 8.14.1";
    
                }
    
                leaf-list static-bridge-mrouter-interface {
                  when
                    "derived-from-or-self(../l2-service-type,"ims:bridge")";
                  if-feature static-mrouter-interface;
                  type if:interface-ref;
                  description
                    "Static mrouter interface in bridge forwarding";
                }
    
                leaf igmp-version {
                  type uint8 {
                    range "1..3";
                  }
                  default "2";
                  description "IGMP version.";
                }
    
                leaf querier-source {
                  type inet:ipv4-address;
                  description
                    "The source address of the IGMP General Query message,
    which is sent out by this switch.";
                }
    
                list static-l2-multicast-group {
                  if-feature static-l2-multicast-group;
                  key "group source-addr";
                  description
                    "A static multicast route, (*,G) or (S,G).";
                  leaf group {
                    type rt-types:ipv4-multicast-group-address;
                    description
                      "Multicast group IPv4 address.";
                  }
    
                  leaf source-addr {
                    type rt-types:ipv4-multicast-source-address;
                    description
                      "Multicast source IPv4 address.";
                  }
    
                  leaf-list bridge-outgoing-interface {
                    when
                      "derived-from-or-self(../../l2-service-type,
                    "ims:bridge")";
                    type if:interface-ref;
                    description
                      "Outgoing interface in bridge forwarding.";
                  }
                }  // list static-l2-multicast-group
    
                leaf entries-count {
                  type yang:gauge32;
                  config false;
                  description
                    "The number of L2 multicast entries in IGMP and MLD
    snooping.";
                }
    
                leaf-list bridge-mrouter-interface {
                  when
                    "derived-from-or-self(../l2-service-type,"ims:bridge")";
                  type if:interface-ref;
                  config false;
                  description
                    "Indicates a list of mrouter interfaces dynamically learned
    in a bridge.  When this switch receives IGMP/MLD queries
    from a multicast router on an interface, the interface will
    become an mrouter interface for IGMP/MLD snooping.";
                }
    
                list group {
                  key "address";
                  config false;
                  description
                    "IGMP snooping information.";
                  leaf address {
                    type rt-types:ipv4-multicast-group-address;
                    description
                      "Multicast group IPv4 address.";
                  }
    
                  leaf mac-address {
                    type yang:phys-address;
                    description
                      "Destination MAC address for L2 multicast.";
                  }
    
                  leaf expire {
                    type rt-types:timer-value-seconds16;
                    units "seconds";
                    description
                      "The time left before multicast group timeout.";
                  }
    
                  leaf up-time {
                    type uint32;
                    units "seconds";
                    mandatory true;
                    description
                      "The time elapsed since the L2 multicast record was
    created.";
                  }
    
                  leaf last-reporter {
                    type inet:ipv4-address;
                    description
                      "Address of the last host that has sent a report to join
    the multicast group.";
                  }
    
                  list source {
                    key "address";
                    description
                      "Source IPv4 address for multicast stream.";
                    leaf address {
                      type rt-types:ipv4-multicast-source-address;
                      description
                        "Source IPv4 address for multicast stream.";
                    }
    
                    leaf-list bridge-outgoing-interface {
                      when
                        "derived-from-or-self(../../../l2-service-type,
                "ims:bridge")";
                      type if:interface-ref;
                      description
                        "Outgoing interface in bridge forwarding.";
                    }
    
                    leaf up-time {
                      type uint32;
                      units "seconds";
                      mandatory true;
                      description
                        "The time elapsed since L2 multicast record was created.";
                    }
    
                    leaf expire {
                      type rt-types:timer-value-seconds16;
                      units "seconds";
                      description
                        "The time left before multicast group timeout.";
                    }
    
                    leaf host-count {
                      if-feature explicit-tracking;
                      type yang:gauge32;
                      description
                        "The number of host addresses.";
                    }
    
                    leaf last-reporter {
                      type inet:ipv4-address;
                      description
                        "Address of the last host that has sent a report
    to join the multicast group.";
                    }
    
                    list host {
                      if-feature explicit-tracking;
                      key "address";
                      description
                        "List of multicast membership hosts
    of the specific multicast source group.";
                      leaf address {
                        type inet:ipv4-address;
                        description
                          "Multicast membership host address.";
                      }
    
                      leaf filter-mode {
                        type filter-mode-type;
                        mandatory true;
                        description
                          "Filter mode for a multicast membership
    host may be either include or exclude.";
                      }
                    }  // list host
                  }  // list source
                }  // list group
    
                container interfaces {
                  config false;
                  description
                    "Contains the interfaces associated with the IGMP snooping
    instance.";
                  list interface {
                    key "name";
                    description
                      "A list of interfaces associated with the IGMP snooping
    instance.";
                    leaf name {
                      type if:interface-ref;
                      description
                        "The name of the interface.";
                    }
    
                    container statistics {
                      description
                        "The interface statistics for IGMP snooping.";
                      leaf discontinuity-time {
                        type yang:date-and-time;
                        description
                          "The time on the most recent occasion at which any
    one or more of the statistic 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 received {
                        description
                          "Number of received snooped IGMP packets.";
                        leaf query-count {
                          type yang:counter64;
                          description
                            "The number of Membership Query messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf membership-report-v1-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Membership Report messages.";
                          reference
                            "RFC 1112: Host extensions for IP multicasting";
    
                        }
    
                        leaf membership-report-v2-count {
                          type yang:counter64;
                          description
                            "The number of Version 2 Membership Report messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf membership-report-v3-count {
                          type yang:counter64;
                          description
                            "The number of Version 3 Membership Report messages.";
                          reference
                            "RFC 3376: Internet Group Management Protocol, Version 3";
    
                        }
    
                        leaf leave-count {
                          type yang:counter64;
                          description
                            "The number of Leave Group messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf pim-hello-count {
                          type yang:counter64;
                          description
                            "The number of PIM hello messages.";
                          reference
                            "RFC 7761: Protocol Independent Multicast - Sparse Mode
                            (PIM-SM): Protocol Specification (Revised)";
    
                        }
                      }  // container received
    
                      container sent {
                        description
                          "Number of sent snooped IGMP packets.";
                        leaf query-count {
                          type yang:counter64;
                          description
                            "The number of Membership Query messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf membership-report-v1-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Membership Report messages.";
                          reference
                            "RFC 1112: Host extensions for IP multicasting";
    
                        }
    
                        leaf membership-report-v2-count {
                          type yang:counter64;
                          description
                            "The number of Version 2 Membership Report messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf membership-report-v3-count {
                          type yang:counter64;
                          description
                            "The number of Version 3 Membership Report messages.";
                          reference
                            "RFC 3376: Internet Group Management Protocol, Version 3";
    
                        }
    
                        leaf leave-count {
                          type yang:counter64;
                          description
                            "The number of Leave Group messages.";
                          reference
                            "RFC 2236: Internet Group Management Protocol, Version 2";
    
                        }
    
                        leaf pim-hello-count {
                          type yang:counter64;
                          description
                            "The number of PIM hello messages.";
                          reference
                            "RFC 7761: Protocol Independent Multicast - Sparse Mode
                            (PIM-SM): Protocol Specification (Revised)";
    
                        }
                      }  // container sent
                    }  // container statistics
                  }  // list interface
                }  // container interfaces
    
                action clear-igmp-snooping-groups {
                  if-feature action-clear-groups;
                  description
                    "Clear IGMP snooping cache tables.";
                  input {
                    leaf group {
                      type union {
                        type enumeration {
                          enum "all-groups" {
                            value 0;
                            description
                              "All multicast group addresses.";
                          }
                        }
                        type rt-types:ipv4-multicast-group-address;
                      }
                      mandatory true;
                      description
                        "Multicast group IPv4 address.  If value
    'all-groups' is specified, all IGMP snooping
    group entries are cleared for the specified source
    address.";
                    }
    
                    leaf source {
                      type rt-types:ipv4-multicast-source-address;
                      mandatory true;
                      description
                        "Multicast source IPv4 address.  If value '*' is
    specified, all IGMP snooping source-group tables
    are cleared.";
                    }
                  }
                }  // rpc clear-igmp-snooping-groups
              }  // container igmp-snooping-instance
    
              container mld-snooping-instance {
                if-feature mld-snooping;
                description
                  "MLD snooping instance to configure mld-snooping.";
                leaf l2-service-type {
                  type l2-service-type;
                  default "bridge";
                  description
                    "It indicates bridge or other services.";
                }
    
                leaf enabled {
                  type boolean;
                  default "false";
                  description
                    "Set the value to true to enable IGMP and MLD snooping.";
                }
    
                leaf forwarding-table-type {
                  type enumeration {
                    enum "mac" {
                      value 0;
                      description
                        "MAC-based lookup mode.";
                    }
                    enum "ip" {
                      value 1;
                      description
                        "IP-based lookup mode.";
                    }
                  }
                  default "ip";
                  description
                    "The default forwarding table type is ip.";
                }
    
                leaf explicit-tracking {
                  if-feature explicit-tracking;
                  type boolean;
                  default "false";
                  description
                    "Track the IGMPv3 and MLDv2 snooping membership reports
    from individual hosts.  It contributes to saving network
    resources and shortening leave latency.";
                }
    
                leaf lite-exclude-filter {
                  if-feature lite-exclude-filter;
                  type empty;
                  description
                    "For IGMP snooping, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight IGMPv3 protocol, which simplifies the
    standard versions of IGMPv3.
    For MLD Snooping, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight MLDv2 protocol, which simplifies the
    standard versions of MLDv2.";
                  reference
                    "RFC 5790: Lightweight Internet Group Management Protocol
                    Version 3 (IGMPv3) and Multicast Listener Discovery Version
                    2 (MLDv2) Protocols";
    
                }
    
                leaf send-query {
                  type boolean;
                  default "false";
                  description
                    "When it is true, this switch will send out a periodic IGMP
    General Query Message or MLD General Query Message.";
                }
    
                leaf fast-leave {
                  if-feature fast-leave;
                  type empty;
                  description
                    "When fast leave is enabled, the software assumes
    that no more than one host is present on each VLAN port.";
                }
    
                leaf last-member-query-interval {
                  type uint16 {
                    range "10..10230";
                  }
                  units "deciseconds";
                  default "10";
                  description
                    "Last Member Query Interval, which may be tuned to modify
    the leave latency of the network.
    It is represented in units of 1/10 second.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Section 8.8";
    
                }
    
                leaf query-interval {
                  type uint16;
                  units "seconds";
                  default "125";
                  description
                    "The Query Interval is the interval between General Queries
    sent by the Querier.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.7, 8.2, and 8.14.2";
    
                }
    
                leaf query-max-response-time {
                  type uint16;
                  units "deciseconds";
                  default "100";
                  description
                    "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    It is represented in units of 1/10 second.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.1, 8.3, and 8.14.3";
    
                }
    
                leaf require-router-alert {
                  if-feature require-router-alert;
                  type boolean;
                  default "false";
                  description
                    "When the value is true, a router alert should exist
    in the IP header of the IGMP or MLD packet.  If it
    doesn't exist, the IGMP or MLD packet will be ignored.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 9.1, 9.2, and 9.3";
    
                }
    
                leaf robustness-variable {
                  type uint8 {
                    range "1..7";
                  }
                  default "2";
                  description
                    "Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.";
                  reference
                    "RFC 3376: Internet Group Management Protocol, Version 3,
                    Sections 4.1.6, 8.1, and 8.14.1";
    
                }
    
                leaf-list static-bridge-mrouter-interface {
                  when
                    "derived-from-or-self(../l2-service-type,"ims:bridge")";
                  if-feature static-mrouter-interface;
                  type if:interface-ref;
                  description
                    "Static mrouter interface in bridge forwarding";
                }
    
                leaf mld-version {
                  type uint8 {
                    range "1..2";
                  }
                  default "2";
                  description "MLD version.";
                }
    
                leaf querier-source {
                  type inet:ipv6-address;
                  description
                    "The source address of MLD General Query message, which
    is sent out by this switch.";
                }
    
                list static-l2-multicast-group {
                  if-feature static-l2-multicast-group;
                  key "group source-addr";
                  description
                    "A static multicast route, (*,G) or (S,G).";
                  leaf group {
                    type rt-types:ipv6-multicast-group-address;
                    description
                      "Multicast group IPv6 address.";
                  }
    
                  leaf source-addr {
                    type rt-types:ipv6-multicast-source-address;
                    description
                      "Multicast source IPv6 address.";
                  }
    
                  leaf-list bridge-outgoing-interface {
                    when
                      "derived-from-or-self(../../l2-service-type,
                    "ims:bridge")";
                    type if:interface-ref;
                    description
                      "Outgoing interface in bridge forwarding.";
                  }
                }  // list static-l2-multicast-group
    
                leaf entries-count {
                  type yang:gauge32;
                  config false;
                  description
                    "The number of L2 multicast entries in IGMP and MLD
    snooping.";
                }
    
                leaf-list bridge-mrouter-interface {
                  when
                    "derived-from-or-self(../l2-service-type,"ims:bridge")";
                  type if:interface-ref;
                  config false;
                  description
                    "Indicates a list of mrouter interfaces dynamically learned
    in a bridge.  When this switch receives IGMP/MLD queries
    from a multicast router on an interface, the interface will
    become an mrouter interface for IGMP/MLD snooping.";
                }
    
                list group {
                  key "address";
                  config false;
                  description
                    "MLD snooping statistics information.";
                  leaf address {
                    type rt-types:ipv6-multicast-group-address;
                    description
                      "Multicast group IPv6 address.";
                  }
    
                  leaf mac-address {
                    type yang:phys-address;
                    description
                      "Destination MAC address for L2 multicast.";
                  }
    
                  leaf expire {
                    type rt-types:timer-value-seconds16;
                    units "seconds";
                    description
                      "The time left before multicast group timeout.";
                  }
    
                  leaf up-time {
                    type uint32;
                    units "seconds";
                    mandatory true;
                    description
                      "The time elapsed since the L2 multicast record was
    created.";
                  }
    
                  leaf last-reporter {
                    type inet:ipv6-address;
                    description
                      "Address of the last host that has sent report
    to join the multicast group.";
                  }
    
                  list source {
                    key "address";
                    description
                      "Source IPv6 address for multicast stream.";
                    leaf address {
                      type rt-types:ipv6-multicast-source-address;
                      description
                        "Source IPv6 address for multicast stream.";
                    }
    
                    leaf-list bridge-outgoing-interface {
                      when
                        "derived-from-or-self(../../../l2-service-type,
                "ims:bridge")";
                      type if:interface-ref;
                      description
                        "Outgoing interface in bridge forwarding.";
                    }
    
                    leaf up-time {
                      type uint32;
                      units "seconds";
                      mandatory true;
                      description
                        "The time elapsed since L2 multicast record was created.";
                    }
    
                    leaf expire {
                      type rt-types:timer-value-seconds16;
                      units "seconds";
                      description
                        "The time left before multicast group timeout.";
                    }
    
                    leaf host-count {
                      if-feature explicit-tracking;
                      type yang:gauge32;
                      description
                        "The number of host addresses.";
                    }
    
                    leaf last-reporter {
                      type inet:ipv6-address;
                      description
                        "Address of the last host that has sent report
    to join the multicast group.";
                    }
    
                    list host {
                      if-feature explicit-tracking;
                      key "address";
                      description
                        "List of multicast membership hosts
    of the specific multicast source group.";
                      leaf address {
                        type inet:ipv6-address;
                        description
                          "Multicast membership host address.";
                      }
    
                      leaf filter-mode {
                        type filter-mode-type;
                        mandatory true;
                        description
                          "Filter mode for a multicast membership
    host may be either include or exclude.";
                      }
                    }  // list host
                  }  // list source
                }  // list group
    
                container interfaces {
                  config false;
                  description
                    "Contains the interfaces associated with the MLD snooping
    instance.";
                  list interface {
                    key "name";
                    description
                      "A list of interfaces associated with the MLD snooping
    instance.";
                    leaf name {
                      type if:interface-ref;
                      description
                        "The name of the interface.";
                    }
    
                    container statistics {
                      description
                        "The interface statistics for MLD snooping.";
                      leaf discontinuity-time {
                        type yang:date-and-time;
                        description
                          "The time on the most recent occasion at which
    any one or more of the statistic 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 received {
                        description
                          "Number of received snooped MLD packets.";
                        leaf query-count {
                          type yang:counter64;
                          description
                            "The number of Multicast Listener Query messages.";
                          reference
                            "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                            for IPv6";
    
                        }
    
                        leaf report-v1-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Multicast Listener Report.";
                          reference
                            "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
    
                        }
    
                        leaf report-v2-count {
                          type yang:counter64;
                          description
                            "The number of Version 2 Multicast Listener Report.";
                          reference
                            "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                            for IPv6";
    
                        }
    
                        leaf done-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Multicast Listener Done.";
                          reference
                            "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
    
                        }
    
                        leaf pim-hello-count {
                          type yang:counter64;
                          description
                            "The number of PIM hello messages.";
                          reference
                            "RFC 7761: Protocol Independent Multicast - Sparse Mode
                            (PIM-SM): Protocol Specification (Revised)";
    
                        }
                      }  // container received
    
                      container sent {
                        description
                          "Number of sent snooped MLD packets.";
                        leaf query-count {
                          type yang:counter64;
                          description
                            "The number of Multicast Listener Query messages.";
                          reference
                            "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                            for IPv6";
    
                        }
    
                        leaf report-v1-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Multicast Listener Report.";
                          reference
                            "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
    
                        }
    
                        leaf report-v2-count {
                          type yang:counter64;
                          description
                            "The number of Version 2 Multicast Listener Report.";
                          reference
                            "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                            for IPv6";
    
                        }
    
                        leaf done-count {
                          type yang:counter64;
                          description
                            "The number of Version 1 Multicast Listener Done.";
                          reference
                            "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
    
                        }
    
                        leaf pim-hello-count {
                          type yang:counter64;
                          description
                            "The number of PIM hello messages.";
                          reference
                            "RFC 7761: Protocol Independent Multicast - Sparse Mode
                            (PIM-SM): Protocol Specification (Revised)";
    
                        }
                      }  // container sent
                    }  // container statistics
                  }  // list interface
                }  // container interfaces
    
                action clear-mld-snooping-groups {
                  if-feature action-clear-groups;
                  description
                    "Clear MLD snooping cache tables.";
                  input {
                    leaf group {
                      type union {
                        type enumeration {
                          enum "all-groups" {
                            value 0;
                            description
                              "All multicast group addresses.";
                          }
                        }
                        type rt-types:ipv6-multicast-group-address;
                      }
                      mandatory true;
                      description
                        "Multicast group IPv6 address.  If value 'all-groups'
    is specified, all MLD snooping group entries are
    cleared for the specified source address.";
                    }
    
                    leaf source {
                      type rt-types:ipv6-multicast-source-address;
                      mandatory true;
                      description
                        "Multicast source IPv6 address.  If value '*' is
    specified, all MLD snooping source-group tables
    are cleared.";
                    }
                  }
                }  // rpc clear-mld-snooping-groups
              }  // container mld-snooping-instance
    
              container bfd {
                description
                  "BFD top-level container.";
                container summary {
                  config false;
                  description
                    "BFD session statistics summary.";
                  leaf number-of-sessions {
                    type yang:gauge32;
                    description
                      "Number of BFD sessions.";
                  }
    
                  leaf number-of-sessions-up {
                    type yang:gauge32;
                    description
                      "Number of BFD sessions currently in the 'Up' state
    (as defined in RFC 5880).";
                  }
    
                  leaf number-of-sessions-down {
                    type yang:gauge32;
                    description
                      "Number of BFD sessions currently in the 'Down' or 'Init'
    state but not 'adminDown' (as defined in RFC 5880).";
                  }
    
                  leaf number-of-sessions-admin-down {
                    type yang:gauge32;
                    description
                      "Number of BFD sessions currently in the 'adminDown' state
    (as defined in RFC 5880).";
                  }
                }  // container summary
    
                container ip-sh {
                  description
                    "BFD IP single-hop top-level container.";
                  container summary {
                    config false;
                    description
                      "BFD session statistics summary.";
                    leaf number-of-sessions {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions.";
                    }
    
                    leaf number-of-sessions-up {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Up' state
    (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Down' or 'Init'
    state but not 'adminDown' (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-admin-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'adminDown' state
    (as defined in RFC 5880).";
                    }
                  }  // container summary
    
                  container sessions {
                    description
                      "BFD IP single-hop sessions.";
                    list session {
                      key "interface dest-addr";
                      description
                        "List of IP single-hop sessions.";
                      leaf interface {
                        type if:interface-ref;
                        description
                          "Interface on which the BFD session is running.";
                      }
    
                      leaf dest-addr {
                        type inet:ip-address;
                        description
                          "IP address of the peer.";
                      }
    
                      leaf source-addr {
                        type inet:ip-address;
                        description
                          "Local IP address.";
                      }
    
                      leaf local-multiplier {
                        type multiplier;
                        default "3";
                        description
                          "Multiplier transmitted by the local system.";
                      }
    
                      choice interval-config-type {
                        default
                          "tx-rx-intervals";
                        description
                          "Two interval values or one value used for both transmit and
    receive.";
                        case tx-rx-intervals {
                          leaf desired-min-tx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval of control packets.";
                          }
    
                          leaf required-min-rx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Required minimum receive interval of control packets.";
                          }
                        }  // case tx-rx-intervals
    
                        case single-interval {
                          if-feature single-minimum-interval;
                          leaf min-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                          }
                        }  // case single-interval
                      }  // choice interval-config-type
    
                      leaf demand-enabled {
                        if-feature demand-mode;
                        type boolean;
                        default "false";
                        description
                          "To enable Demand mode.";
                      }
    
                      leaf admin-down {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the BFD session is administratively
    down.";
                      }
    
                      container authentication {
                        if-feature authentication;
                        presence
                          "Enables BFD authentication (see Section 6.7
    of RFC 5880).";
                        description
                          "Parameters for BFD authentication.";
                        reference
                          "RFC 5880: Bidirectional Forwarding Detection (BFD),
                          Section 6.7";
    
                        leaf key-chain {
                          type key-chain:key-chain-ref;
                          description
                            "Name of the 'key-chain' as per RFC 8177.";
                        }
    
                        leaf meticulous {
                          type boolean;
                          description
                            "Enables a meticulous mode as per Section 6.7 of
    RFC 5880.";
                        }
                      }  // container authentication
    
                      leaf path-type {
                        type identityref {
                          base path-type;
                        }
                        config false;
                        description
                          "BFD path type.  This indicates the path type that BFD is
    running on.";
                      }
    
                      leaf ip-encapsulation {
                        type boolean;
                        config false;
                        description
                          "Indicates whether BFD encapsulation uses IP.";
                      }
    
                      leaf local-discriminator {
                        type discriminator;
                        config false;
                        description
                          "Local discriminator.";
                      }
    
                      leaf remote-discriminator {
                        type discriminator;
                        config false;
                        description
                          "Remote discriminator.";
                      }
    
                      leaf remote-multiplier {
                        type multiplier;
                        config false;
                        description
                          "Remote multiplier.";
                      }
    
                      leaf demand-capability {
                        if-feature demand-mode;
                        type boolean;
                        config false;
                        description
                          "Local Demand mode capability.";
                      }
    
                      leaf source-port {
                        when
                          "../ip-encapsulation = 'true'" {
                          description
                            "Source port valid only when IP encapsulation is used.";
                        }
                        type inet:port-number;
                        config false;
                        description
                          "Source UDP port.";
                      }
    
                      leaf dest-port {
                        when
                          "../ip-encapsulation = 'true'" {
                          description
                            "Destination port valid only when IP encapsulation
    is used.";
                        }
                        type inet:port-number;
                        config false;
                        description
                          "Destination UDP port.";
                      }
    
                      container session-running {
                        config false;
                        description
                          "BFD 'session-running' information.";
                        leaf session-index {
                          type uint32;
                          description
                            "An index used to uniquely identify BFD sessions.";
                        }
    
                        leaf local-state {
                          type state;
                          description
                            "Local state.";
                        }
    
                        leaf remote-state {
                          type state;
                          description
                            "Remote state.";
                        }
    
                        leaf local-diagnostic {
                          type iana-bfd-types:diagnostic;
                          description
                            "Local diagnostic.";
                        }
    
                        leaf remote-diagnostic {
                          type iana-bfd-types:diagnostic;
                          description
                            "Remote diagnostic.";
                        }
    
                        leaf remote-authenticated {
                          type boolean;
                          description
                            "Indicates whether incoming BFD control packets are
    authenticated.";
                        }
    
                        leaf remote-authentication-type {
                          when
                            "../remote-authenticated = 'true'" {
                            description
                              "Only valid when incoming BFD control packets are
    authenticated.";
                          }
                          if-feature authentication;
                          type iana-bfd-types:auth-type;
                          description
                            "Authentication type of incoming BFD control packets.";
                        }
    
                        leaf detection-mode {
                          type enumeration {
                            enum
                              "async-with-echo" {
                              value 1;
                              description
                                "Async with echo.";
                            }
                            enum
                              "async-without-echo" {
                              value 2;
                              description
                                "Async without echo.";
                            }
                            enum
                              "demand-with-echo" {
                              value 3;
                              description
                                "Demand with echo.";
                            }
                            enum
                              "demand-without-echo" {
                              value 4;
                              description
                                "Demand without echo.";
                            }
                          }
                          description
                            "Detection mode.";
                        }
    
                        leaf negotiated-tx-interval {
                          type uint32;
                          units "microseconds";
                          description
                            "Negotiated transmit interval.";
                        }
    
                        leaf negotiated-rx-interval {
                          type uint32;
                          units "microseconds";
                          description
                            "Negotiated receive interval.";
                        }
    
                        leaf detection-time {
                          type uint32;
                          units "microseconds";
                          description
                            "Detection time.";
                        }
    
                        leaf echo-tx-interval-in-use {
                          when
                            "../../path-type = 'bfd-types:path-ip-sh'" {
                            description
                              "Echo is supported for IP single-hop only.";
                          }
                          if-feature echo-mode;
                          type uint32;
                          units "microseconds";
                          description
                            "Echo transmit interval in use.";
                        }
                      }  // container session-running
    
                      container session-statistics {
                        config false;
                        description
                          "BFD per-session statistics.";
                        leaf create-time {
                          type yang:date-and-time;
                          description
                            "Time and date when this session was created.";
                        }
    
                        leaf last-down-time {
                          type yang:date-and-time;
                          description
                            "Time and date of the last time this session went down.";
                        }
    
                        leaf last-up-time {
                          type yang:date-and-time;
                          description
                            "Time and date of the last time this session went up.";
                        }
    
                        leaf down-count {
                          type yang:counter32;
                          description
                            "The number of times this session has transitioned to the
    'down' state.";
                        }
    
                        leaf admin-down-count {
                          type yang:counter32;
                          description
                            "The number of times this session has transitioned to the
    'admin-down' state.";
                        }
    
                        leaf receive-packet-count {
                          type yang:counter64;
                          description
                            "Count of received packets in this session.  This includes
    valid and invalid received packets.";
                        }
    
                        leaf send-packet-count {
                          type yang:counter64;
                          description
                            "Count of sent packets in this session.";
                        }
    
                        leaf receive-invalid-packet-count {
                          type yang:counter64;
                          description
                            "Count of invalid received packets in this session.";
                        }
    
                        leaf send-failed-packet-count {
                          type yang:counter64;
                          description
                            "Count of packets that failed to be sent in this session.";
                        }
                      }  // container session-statistics
    
                      leaf role {
                        type identityref {
                          base bfd-unsol:role;
                        }
                        config false;
                        description "Role.";
                      }
                    }  // list session
                  }  // container sessions
    
                  list interfaces {
                    key "interface";
                    description
                      "List of interfaces.";
                    leaf interface {
                      type if:interface-ref;
                      description
                        "BFD information for this interface.";
                    }
    
                    container authentication {
                      if-feature authentication;
                      presence
                        "Enables BFD authentication (see Section 6.7
    of RFC 5880).";
                      description
                        "Parameters for BFD authentication.";
                      reference
                        "RFC 5880: Bidirectional Forwarding Detection (BFD),
                        Section 6.7";
    
                      leaf key-chain {
                        type key-chain:key-chain-ref;
                        description
                          "Name of the 'key-chain' as per RFC 8177.";
                      }
    
                      leaf meticulous {
                        type boolean;
                        description
                          "Enables a meticulous mode as per Section 6.7 of
    RFC 5880.";
                      }
                    }  // container authentication
    
                    container unsolicited {
                      description
                        "BFD IP single-hop interface unsolicited top-level
    container.";
                      leaf enabled {
                        type boolean;
                        default "false";
                        description
                          "Unsolicited BFD is enabled on this interface.";
                      }
    
                      leaf local-multiplier {
                        if-feature bfd-unsol:unsolicited-params-per-interface;
                        type bfd-types:multiplier;
                        description
                          "Multiplier transmitted by the local system.  Defaults to
    ../../unsolicited/local-multiplier.
    A multiplier configured under an interface takes
    precedence over the multiplier configured at the global
    level.";
                      }
    
                      choice interval-config-type {
                        if-feature bfd-unsol:unsolicited-params-per-interface;
                        description
                          "Two interval values or one value used for both transmit
    and receive.  Defaults to
    ../../unsolicited/interval-config-type.  An interval
    configured under an interface takes precedence over any
    interval configured at the global level.";
                        case tx-rx-intervals {
                          leaf desired-min-tx-interval {
                            type uint32;
                            units "microseconds";
                            description
                              "Desired minimum transmit interval of control
    packets.";
                          }
    
                          leaf required-min-rx-interval {
                            type uint32;
                            units "microseconds";
                            description
                              "Required minimum receive interval of control
    packets.";
                          }
                        }  // case tx-rx-intervals
    
                        case single-interval {
                          if-feature bfd-types:single-minimum-interval;
                          leaf min-interval {
                            type uint32;
                            units "microseconds";
                            description
                              "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                          }
                        }  // case single-interval
                      }  // choice interval-config-type
                    }  // container unsolicited
                  }  // list interfaces
    
                  container unsolicited {
                    description
                      "BFD IP single-hop unsolicited top-level container.";
                    leaf local-multiplier {
                      type multiplier;
                      default "3";
                      description
                        "Multiplier transmitted by the local system.";
                    }
    
                    choice interval-config-type {
                      default "tx-rx-intervals";
                      description
                        "Two interval values or one value used for both transmit and
    receive.";
                      case tx-rx-intervals {
                        leaf desired-min-tx-interval {
                          type uint32;
                          units "microseconds";
                          default "1000000";
                          description
                            "Desired minimum transmit interval of control packets.";
                        }
    
                        leaf required-min-rx-interval {
                          type uint32;
                          units "microseconds";
                          default "1000000";
                          description
                            "Required minimum receive interval of control packets.";
                        }
                      }  // case tx-rx-intervals
    
                      case single-interval {
                        if-feature single-minimum-interval;
                        leaf min-interval {
                          type uint32;
                          units "microseconds";
                          default "1000000";
                          description
                            "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                        }
                      }  // case single-interval
                    }  // choice interval-config-type
                  }  // container unsolicited
                }  // container ip-sh
    
                container ip-mh {
                  description
                    "BFD IP multihop top-level container.";
                  container summary {
                    config false;
                    description
                      "BFD session statistics summary.";
                    leaf number-of-sessions {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions.";
                    }
    
                    leaf number-of-sessions-up {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Up' state
    (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Down' or 'Init'
    state but not 'adminDown' (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-admin-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'adminDown' state
    (as defined in RFC 5880).";
                    }
                  }  // container summary
    
                  container session-groups {
                    description
                      "BFD IP multihop session groups.";
                    list session-group {
                      key "source-addr dest-addr";
                      description
                        "Group of BFD IP multihop sessions (for ECMP).  A
    group of sessions is between one source and one
    destination.  Each session has a different field
    in the UDP/IP header for ECMP.";
                      leaf source-addr {
                        type inet:ip-address;
                        description
                          "Local IP address.";
                      }
    
                      leaf dest-addr {
                        type inet:ip-address;
                        description
                          "IP address of the peer.";
                      }
    
                      leaf local-multiplier {
                        type multiplier;
                        default "3";
                        description
                          "Multiplier transmitted by the local system.";
                      }
    
                      choice interval-config-type {
                        default
                          "tx-rx-intervals";
                        description
                          "Two interval values or one value used for both transmit and
    receive.";
                        case tx-rx-intervals {
                          leaf desired-min-tx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval of control packets.";
                          }
    
                          leaf required-min-rx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Required minimum receive interval of control packets.";
                          }
                        }  // case tx-rx-intervals
    
                        case single-interval {
                          if-feature single-minimum-interval;
                          leaf min-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                          }
                        }  // case single-interval
                      }  // choice interval-config-type
    
                      leaf demand-enabled {
                        if-feature demand-mode;
                        type boolean;
                        default "false";
                        description
                          "To enable Demand mode.";
                      }
    
                      leaf admin-down {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the BFD session is administratively
    down.";
                      }
    
                      container authentication {
                        if-feature authentication;
                        presence
                          "Enables BFD authentication (see Section 6.7
    of RFC 5880).";
                        description
                          "Parameters for BFD authentication.";
                        reference
                          "RFC 5880: Bidirectional Forwarding Detection (BFD),
                          Section 6.7";
    
                        leaf key-chain {
                          type key-chain:key-chain-ref;
                          description
                            "Name of the 'key-chain' as per RFC 8177.";
                        }
    
                        leaf meticulous {
                          type boolean;
                          description
                            "Enables a meticulous mode as per Section 6.7 of
    RFC 5880.";
                        }
                      }  // container authentication
    
                      leaf tx-ttl {
                        type bfd-types:hops;
                        default "255";
                        description
                          "Hop count of outgoing BFD control packets.";
                      }
    
                      leaf rx-ttl {
                        type bfd-types:hops;
                        mandatory true;
                        description
                          "Minimum allowed hop count value for incoming BFD
    control packets.  Control packets whose hop count is
    lower than this value are dropped.";
                      }
    
                      list sessions {
                        config false;
                        description
                          "The multiple BFD sessions between a source and a
    destination.";
                        leaf path-type {
                          type identityref {
                            base path-type;
                          }
                          config false;
                          description
                            "BFD path type.  This indicates the path type that BFD is
    running on.";
                        }
    
                        leaf ip-encapsulation {
                          type boolean;
                          config false;
                          description
                            "Indicates whether BFD encapsulation uses IP.";
                        }
    
                        leaf local-discriminator {
                          type discriminator;
                          config false;
                          description
                            "Local discriminator.";
                        }
    
                        leaf remote-discriminator {
                          type discriminator;
                          config false;
                          description
                            "Remote discriminator.";
                        }
    
                        leaf remote-multiplier {
                          type multiplier;
                          config false;
                          description
                            "Remote multiplier.";
                        }
    
                        leaf demand-capability {
                          if-feature demand-mode;
                          type boolean;
                          config false;
                          description
                            "Local Demand mode capability.";
                        }
    
                        leaf source-port {
                          when
                            "../ip-encapsulation = 'true'" {
                            description
                              "Source port valid only when IP encapsulation is used.";
                          }
                          type inet:port-number;
                          config false;
                          description
                            "Source UDP port.";
                        }
    
                        leaf dest-port {
                          when
                            "../ip-encapsulation = 'true'" {
                            description
                              "Destination port valid only when IP encapsulation
    is used.";
                          }
                          type inet:port-number;
                          config false;
                          description
                            "Destination UDP port.";
                        }
    
                        container session-running {
                          config false;
                          description
                            "BFD 'session-running' information.";
                          leaf session-index {
                            type uint32;
                            description
                              "An index used to uniquely identify BFD sessions.";
                          }
    
                          leaf local-state {
                            type state;
                            description
                              "Local state.";
                          }
    
                          leaf remote-state {
                            type state;
                            description
                              "Remote state.";
                          }
    
                          leaf local-diagnostic {
                            type iana-bfd-types:diagnostic;
                            description
                              "Local diagnostic.";
                          }
    
                          leaf remote-diagnostic {
                            type iana-bfd-types:diagnostic;
                            description
                              "Remote diagnostic.";
                          }
    
                          leaf remote-authenticated {
                            type boolean;
                            description
                              "Indicates whether incoming BFD control packets are
    authenticated.";
                          }
    
                          leaf remote-authentication-type {
                            when
                              "../remote-authenticated = 'true'" {
                              description
                                "Only valid when incoming BFD control packets are
    authenticated.";
                            }
                            if-feature authentication;
                            type iana-bfd-types:auth-type;
                            description
                              "Authentication type of incoming BFD control packets.";
                          }
    
                          leaf detection-mode {
                            type enumeration {
                              enum
                                "async-with-echo" {
                                value 1;
                                description
                                  "Async with echo.";
                              }
                              enum
                                "async-without-echo" {
                                value 2;
                                description
                                  "Async without echo.";
                              }
                              enum
                                "demand-with-echo" {
                                value 3;
                                description
                                  "Demand with echo.";
                              }
                              enum
                                "demand-without-echo" {
                                value 4;
                                description
                                  "Demand without echo.";
                              }
                            }
                            description
                              "Detection mode.";
                          }
    
                          leaf negotiated-tx-interval {
                            type uint32;
                            units "microseconds";
                            description
                              "Negotiated transmit interval.";
                          }
    
                          leaf negotiated-rx-interval {
                            type uint32;
                            units "microseconds";
                            description
                              "Negotiated receive interval.";
                          }
    
                          leaf detection-time {
                            type uint32;
                            units "microseconds";
                            description
                              "Detection time.";
                          }
    
                          leaf echo-tx-interval-in-use {
                            when
                              "../../path-type = 'bfd-types:path-ip-sh'" {
                              description
                                "Echo is supported for IP single-hop only.";
                            }
                            if-feature echo-mode;
                            type uint32;
                            units "microseconds";
                            description
                              "Echo transmit interval in use.";
                          }
                        }  // container session-running
    
                        container session-statistics {
                          config false;
                          description
                            "BFD per-session statistics.";
                          leaf create-time {
                            type yang:date-and-time;
                            description
                              "Time and date when this session was created.";
                          }
    
                          leaf last-down-time {
                            type yang:date-and-time;
                            description
                              "Time and date of the last time this session went down.";
                          }
    
                          leaf last-up-time {
                            type yang:date-and-time;
                            description
                              "Time and date of the last time this session went up.";
                          }
    
                          leaf down-count {
                            type yang:counter32;
                            description
                              "The number of times this session has transitioned to the
    'down' state.";
                          }
    
                          leaf admin-down-count {
                            type yang:counter32;
                            description
                              "The number of times this session has transitioned to the
    'admin-down' state.";
                          }
    
                          leaf receive-packet-count {
                            type yang:counter64;
                            description
                              "Count of received packets in this session.  This includes
    valid and invalid received packets.";
                          }
    
                          leaf send-packet-count {
                            type yang:counter64;
                            description
                              "Count of sent packets in this session.";
                          }
    
                          leaf receive-invalid-packet-count {
                            type yang:counter64;
                            description
                              "Count of invalid received packets in this session.";
                          }
    
                          leaf send-failed-packet-count {
                            type yang:counter64;
                            description
                              "Count of packets that failed to be sent in this session.";
                          }
                        }  // container session-statistics
                      }  // list sessions
                    }  // list session-group
                  }  // container session-groups
                }  // container ip-mh
    
                container ip-sh {
                  description
                    "BFD IP single-hop top-level container.";
                  container summary {
                    config false;
                    description
                      "BFD session statistics summary.";
                    leaf number-of-sessions {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions.";
                    }
    
                    leaf number-of-sessions-up {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Up' state
    (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'Down' or 'Init'
    state but not 'adminDown' (as defined in RFC 5880).";
                    }
    
                    leaf number-of-sessions-admin-down {
                      type yang:gauge32;
                      description
                        "Number of BFD sessions currently in the 'adminDown' state
    (as defined in RFC 5880).";
                    }
                  }  // container summary
    
                  container sessions {
                    description
                      "BFD IP single-hop sessions.";
                    list session {
                      key "interface dest-addr";
                      description
                        "List of IP single-hop sessions.";
                      leaf interface {
                        type if:interface-ref;
                        description
                          "Interface on which the BFD session is running.";
                      }
    
                      leaf dest-addr {
                        type inet:ip-address;
                        description
                          "IP address of the peer.";
                      }
    
                      leaf source-addr {
                        type inet:ip-address;
                        description
                          "Local IP address.";
                      }
    
                      leaf local-multiplier {
                        type multiplier;
                        default "3";
                        description
                          "Multiplier transmitted by the local system.";
                      }
    
                      choice interval-config-type {
                        default
                          "tx-rx-intervals";
                        description
                          "Two interval values or one value used for both transmit and
    receive.";
                        case tx-rx-intervals {
                          leaf desired-min-tx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval of control packets.";
                          }
    
                          leaf required-min-rx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Required minimum receive interval of control packets.";
                          }
                        }  // case tx-rx-intervals
    
                        case single-interval {
                          if-feature single-minimum-interval;
                          leaf min-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                          }
                        }  // case single-interval
                      }  // choice interval-config-type
    
                      leaf demand-enabled {
                        if-feature demand-mode;
                        type boolean;
                        default "false";
                        description
                          "To enable Demand mode.";
                      }
    
                      leaf admin-down {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the BFD session is administratively
    down.";
                      }
    
                      container authentication {
                        if-feature authentication;
                        presence
                          "Enables BFD authentication (see Section 6.7
    of RFC 5880).";
                        description
                          "Parameters for BFD authentication.";
                        reference
                          "RFC 5880: Bidirectional Forwarding Detection (BFD),
                          Section 6.7";
    
                        leaf key-chain {
                          type key-chain:key-chain-ref;
                          description
                            "Name of the 'key-chain' as per RFC 8177.";
                        }
    
                        leaf meticulous {
                          type boolean;
                          description
                            "Enables a meticulous mode as per Section 6.7 of
    RFC 5880.";
                        }
                      }  // container authentication
    
                      leaf path-type {
                        type identityref {
                          base path-type;
                        }
                        config false;
                        description
                          "BFD path type.  This indicates the path type that BFD is
    running on.";
                      }
    
                      leaf ip-encapsulation {
                        type boolean;
                        config false;
                        description
                          "Indicates whether BFD encapsulation uses IP.";
                      }
    
                      leaf local-discriminator {
                        type discriminator;
                        config false;
                        description
                          "Local discriminator.";
                      }
    
                      leaf remote-discriminator {
                        type discriminator;
                        config false;
                        description
                          "Remote discriminator.";
                      }
    
                      leaf remote-multiplier {
                        type multiplier;
                        config false;
                        description
                          "Remote multiplier.";
                      }
    
                      leaf demand-capability {
                        if-feature demand-mode;
                        type boolean;
                        config false;
                        description
                          "Local Demand mode capability.";
                      }
    
                      leaf source-port {
                        when
                          "../ip-encapsulation = 'true'" {
                          description
                            "Source port valid only when IP encapsulation is used.";
                        }
                        type inet:port-number;
                        config false;
                        description
                          "Source UDP port.";
                      }
    
                      leaf dest-port {
                        when
                          "../ip-encapsulation = 'true'" {
                          description
                            "Destination port valid only when IP encapsulation
    is used.";
                        }
                        type inet:port-number;
                        config false;
                        description
                          "Destination UDP port.";
                      }
    
                      container session-running {
                        config false;
                        description
                          "BFD 'session-running' information.";
                        leaf session-index {
                          type uint32;
                          description
                            "An index used to uniquely identify BFD sessions.";
                        }
    
                        leaf local-state {
                          type state;
                          description
                            "Local state.";
                        }
    
                        leaf remote-state {
                          type state;
                          description
                            "Remote state.";
                        }
    
                        leaf local-diagnostic {
                          type iana-bfd-types:diagnostic;
                          description
                            "Local diagnostic.";
                        }
    
                        leaf remote-diagnostic {
                          type iana-bfd-types:diagnostic;
                          description
                            "Remote diagnostic.";
                        }
    
                        leaf remote-authenticated {
                          type boolean;
                          description
                            "Indicates whether incoming BFD control packets are
    authenticated.";
                        }
    
                        leaf remote-authentication-type {
                          when
                            "../remote-authenticated = 'true'" {
                            description
                              "Only valid when incoming BFD control packets are
    authenticated.";
                          }
                          if-feature authentication;
                          type iana-bfd-types:auth-type;
                          description
                            "Authentication type of incoming BFD control packets.";
                        }
    
                        leaf detection-mode {
                          type enumeration {
                            enum
                              "async-with-echo" {
                              value 1;
                              description
                                "Async with echo.";
                            }
                            enum
                              "async-without-echo" {
                              value 2;
                              description
                                "Async without echo.";
                            }
                            enum
                              "demand-with-echo" {
                              value 3;
                              description
                                "Demand with echo.";
                            }
                            enum
                              "demand-without-echo" {
                              value 4;
                              description
                                "Demand without echo.";
                            }
                          }
                          description
                            "Detection mode.";
                        }
    
                        leaf negotiated-tx-interval {
                          type uint32;
                          units "microseconds";
                          description
                            "Negotiated transmit interval.";
                        }
    
                        leaf negotiated-rx-interval {
                          type uint32;
                          units "microseconds";
                          description
                            "Negotiated receive interval.";
                        }
    
                        leaf detection-time {
                          type uint32;
                          units "microseconds";
                          description
                            "Detection time.";
                        }
    
                        leaf echo-tx-interval-in-use {
                          when
                            "../../path-type = 'bfd-types:path-ip-sh'" {
                            description
                              "Echo is supported for IP single-hop only.";
                          }
                          if-feature echo-mode;
                          type uint32;
                          units "microseconds";
                          description
                            "Echo transmit interval in use.";
                        }
                      }  // container session-running
    
                      container session-statistics {
                        config false;
                        description
                          "BFD per-session statistics.";
                        leaf create-time {
                          type yang:date-and-time;
                          description
                            "Time and date when this session was created.";
                        }
    
                        leaf last-down-time {
                          type yang:date-and-time;
                          description
                            "Time and date of the last time this session went down.";
                        }
    
                        leaf last-up-time {
                          type yang:date-and-time;
                          description
                            "Time and date of the last time this session went up.";
                        }
    
                        leaf down-count {
                          type yang:counter32;
                          description
                            "The number of times this session has transitioned to the
    'down' state.";
                        }
    
                        leaf admin-down-count {
                          type yang:counter32;
                          description
                            "The number of times this session has transitioned to the
    'admin-down' state.";
                        }
    
                        leaf receive-packet-count {
                          type yang:counter64;
                          description
                            "Count of received packets in this session.  This includes
    valid and invalid received packets.";
                        }
    
                        leaf send-packet-count {
                          type yang:counter64;
                          description
                            "Count of sent packets in this session.";
                        }
    
                        leaf receive-invalid-packet-count {
                          type yang:counter64;
                          description
                            "Count of invalid received packets in this session.";
                        }
    
                        leaf send-failed-packet-count {
                          type yang:counter64;
                          description
                            "Count of packets that failed to be sent in this session.";
                        }
                      }  // container session-statistics
                    }  // list session
                  }  // container sessions
    
                  list interfaces {
                    key "interface";
                    description
                      "List of interfaces.";
                    leaf interface {
                      type if:interface-ref;
                      description
                        "BFD information for this interface.";
                    }
    
                    container authentication {
                      if-feature authentication;
                      presence
                        "Enables BFD authentication (see Section 6.7
    of RFC 5880).";
                      description
                        "Parameters for BFD authentication.";
                      reference
                        "RFC 5880: Bidirectional Forwarding Detection (BFD),
                        Section 6.7";
    
                      leaf key-chain {
                        type key-chain:key-chain-ref;
                        description
                          "Name of the 'key-chain' as per RFC 8177.";
                      }
    
                      leaf meticulous {
                        type boolean;
                        description
                          "Enables a meticulous mode as per Section 6.7 of
    RFC 5880.";
                      }
                    }  // container authentication
                  }  // list interfaces
                }  // container ip-sh
              }  // container bfd
    
              container ospf {
                description
                  "OSPF protocol instance.";
                leaf address-family {
                  when
                    "derived-from-or-self(../../rt:type, 'ospfv3')" {
                    description
                      "Only applicable to OSPFv3.";
                  }
                  type iana-rt-types:address-family;
                  description
                    "Address family of the instance.";
                }
    
                leaf enabled {
                  type boolean;
                  default "true";
                  description
                    "Enables/disables the protocol.";
                }
    
                leaf explicit-router-id {
                  if-feature explicit-router-id;
                  type rt-types:router-id;
                  description
                    "Defined in RFC 2328.  A 32-bit number
    that uniquely identifies the router.";
                  reference
                    "RFC 2328: OSPF Version 2";
    
                }
    
                container preference {
                  description
                    "Route preference configuration.  In many
    implementations, preference is referred to as
    administrative distance.";
                  reference
                    "RFC 8349: A YANG Data Model for Routing Management
                    (NMDA Version)";
    
                  choice scope {
                    description
                      "Options for expressing preference
    as single or multiple values.";
                    leaf all {
                      type uint8;
                      description
                        "Preference for intra-area, inter-area, and
    external routes.";
                    }
    
                    case multi-values {
                      choice granularity {
                        description
                          "Options for expressing preference
    for intra-area and inter-area routes.";
                        case detail {
                          leaf intra-area {
                            type uint8;
                            description
                              "Preference for intra-area routes.";
                          }
    
                          leaf inter-area {
                            type uint8;
                            description
                              "Preference for inter-area routes.";
                          }
                        }  // case detail
                        leaf internal {
                          type uint8;
                          description
                            "Preference for both intra-area and
    inter-area routes.";
                        }
                      }  // choice granularity
    
                      leaf external {
                        type uint8;
                        description
                          "Preference for AS external and NSSA routes.";
                      }
                    }  // case multi-values
                  }  // choice scope
                }  // container preference
    
                container nsr {
                  if-feature nsr;
                  description
                    "Non-Stop Routing (NSR) configuration state.";
                  leaf enabled {
                    type boolean;
                    description
                      "Enables/disables NSR.";
                  }
                }  // container nsr
    
                container graceful-restart {
                  if-feature graceful-restart;
                  description
                    "Graceful restart configuration state.";
                  reference
                    "RFC 3623: Graceful OSPF Restart
                     RFC 5187: OSPFv3 Graceful Restart";
    
                  leaf enabled {
                    type boolean;
                    description
                      "Enables/disables graceful restart as defined in RFC 3623
    for OSPFv2 and RFC 5187 for OSPFv3.";
                  }
    
                  leaf helper-enabled {
                    type boolean;
                    description
                      "Enables graceful restart helper support for restarting
    routers (Section 3 of RFC 3623).";
                    reference
                      "RFC 3623: Graceful OSPF Restart, Section 3";
    
                  }
    
                  leaf restart-interval {
                    type uint16 {
                      range "1..1800";
                    }
                    units "seconds";
                    default "120";
                    description
                      "Interval during which to attempt graceful restart prior
    to failing (seconds) (Appendix B.1 of RFC 3623).";
                    reference
                      "RFC 3623: Graceful OSPF Restart, Appendix B.1";
    
                  }
    
                  leaf helper-strict-lsa-checking {
                    type boolean;
                    description
                      "Terminates graceful restart when an LSA topology change
    is detected (Appendix B.2 of RFC 3623).";
                    reference
                      "RFC 3623: Graceful OSPF Restart, Appendix B.2";
    
                  }
                }  // container graceful-restart
    
                container auto-cost {
                  if-feature auto-cost;
                  description
                    "Interface auto-cost configuration state.";
                  leaf enabled {
                    type boolean;
                    description
                      "Enables/disables interface auto-cost.";
                  }
    
                  leaf reference-bandwidth {
                    when "../enabled = 'true'" {
                      description
                        "Only when auto-cost is enabled.";
                    }
                    type uint32 {
                      range "1..4294967";
                    }
                    units "Mbits";
                    description
                      "Configures reference bandwidth used to automatically
    determine interface cost (Mbits).  The cost is the
    reference bandwidth divided by the interface speed,
    with 1 being the minimum cost.";
                  }
                }  // container auto-cost
    
                container spf-control {
                  description
                    "SPF calculation control.";
                  leaf paths {
                    if-feature max-ecmp;
                    type uint16 {
                      range "1..65535";
                    }
                    description
                      "Maximum number of Equal-Cost Multi-Path (ECMP) paths.";
                  }
    
                  container ietf-spf-delay {
                    if-feature ietf-spf-delay;
                    description
                      "IETF SPF delay algorithm configuration.";
                    leaf initial-delay {
                      type uint32;
                      units "milliseconds";
                      default "50";
                      description
                        "Delay used while in the 'QUIET' state (milliseconds).";
                    }
    
                    leaf short-delay {
                      type uint32;
                      units "milliseconds";
                      default "200";
                      description
                        "Delay used while in the 'SHORT_WAIT' state (milliseconds).";
                    }
    
                    leaf long-delay {
                      type uint32;
                      units "milliseconds";
                      default "5000";
                      description
                        "Delay used while in the 'LONG_WAIT' state (milliseconds).";
                    }
    
                    leaf hold-down {
                      type uint32;
                      units "milliseconds";
                      default "10000";
                      description
                        "This timer value defines the period without any changes
    for the IGP to be considered stable (milliseconds).";
                    }
    
                    leaf time-to-learn {
                      type uint32;
                      units "milliseconds";
                      default "500";
                      description
                        "Duration used to learn all the IGP events
    related to a single network event (milliseconds).";
                    }
    
                    leaf current-state {
                      type enumeration {
                        enum "quiet" {
                          value 0;
                          description
                            "'QUIET' state.";
                        }
                        enum "short-wait" {
                          value 1;
                          description
                            "'SHORT_WAIT' state.";
                        }
                        enum "long-wait" {
                          value 2;
                          description
                            "'LONG_WAIT' state.";
                        }
                      }
                      config false;
                      description
                        "Current SPF back-off algorithm state.";
                    }
    
                    leaf remaining-time-to-learn {
                      type rt-types:timer-value-milliseconds;
                      config false;
                      description
                        "Remaining time until the time-to-learn timer fires.";
                    }
    
                    leaf remaining-hold-down {
                      type rt-types:timer-value-milliseconds;
                      config false;
                      description
                        "Remaining time until the hold-down timer fires.";
                    }
    
                    leaf last-event-received {
                      type yang:timestamp;
                      config false;
                      description
                        "Time of the last SPF triggering event.";
                    }
    
                    leaf next-spf-time {
                      type yang:timestamp;
                      config false;
                      description
                        "Time when the next SPF has been scheduled.";
                    }
    
                    leaf last-spf-time {
                      type yang:timestamp;
                      config false;
                      description
                        "Time of the last SPF computation.";
                    }
                  }  // container ietf-spf-delay
                }  // container spf-control
    
                container database-control {
                  description
                    "Database maintenance control.";
                  leaf max-lsa {
                    if-feature max-lsa;
                    type uint32 {
                      range "1..4294967294";
                    }
                    description
                      "Maximum number of OSPF LSAs the router will accept.";
                  }
                }  // container database-control
    
                container stub-router {
                  if-feature stub-router;
                  description
                    "Sets the maximum metric configuration.";
                  choice trigger {
                    description
                      "Specific triggers that will enable stub router state.";
                    container always {
                      presence
                        "Enables unconditional stub router support";
                      description
                        "Unconditional stub router state (advertises
    transit links with 'MaxLinkMetric').";
                      reference
                        "RFC 6987: OSPF Stub Router Advertisement";
    
                    }  // container always
                  }  // choice trigger
                }  // container stub-router
    
                container mpls {
                  description
                    "OSPF MPLS configuration state.";
                  container te-rid {
                    if-feature te-rid;
                    description
                      "Stable OSPF Router IP address used for TE.";
                    leaf ipv4-router-id {
                      type inet:ipv4-address;
                      description
                        "Explicitly configures a TE IPv4 Router ID.";
                    }
    
                    leaf ipv6-router-id {
                      type inet:ipv6-address;
                      description
                        "Explicitly configures a TE IPv6 Router ID.";
                    }
                  }  // container te-rid
    
                  container ldp {
                    description
                      "OSPF MPLS LDP configuration state.";
                    leaf igp-sync {
                      if-feature ldp-igp-sync;
                      type boolean;
                      description
                        "Enables LDP IGP synchronization.";
                    }
                  }  // container ldp
                }  // container mpls
    
                container fast-reroute {
                  if-feature fast-reroute;
                  description
                    "This container may be augmented with global
    parameters for IP-FRR.";
                  container lfa {
                    if-feature lfa;
                    description
                      "This container may be augmented with
    global parameters for Loop-Free Alternates (LFAs).
    Container creation has no effect on LFA activation.";
                  }  // container lfa
                }  // container fast-reroute
    
                container node-tags {
                  if-feature node-tag;
                  description
                    "Container for node administrative tags.";
                  list node-tag {
                    key "tag";
                    description
                      "List of node tags.";
                    leaf tag {
                      type uint32;
                      description
                        "Node tag value.";
                    }
                  }  // list node-tag
                }  // container node-tags
    
                leaf router-id {
                  type rt-types:router-id;
                  config false;
                  description
                    "Defined in RFC 2328.  A 32-bit number
    that uniquely identifies the router.";
                  reference
                    "RFC 2328: OSPF Version 2";
    
                }
    
                container local-rib {
                  config false;
                  description "Local RIB.";
                  list route {
                    key "prefix";
                    description
                      "OSPF instance's Local Routes.";
                    leaf prefix {
                      type inet:ip-prefix;
                      description
                        "Destination prefix.";
                    }
    
                    container next-hops {
                      description
                        "Next hops for the route.";
                      list next-hop {
                        description
                          "List of next hops for the route.";
                        leaf outgoing-interface {
                          type if:interface-ref;
                          description
                            "Name of the outgoing interface.";
                        }
    
                        leaf next-hop {
                          type inet:ip-address;
                          description
                            "Address of the next hop.";
                        }
                      }  // list next-hop
                    }  // container next-hops
    
                    leaf metric {
                      type uint32;
                      description
                        "Metric for this route.";
                    }
    
                    leaf route-type {
                      type route-type;
                      description
                        "Route type for this route.";
                    }
    
                    leaf route-tag {
                      type uint32;
                      description
                        "Route tag for this route.";
                    }
                  }  // list route
                }  // container local-rib
    
                container statistics {
                  config false;
                  description
                    "Per-instance statistics.";
                  leaf discontinuity-time {
                    type yang:date-and-time;
                    description
                      "The time of the most recent occasion at which any one or
    more of this OSPF instance's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF instance was last reinitialized, then
    this node contains the time the OSPF instance was
    reinitialized, which normally occurs when it was
    created.";
                  }
    
                  leaf originate-new-lsa-count {
                    type yang:counter32;
                    description
                      "The number of new LSAs originated.  Discontinuities in the
    value of this counter can occur when the OSPF instance is
    reinitialized.";
                  }
    
                  leaf rx-new-lsas-count {
                    type yang:counter32;
                    description
                      "The number of new LSAs received.  Discontinuities in the
    value of this counter can occur when the OSPF instance is
    reinitialized.";
                  }
    
                  leaf as-scope-lsa-count {
                    type yang:gauge32;
                    description
                      "The number of AS-Scope LSAs.";
                  }
    
                  leaf as-scope-lsa-chksum-sum {
                    type uint32;
                    description
                      "The modulo 2^32 sum of the LSA checksums
    for AS-Scope LSAs.  The value should be treated as
    unsigned when comparing two sums of checksums.  While
    differing checksums indicate a different combination
    of LSAs, equivalent checksums don't guarantee that the
    LSAs are the same, given that multiple combinations of
    LSAs can result in the same checksum.";
                  }
    
                  container database {
                    description
                      "Container for per-AS-Scope LSA statistics.";
                    list as-scope-lsa-type {
                      description
                        "List of AS-Scope LSA statistics.";
                      leaf lsa-type {
                        type uint16;
                        description
                          "AS-Scope LSA type.";
                      }
    
                      leaf lsa-count {
                        type yang:gauge32;
                        description
                          "The number of LSAs of this LSA type.";
                      }
    
                      leaf lsa-cksum-sum {
                        type uint32;
                        description
                          "The modulo 2^32 sum of the LSA checksums
    for LSAs of this type.  The value should be
    treated as unsigned when comparing two sums of
    checksums.  While differing checksums indicate a
    different combination of LSAs, equivalent checksums
    don't guarantee that the LSAs are the same, given that
    multiple combinations of LSAs can result in the same
    checksum.";
                      }
                    }  // list as-scope-lsa-type
                  }  // container database
    
                  container protected-routes {
                    if-feature fast-reroute;
                    config false;
                    description
                      "Instance protection statistics.";
                    list address-family-stats {
                      key "address-family prefix alternate";
                      description
                        "Per-Address-Family (AF) protected prefix information.";
                      leaf address-family {
                        type iana-rt-types:address-family;
                        description
                          "Address family.";
                      }
    
                      leaf prefix {
                        type inet:ip-prefix;
                        description
                          "Protected prefix.";
                      }
    
                      leaf alternate {
                        type inet:ip-address;
                        description
                          "Alternate next hop for the prefix.";
                      }
    
                      leaf alternate-type {
                        type enumeration {
                          enum "equal-cost" {
                            value 0;
                            description
                              "ECMP-based alternate.";
                          }
                          enum "lfa" {
                            value 1;
                            description
                              "LFA-based alternate.";
                          }
                          enum "remote-lfa" {
                            value 2;
                            description
                              "Remote-LFA-based alternate.";
                          }
                          enum "tunnel" {
                            value 3;
                            description
                              "Tunnel-based alternate (like RSVP-TE or GRE).";
                          }
                          enum "ti-lfa" {
                            value 4;
                            description
                              "An alternate based on Topology-Independent
    Loop-Free Alternate (TI-LFA).";
                          }
                          enum "mrt" {
                            value 5;
                            description
                              "An alternate based on Maximally Redundant Trees
    (MRTs).";
                          }
                          enum "other" {
                            value 6;
                            description
                              "Unknown alternate type.";
                          }
                        }
                        description
                          "Type of alternate.";
                      }
    
                      leaf best {
                        type boolean;
                        description
                          "Indicates that this alternate is preferred.";
                      }
    
                      leaf non-best-reason {
                        type string {
                          length "1..255";
                        }
                        description
                          "Information field used to describe why the alternate
    is not the best choice.";
                      }
    
                      leaf protection-available {
                        type bits {
                          bit node-protect {
                            position 0;
                            description
                              "Node protection available.";
                          }
                          bit link-protect {
                            position 1;
                            description
                              "Link protection available.";
                          }
                          bit srlg-protect {
                            position 2;
                            description
                              "Shared Risk Link Group (SRLG) protection
    available.";
                          }
                          bit
                            downstream-protect {
                            position 3;
                            description
                              "Downstream protection available.";
                          }
                          bit other {
                            position 4;
                            description
                              "Other protection available.";
                          }
                        }
                        description
                          "Protection provided by the alternate.";
                      }
    
                      leaf alternate-metric-1 {
                        type uint32;
                        description
                          "Metric from the Point of Local Repair (PLR) to
    the destination through the alternate path.";
                      }
    
                      leaf alternate-metric-2 {
                        type uint32;
                        description
                          "Metric from the PLR to the alternate node.";
                      }
    
                      leaf alternate-metric-3 {
                        type uint32;
                        description
                          "Metric from the alternate node to the destination.";
                      }
                    }  // list address-family-stats
                  }  // container protected-routes
    
                  container unprotected-routes {
                    if-feature fast-reroute;
                    config false;
                    description
                      "List of prefixes that are not protected.";
                    list address-family-stats {
                      key "address-family prefix";
                      description
                        "Per-AF unprotected prefix statistics.";
                      leaf address-family {
                        type iana-rt-types:address-family;
                        description
                          "Address family.";
                      }
    
                      leaf prefix {
                        type inet:ip-prefix;
                        description
                          "Unprotected prefix.";
                      }
                    }  // list address-family-stats
                  }  // container unprotected-routes
    
                  list protection-statistics {
                    key "frr-protection-method";
                    config false;
                    description
                      "List of protection method statistics.";
                    leaf frr-protection-method {
                      type string;
                      description
                        "Protection method used.";
                    }
    
                    list address-family-stats {
                      key "address-family";
                      description
                        "Per-AF protection statistics.";
                      leaf address-family {
                        type iana-rt-types:address-family;
                        description
                          "Address family.";
                      }
    
                      leaf total-routes {
                        type uint32;
                        description
                          "Total prefixes.";
                      }
    
                      leaf unprotected-routes {
                        type uint32;
                        description
                          "Total prefixes that are not protected.";
                      }
    
                      leaf protected-routes {
                        type uint32;
                        description
                          "Total prefixes that are protected.";
                      }
    
                      leaf linkprotected-routes {
                        type uint32;
                        description
                          "Total prefixes that are link protected.";
                      }
    
                      leaf nodeprotected-routes {
                        type uint32;
                        description
                          "Total prefixes that are node protected.";
                      }
                    }  // list address-family-stats
                  }  // list protection-statistics
                }  // container statistics
    
                container database {
                  config false;
                  description "AS-Scope LSDB.";
                  list as-scope-lsa-type {
                    key "lsa-type";
                    description
                      "List of OSPF AS-Scope LSAs.";
                    leaf lsa-type {
                      type uint16;
                      description
                        "OSPF AS-Scope LSA type.";
                    }
    
                    container as-scope-lsas {
                      description
                        "All AS-Scope LSAs of this LSA type.";
                      list as-scope-lsa {
                        key "lsa-id adv-router";
                        description
                          "List of OSPF AS-Scope LSAs.";
                        leaf lsa-id {
                          type union {
                            type yang:dotted-quad;
                            type uint32;
                          }
                          description
                            "Link State ID.";
                        }
    
                        leaf adv-router {
                          type rt-types:router-id;
                          description
                            "Advertising router.";
                        }
    
                        leaf decode-completed {
                          type boolean;
                          description
                            "The OSPF LSA body was successfully decoded, except for
    unknown TLVs.  Unknown LSA types and OSPFv2 unknown
    Opaque-LSA types are not decoded.  Additionally,
    malformed LSAs are generally not accepted and will
    not be in the Link State Database (LSDB).";
                        }
    
                        leaf raw-data {
                          type yang:hex-string;
                          description
                            "The hexadecimal representation of the complete LSA as
    received or originated, in network byte order.";
                        }
    
                        choice version {
                          description
                            "OSPFv2 or OSPFv3 LSA body.";
                          container ospfv2 {
                            description
                              "OSPFv2 LSA.";
                            container header {
                              must
                                "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" {
                                description
                                  "The opaque-type and the opaque-id only apply to
    Opaque-LSAs.";
                              }
                              description
                                "Decoded OSPFv2 LSA header data.";
                              container lsa-options {
                                description
                                  "LSA Options.";
                                leaf-list lsa-options {
                                  type identityref {
                                    base ospfv2-lsa-option;
                                  }
                                  description
                                    "List of LSA Options.  This list will contain the
    identities for the OSPFv2 LSA Options that are set.";
                                }
                              }  // container lsa-options
    
                              leaf lsa-id {
                                type yang:dotted-quad;
                                mandatory true;
                                description
                                  "Link State ID.";
                              }
    
                              leaf opaque-type {
                                type uint8;
                                description
                                  "Opaque-LSA type.";
                              }
    
                              leaf opaque-id {
                                type opaque-id;
                                description
                                  "Opaque-LSA ID.";
                              }
    
                              leaf age {
                                type uint16;
                                mandatory true;
                                description
                                  "LSA age.";
                              }
    
                              leaf type {
                                type identityref {
                                  base ospf-lsa-type;
                                }
                                mandatory true;
                                description
                                  "LSA type.";
                              }
    
                              leaf adv-router {
                                type rt-types:router-id;
                                mandatory true;
                                description
                                  "LSA advertising router.";
                              }
    
                              leaf seq-num {
                                type uint32;
                                mandatory true;
                                description
                                  "LSA sequence number.";
                              }
    
                              leaf checksum {
                                type fletcher-checksum16-type;
                                mandatory true;
                                description
                                  "LSA checksum.";
                              }
    
                              leaf length {
                                type uint16;
                                mandatory true;
                                description
                                  "LSA length, including the header.";
                              }
                            }  // container header
    
                            container body {
                              description
                                "Decoded OSPFv2 LSA body data.";
                              container router {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" {
                                  description
                                    "Only applies to Router-LSAs.";
                                }
                                description
                                  "Router-LSA.";
                                container router-bits {
                                  description
                                    "Router-LSA bits.";
                                  leaf-list rtr-lsa-bits {
                                    type identityref {
                                      base router-lsa-bit;
                                    }
                                    description
                                      "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                  }
                                }  // container router-bits
    
                                leaf num-of-links {
                                  type uint16;
                                  description
                                    "Number of links in the Router-LSA.";
                                }
    
                                container links {
                                  description
                                    "All router links.";
                                  list link {
                                    description
                                      "Router-LSA link.";
                                    leaf link-id {
                                      type union {
                                        type inet:ipv4-address;
                                        type yang:dotted-quad;
                                      }
                                      description
                                        "Router-LSA Link ID.";
                                    }
    
                                    leaf link-data {
                                      type union {
                                        type inet:ipv4-address;
                                        type uint32;
                                      }
                                      description
                                        "Router-LSA link data.";
                                    }
    
                                    leaf type {
                                      type router-link-type;
                                      description
                                        "Router-LSA link type.";
                                    }
    
                                    container topologies {
                                      description
                                        "All topologies for the link.";
                                      list topology {
                                        description
                                          "Topology-specific information.";
                                        leaf mt-id {
                                          type uint8;
                                          description
                                            "The MT-ID for the topology enabled on the link.";
                                        }
    
                                        leaf metric {
                                          type uint16;
                                          description
                                            "Metric for the topology.";
                                        }
                                      }  // list topology
                                    }  // container topologies
                                  }  // list link
                                }  // container links
                              }  // container router
    
                              container network {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" {
                                  description
                                    "Only applies to Network-LSAs.";
                                }
                                description
                                  "Network-LSA.";
                                leaf network-mask {
                                  type yang:dotted-quad;
                                  description
                                    "The IP address mask for the network.";
                                }
    
                                container attached-routers {
                                  description
                                    "All attached routers.";
                                  leaf-list attached-router {
                                    type inet:ipv4-address;
                                    description
                                      "List of the routers attached to the network.";
                                  }
                                }  // container attached-routers
                              }  // container network
    
                              container summary {
                                when
                                  "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" {
                                  description
                                    "Only applies to summary LSAs.";
                                }
                                description
                                  "Summary LSA.";
                                leaf network-mask {
                                  type inet:ipv4-address;
                                  description
                                    "The IP address mask for the network.";
                                }
    
                                container topologies {
                                  description
                                    "All topologies for the summary LSA.";
                                  list topology {
                                    description
                                      "Topology-specific information.";
                                    leaf mt-id {
                                      type uint8;
                                      description
                                        "The MT-ID for the topology enabled for the summary.";
                                    }
    
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "Metric for the topology.";
                                    }
                                  }  // list topology
                                }  // container topologies
                              }  // container summary
    
                              container external {
                                when
                                  "derived-from(../../header/type, 'ospfv2-external-lsa-type')" {
                                  description
                                    "Only applies to AS-External-LSAs and NSSA-LSAs.";
                                }
                                description
                                  "External-LSA.";
                                leaf network-mask {
                                  type inet:ipv4-address;
                                  description
                                    "The IP address mask for the network.";
                                }
    
                                container topologies {
                                  description
                                    "All topologies for the External-LSA.";
                                  list topology {
                                    description
                                      "Topology-specific information.";
                                    leaf mt-id {
                                      type uint8;
                                      description
                                        "The MT-ID for the topology enabled for the
    external or NSSA prefix.";
                                    }
    
                                    leaf flags {
                                      type bits {
                                        bit E {
                                          position
                                            0;
                                          description
                                            "When set, the metric specified is a Type 2
    external metric.";
                                        }
                                      }
                                      description
                                        "Topology flags.";
                                    }
    
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "Metric for the topology.";
                                    }
    
                                    leaf forwarding-address {
                                      type inet:ipv4-address;
                                      description
                                        "IPv4 Forwarding address.";
                                    }
    
                                    leaf external-route-tag {
                                      type uint32;
                                      description
                                        "Route tag for the topology.";
                                    }
                                  }  // list topology
                                }  // container topologies
                              }  // container external
    
                              container opaque {
                                when
                                  "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" {
                                  description
                                    "Only applies to Opaque-LSAs.";
                                }
                                description
                                  "Opaque-LSA.";
                                container ri-opaque {
                                  description
                                    "OSPF Router-Information-Opaque-LSA.";
                                  reference
                                    "RFC 7770: Extensions to OSPF for Advertising Optional
                                    Router Capabilities";
    
                                  container router-capabilities-tlv {
                                    description
                                      "Informational and functional router capabilities.";
                                    container router-informational-capabilities {
                                      description
                                        "OSPF Router Informational Flag definitions.";
                                      leaf-list informational-capabilities {
                                        type identityref {
                                          base informational-capability;
                                        }
                                        description
                                          "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                      }
                                    }  // container router-informational-capabilities
    
                                    list informational-capabilities-flags {
                                      description
                                        "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                      leaf informational-flag {
                                        type uint32;
                                        description
                                          "Individual informational capability flag.";
                                      }
                                    }  // list informational-capabilities-flags
    
                                    list functional-capabilities {
                                      description
                                        "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                      leaf functional-flag {
                                        type uint32;
                                        description
                                          "Individual functional capability flag.";
                                      }
                                    }  // list functional-capabilities
                                  }  // container router-capabilities-tlv
    
                                  container node-tag-tlvs {
                                    description
                                      "All Node Admin Tag TLVs.";
                                    list node-tag-tlv {
                                      description
                                        "Node Admin Tag TLV.";
                                      list node-tag {
                                        description
                                          "List of tags.";
                                        leaf tag {
                                          type uint32;
                                          description
                                            "Value of the node administrative tag.";
                                        }
                                      }  // list node-tag
                                    }  // list node-tag-tlv
                                  }  // container node-tag-tlvs
    
                                  container dynamic-hostname-tlv {
                                    description
                                      "OSPF Dynamic Hostname TLV.";
                                    leaf hostname {
                                      type string {
                                        length
                                          "1..255";
                                      }
                                      description
                                        "Dynamic hostname.";
                                    }
                                  }  // container dynamic-hostname-tlv
    
                                  container sbfd-discriminator-tlv {
                                    description
                                      "OSPF S-BFD Discriminator TLV.";
                                    list sbfd-discriminators {
                                      description
                                        "List of S-BFD Discriminators.";
                                      leaf sbfd-discriminator {
                                        type uint32;
                                        description
                                          "Individual S-BFD Discriminator.";
                                      }
                                    }  // list sbfd-discriminators
                                  }  // container sbfd-discriminator-tlv
    
                                  container maximum-sid-depth-tlv {
                                    description
                                      "OSPF Node MSD TLV.";
                                    list msd-type {
                                      description
                                        "List of MSD tuples.";
                                      leaf msd-type {
                                        type uint8;
                                        description
                                          "Maximum SID Depth (MSD) type.";
                                      }
    
                                      leaf msd-value {
                                        type uint8;
                                        description
                                          "MSD value for the type.";
                                      }
                                    }  // list msd-type
                                  }  // container maximum-sid-depth-tlv
    
                                  container unknown-tlvs {
                                    description
                                      "All unknown TLVs.";
                                    list unknown-tlv {
                                      description
                                        "Unknown TLV.";
                                      leaf type {
                                        type uint16;
                                        description
                                          "TLV type.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        description
                                          "TLV length (octets).";
                                      }
    
                                      leaf value {
                                        type yang:hex-string;
                                        description
                                          "TLV value.";
                                      }
                                    }  // list unknown-tlv
                                  }  // container unknown-tlvs
                                }  // container ri-opaque
    
                                container te-opaque {
                                  description
                                    "OSPFv2 TE Opaque-LSA.";
                                  reference
                                    "RFC 3630: Traffic Engineering (TE) Extensions to
                                    OSPF Version 2";
    
                                  container router-address-tlv {
                                    description
                                      "Router address TLV.";
                                    leaf router-address {
                                      type inet:ipv4-address;
                                      description
                                        "Router address.";
                                    }
                                  }  // container router-address-tlv
    
                                  container link-tlv {
                                    description
                                      "Describes a single link.  It is constructed
    from a set of sub-TLVs.";
                                    leaf link-type {
                                      type router-link-type;
                                      mandatory
                                        true;
                                      description
                                        "Link type.";
                                    }
    
                                    leaf link-id {
                                      type union {
                                        type inet:ipv4-address;
                                        type yang:dotted-quad;
                                      }
                                      mandatory
                                        true;
                                      description
                                        "Link ID.";
                                    }
    
                                    container local-if-ipv4-addrs {
                                      description
                                        "All local interface IPv4 addresses.";
                                      leaf-list local-if-ipv4-addr {
                                        type inet:ipv4-address;
                                        description
                                          "List of local interface IPv4 addresses.";
                                      }
                                    }  // container local-if-ipv4-addrs
    
                                    container remote-if-ipv4-addrs {
                                      description
                                        "All remote interface IPv4 addresses.";
                                      leaf-list remote-if-ipv4-addr {
                                        type inet:ipv4-address;
                                        description
                                          "List of remote interface IPv4 addresses.";
                                      }
                                    }  // container remote-if-ipv4-addrs
    
                                    leaf te-metric {
                                      type uint32;
                                      description
                                        "TE metric.";
                                    }
    
                                    leaf max-bandwidth {
                                      type rt-types:bandwidth-ieee-float32;
                                      description
                                        "Maximum bandwidth.";
                                    }
    
                                    leaf max-reservable-bandwidth {
                                      type rt-types:bandwidth-ieee-float32;
                                      description
                                        "Maximum reservable bandwidth.";
                                    }
    
                                    container unreserved-bandwidths {
                                      description
                                        "All unreserved bandwidths.";
                                      list unreserved-bandwidth {
                                        description
                                          "List of unreserved bandwidths for different
    priorities.";
                                        leaf priority {
                                          type uint8 {
                                            range
                                              "0 .. 7";
                                          }
                                          description
                                            "Priority from 0 to 7.";
                                        }
    
                                        leaf unreserved-bandwidth {
                                          type rt-types:bandwidth-ieee-float32;
                                          description
                                            "Unreserved bandwidth.";
                                        }
                                      }  // list unreserved-bandwidth
                                    }  // container unreserved-bandwidths
    
                                    leaf admin-group {
                                      type uint32;
                                      description
                                        "Administrative Group / Resource Class/Color.";
                                    }
    
                                    container unknown-tlvs {
                                      description
                                        "All unknown TLVs.";
                                      list unknown-tlv {
                                        description
                                          "Unknown TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // list unknown-tlv
                                    }  // container unknown-tlvs
                                  }  // container link-tlv
                                }  // container te-opaque
    
                                container extended-prefix-opaque {
                                  description
                                    "All Extended Prefix TLVs in the LSA.";
                                  list extended-prefix-tlv {
                                    description
                                      "Extended Prefix TLV.";
                                    leaf route-type {
                                      type enumeration {
                                        enum
                                          "unspecified" {
                                          value
                                            0;
                                          description
                                            "Unspecified.";
                                        }
                                        enum
                                          "intra-area" {
                                          value
                                            1;
                                          description
                                            "OSPF intra-area route.";
                                        }
                                        enum
                                          "inter-area" {
                                          value
                                            3;
                                          description
                                            "OSPF inter-area route.";
                                        }
                                        enum
                                          "external" {
                                          value
                                            5;
                                          description
                                            "OSPF external route.";
                                        }
                                        enum
                                          "nssa" {
                                          value
                                            7;
                                          description
                                            "OSPF NSSA external route.";
                                        }
                                      }
                                      description
                                        "Route type.";
                                    }
    
                                    container flags {
                                      description
                                        "Prefix flags.";
                                      leaf-list extended-prefix-flags {
                                        type identityref {
                                          base ospfv2-extended-prefix-flag;
                                        }
                                        description
                                          "List of Extended Prefix TLV flags.  This list will
    contain identities for the prefix flags; these
    identities are set in the extended prefix flags.";
                                      }
                                    }  // container flags
    
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "Address prefix.";
                                    }
    
                                    container unknown-tlvs {
                                      description
                                        "All unknown TLVs.";
                                      list unknown-tlv {
                                        description
                                          "Unknown TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // list unknown-tlv
                                    }  // container unknown-tlvs
                                  }  // list extended-prefix-tlv
                                }  // container extended-prefix-opaque
    
                                container extended-link-opaque {
                                  description
                                    "All Extended Link TLVs in the LSA.";
                                  reference
                                    "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                                  container extended-link-tlv {
                                    description
                                      "Extended Link TLV.";
                                    leaf link-id {
                                      type union {
                                        type inet:ipv4-address;
                                        type yang:dotted-quad;
                                      }
                                      description
                                        "Router-LSA Link ID.";
                                    }
    
                                    leaf link-data {
                                      type union {
                                        type inet:ipv4-address;
                                        type uint32;
                                      }
                                      description
                                        "Router-LSA link data.";
                                    }
    
                                    leaf type {
                                      type router-link-type;
                                      description
                                        "Router-LSA link type.";
                                    }
    
                                    container maximum-sid-depth-tlv {
                                      description
                                        "OSPF Node MSD TLV.";
                                      list msd-type {
                                        description
                                          "List of MSD tuples.";
                                        leaf msd-type {
                                          type uint8;
                                          description
                                            "Maximum SID Depth (MSD) type.";
                                        }
    
                                        leaf msd-value {
                                          type uint8;
                                          description
                                            "MSD value for the type.";
                                        }
                                      }  // list msd-type
                                    }  // container maximum-sid-depth-tlv
    
                                    container unknown-tlvs {
                                      description
                                        "All unknown TLVs.";
                                      list unknown-tlv {
                                        description
                                          "Unknown TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // list unknown-tlv
                                    }  // container unknown-tlvs
                                  }  // container extended-link-tlv
                                }  // container extended-link-opaque
                              }  // container opaque
                            }  // container body
                          }  // container ospfv2
                          container ospfv3 {
                            description
                              "OSPFv3 LSA.";
                            container header {
                              description
                                "Decoded OSPFv3 LSA header data.";
                              leaf lsa-id {
                                type uint32;
                                mandatory true;
                                description
                                  "OSPFv3 LSA ID.";
                              }
    
                              leaf age {
                                type uint16;
                                mandatory true;
                                description
                                  "LSA age.";
                              }
    
                              leaf type {
                                type identityref {
                                  base ospf-lsa-type;
                                }
                                mandatory true;
                                description
                                  "LSA type.";
                              }
    
                              leaf adv-router {
                                type rt-types:router-id;
                                mandatory true;
                                description
                                  "LSA advertising router.";
                              }
    
                              leaf seq-num {
                                type uint32;
                                mandatory true;
                                description
                                  "LSA sequence number.";
                              }
    
                              leaf checksum {
                                type fletcher-checksum16-type;
                                mandatory true;
                                description
                                  "LSA checksum.";
                              }
    
                              leaf length {
                                type uint16;
                                mandatory true;
                                description
                                  "LSA length, including the header.";
                              }
                            }  // container header
    
                            container body {
                              description
                                "Decoded OSPF LSA body data.";
                              container router {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" {
                                  description
                                    "Only applies to Router-LSAs.";
                                }
                                description
                                  "Router-LSA.";
                                container router-bits {
                                  description
                                    "Router-LSA bits.";
                                  leaf-list rtr-lsa-bits {
                                    type identityref {
                                      base router-lsa-bit;
                                    }
                                    description
                                      "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                  }
                                }  // container router-bits
    
                                container lsa-options {
                                  description
                                    "OSPFv3 LSA Options.";
                                  leaf-list lsa-options {
                                    type identityref {
                                      base ospfv3-lsa-option;
                                    }
                                    description
                                      "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                  }
                                }  // container lsa-options
    
                                container links {
                                  description
                                    "All router links.";
                                  list link {
                                    description
                                      "Router-LSA link.";
                                    leaf interface-id {
                                      type uint32;
                                      description
                                        "Interface ID for the link.";
                                    }
    
                                    leaf neighbor-interface-id {
                                      type uint32;
                                      description
                                        "Neighbor's Interface ID for the link.";
                                    }
    
                                    leaf neighbor-router-id {
                                      type rt-types:router-id;
                                      description
                                        "Neighbor's Router ID for the link.";
                                    }
    
                                    leaf type {
                                      type router-link-type;
                                      description
                                        "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Reserved for OSPFv3 Links
    	   4 - Virtual Link.";
                                    }
    
                                    leaf metric {
                                      type uint16;
                                      description
                                        "Link metric.";
                                    }
                                  }  // list link
                                }  // container links
                              }  // container router
    
                              container network {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" {
                                  description
                                    "Only applies to Network-LSAs.";
                                }
                                description
                                  "Network-LSA.";
                                container lsa-options {
                                  description
                                    "OSPFv3 LSA Options.";
                                  leaf-list lsa-options {
                                    type identityref {
                                      base ospfv3-lsa-option;
                                    }
                                    description
                                      "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                  }
                                }  // container lsa-options
    
                                container attached-routers {
                                  description
                                    "All attached routers.";
                                  leaf-list attached-router {
                                    type rt-types:router-id;
                                    description
                                      "List of the routers attached to the network.";
                                  }
                                }  // container attached-routers
                              }  // container network
    
                              container inter-area-prefix {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" {
                                  description
                                    "Only applies to Inter-Area-Prefix-LSAs.";
                                }
                                description
                                  "Prefix-LSA.";
                                leaf metric {
                                  type ospf-metric;
                                  description
                                    "Inter-Area Prefix metric.";
                                }
    
                                leaf prefix {
                                  type inet:ip-prefix;
                                  description
                                    "LSA prefix.";
                                }
    
                                container prefix-options {
                                  description
                                    "Prefix options.";
                                  leaf-list prefix-options {
                                    type identityref {
                                      base ospfv3-prefix-option;
                                    }
                                    description
                                      "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                  }
                                }  // container prefix-options
                              }  // container inter-area-prefix
    
                              container inter-area-router {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" {
                                  description
                                    "Only applies to Inter-Area-Router-LSAs.";
                                }
                                description
                                  "Inter-Area-Router-LSA.";
                                container lsa-options {
                                  description
                                    "OSPFv3 LSA Options.";
                                  leaf-list lsa-options {
                                    type identityref {
                                      base ospfv3-lsa-option;
                                    }
                                    description
                                      "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                  }
                                }  // container lsa-options
    
                                leaf metric {
                                  type ospf-metric;
                                  description
                                    "Autonomous System Boundary Router (ASBR) metric.";
                                }
    
                                leaf destination-router-id {
                                  type rt-types:router-id;
                                  description
                                    "The Router ID of the ASBR described by the LSA.";
                                }
                              }  // container inter-area-router
    
                              container as-external {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" {
                                  description
                                    "Only applies to AS-External-LSAs.";
                                }
                                description
                                  "AS-External-LSA.";
                                leaf metric {
                                  type ospf-metric;
                                  description
                                    "AS-External-LSA or NSSA-LSA Metric.";
                                }
    
                                leaf flags {
                                  type bits {
                                    bit E {
                                      position
                                        0;
                                      description
                                        "When set, the metric specified is a Type 2
    external metric.";
                                    }
                                    bit F {
                                      position
                                        1;
                                      description
                                        "When set, a forwarding address is included
    in the LSA.";
                                    }
                                    bit T {
                                      position
                                        2;
                                      description
                                        "When set, an external route tag is included
    in the LSA.";
                                    }
                                  }
                                  description
                                    "AS-External-LSA or NSSA-LSA flags.";
                                }
    
                                leaf referenced-ls-type {
                                  type identityref {
                                    base ospfv3-lsa-type;
                                  }
                                  description
                                    "Referenced Link State (LS) Type.";
                                  reference
                                    "RFC 5340: OSPF for IPv6";
    
                                }
    
                                leaf unknown-referenced-ls-type {
                                  type uint16;
                                  description
                                    "Value for an unknown Referenced LS Type.";
                                }
    
                                leaf prefix {
                                  type inet:ip-prefix;
                                  description
                                    "LSA prefix.";
                                }
    
                                container prefix-options {
                                  description
                                    "Prefix options.";
                                  leaf-list prefix-options {
                                    type identityref {
                                      base ospfv3-prefix-option;
                                    }
                                    description
                                      "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                  }
                                }  // container prefix-options
    
                                leaf forwarding-address {
                                  type inet:ipv6-address;
                                  description
                                    "IPv6 Forwarding address.";
                                }
    
                                leaf external-route-tag {
                                  type uint32;
                                  description
                                    "Route tag.";
                                }
    
                                leaf referenced-link-state-id {
                                  type uint32;
                                  description
                                    "Referenced Link State ID.";
                                  reference
                                    "RFC 5340: OSPF for IPv6";
    
                                }
                              }  // container as-external
    
                              container nssa {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" {
                                  description
                                    "Only applies to NSSA-LSAs.";
                                }
                                description
                                  "NSSA-LSA.";
                                leaf metric {
                                  type ospf-metric;
                                  description
                                    "AS-External-LSA or NSSA-LSA Metric.";
                                }
    
                                leaf flags {
                                  type bits {
                                    bit E {
                                      position
                                        0;
                                      description
                                        "When set, the metric specified is a Type 2
    external metric.";
                                    }
                                    bit F {
                                      position
                                        1;
                                      description
                                        "When set, a forwarding address is included
    in the LSA.";
                                    }
                                    bit T {
                                      position
                                        2;
                                      description
                                        "When set, an external route tag is included
    in the LSA.";
                                    }
                                  }
                                  description
                                    "AS-External-LSA or NSSA-LSA flags.";
                                }
    
                                leaf referenced-ls-type {
                                  type identityref {
                                    base ospfv3-lsa-type;
                                  }
                                  description
                                    "Referenced Link State (LS) Type.";
                                  reference
                                    "RFC 5340: OSPF for IPv6";
    
                                }
    
                                leaf unknown-referenced-ls-type {
                                  type uint16;
                                  description
                                    "Value for an unknown Referenced LS Type.";
                                }
    
                                leaf prefix {
                                  type inet:ip-prefix;
                                  description
                                    "LSA prefix.";
                                }
    
                                container prefix-options {
                                  description
                                    "Prefix options.";
                                  leaf-list prefix-options {
                                    type identityref {
                                      base ospfv3-prefix-option;
                                    }
                                    description
                                      "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                  }
                                }  // container prefix-options
    
                                leaf forwarding-address {
                                  type inet:ipv6-address;
                                  description
                                    "IPv6 Forwarding address.";
                                }
    
                                leaf external-route-tag {
                                  type uint32;
                                  description
                                    "Route tag.";
                                }
    
                                leaf referenced-link-state-id {
                                  type uint32;
                                  description
                                    "Referenced Link State ID.";
                                  reference
                                    "RFC 5340: OSPF for IPv6";
    
                                }
                              }  // container nssa
    
                              container link {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" {
                                  description
                                    "Only applies to Link-LSAs.";
                                }
                                description
                                  "Link-LSA.";
                                leaf rtr-priority {
                                  type uint8;
                                  description
                                    "Router priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible
    to become the DR or BDR.";
                                }
    
                                container lsa-options {
                                  description
                                    "OSPFv3 LSA Options.";
                                  leaf-list lsa-options {
                                    type identityref {
                                      base ospfv3-lsa-option;
                                    }
                                    description
                                      "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                  }
                                }  // container lsa-options
    
                                leaf link-local-interface-address {
                                  type inet:ipv6-address;
                                  description
                                    "The originating router's link-local
    interface address for the link.";
                                }
    
                                leaf num-of-prefixes {
                                  type uint32;
                                  description
                                    "Number of prefixes.";
                                }
    
                                container prefixes {
                                  description
                                    "All prefixes for the link.";
                                  list prefix {
                                    description
                                      "List of prefixes associated with the link.";
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-prefix-option;
                                        }
                                        description
                                          "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
                                  }  // list prefix
                                }  // container prefixes
                              }  // container link
    
                              container intra-area-prefix {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" {
                                  description
                                    "Only applies to Intra-Area-Prefix-LSAs.";
                                }
                                description
                                  "Intra-Area-Prefix-LSA.";
                                leaf referenced-ls-type {
                                  type identityref {
                                    base ospfv3-lsa-type;
                                  }
                                  description
                                    "Referenced LS Type.";
                                }
    
                                leaf unknown-referenced-ls-type {
                                  type uint16;
                                  description
                                    "Value for an unknown Referenced LS Type.";
                                }
    
                                leaf referenced-link-state-id {
                                  type uint32;
                                  description
                                    "Referenced Link State ID.";
                                }
    
                                leaf referenced-adv-router {
                                  type rt-types:router-id;
                                  description
                                    "Referenced Advertising Router.";
                                  reference
                                    "RFC 5340: OSPF for IPv6";
    
                                }
    
                                leaf num-of-prefixes {
                                  type uint16;
                                  description
                                    "Number of prefixes.";
                                }
    
                                container prefixes {
                                  description
                                    "All prefixes in this LSA.";
                                  list prefix {
                                    description
                                      "List of prefixes in this LSA.";
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-prefix-option;
                                        }
                                        description
                                          "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
    
                                    leaf metric {
                                      type uint16;
                                      description
                                        "Prefix metric.";
                                    }
                                  }  // list prefix
                                }  // container prefixes
                              }  // container intra-area-prefix
    
                              container router-information {
                                when
                                  "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" {
                                  description
                                    "Only applies to Router-Information-LSAs (RFC 7770).";
                                  reference
                                    "RFC 7770: Extensions to OSPF for Advertising Optional
                                    Router Capabilities";
    
                                }
                                description
                                  "Router-Information-LSA.";
                                reference
                                  "RFC 7770: Extensions to OSPF for Advertising Optional
                                  Router Capabilities";
    
                                container router-capabilities-tlv {
                                  description
                                    "Informational and functional router capabilities.";
                                  container router-informational-capabilities {
                                    description
                                      "OSPF Router Informational Flag definitions.";
                                    leaf-list informational-capabilities {
                                      type identityref {
                                        base informational-capability;
                                      }
                                      description
                                        "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                    }
                                  }  // container router-informational-capabilities
    
                                  list informational-capabilities-flags {
                                    description
                                      "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                    leaf informational-flag {
                                      type uint32;
                                      description
                                        "Individual informational capability flag.";
                                    }
                                  }  // list informational-capabilities-flags
    
                                  list functional-capabilities {
                                    description
                                      "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                    leaf functional-flag {
                                      type uint32;
                                      description
                                        "Individual functional capability flag.";
                                    }
                                  }  // list functional-capabilities
                                }  // container router-capabilities-tlv
    
                                container node-tag-tlvs {
                                  description
                                    "All Node Admin Tag TLVs.";
                                  list node-tag-tlv {
                                    description
                                      "Node Admin Tag TLV.";
                                    list node-tag {
                                      description
                                        "List of tags.";
                                      leaf tag {
                                        type uint32;
                                        description
                                          "Value of the node administrative tag.";
                                      }
                                    }  // list node-tag
                                  }  // list node-tag-tlv
                                }  // container node-tag-tlvs
    
                                container dynamic-hostname-tlv {
                                  description
                                    "OSPF Dynamic Hostname TLV.";
                                  leaf hostname {
                                    type string {
                                      length
                                        "1..255";
                                    }
                                    description
                                      "Dynamic hostname.";
                                  }
                                }  // container dynamic-hostname-tlv
    
                                container sbfd-discriminator-tlv {
                                  description
                                    "OSPF S-BFD Discriminator TLV.";
                                  list sbfd-discriminators {
                                    description
                                      "List of S-BFD Discriminators.";
                                    leaf sbfd-discriminator {
                                      type uint32;
                                      description
                                        "Individual S-BFD Discriminator.";
                                    }
                                  }  // list sbfd-discriminators
                                }  // container sbfd-discriminator-tlv
                              }  // container router-information
    
                              container e-as-external {
                                when
                                  "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-as-external-lsa'" {
                                  description
                                    "Only applies to E-AS-External-LSAs.";
                                }
                                description
                                  "E-AS-External-LSA contents.";
                                reference
                                  "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                  Extensibility, Section 4.5";
    
                                list e-external-tlvs {
                                  description
                                    "E-AS-External-LSA TLVs.";
                                  container unknown-tlv {
                                    description
                                      "Unknown E-External TLV.";
                                    leaf type {
                                      type uint16;
                                      description
                                        "TLV type.";
                                    }
    
                                    leaf length {
                                      type uint16;
                                      description
                                        "TLV length (octets).";
                                    }
    
                                    leaf value {
                                      type yang:hex-string;
                                      description
                                        "TLV value.";
                                    }
                                  }  // container unknown-tlv
    
                                  container external-prefix-tlv {
                                    description
                                      "External-Prefix TLV.";
                                    container flags {
                                      description
                                        "External prefix flags.";
                                      leaf-list ospfv3-e-external-prefix-bits {
                                        type identityref {
                                          base ospfv3-e-external-prefix-option;
                                        }
                                        description
                                          "OSPFv3 External-Prefix TLV bits list.";
                                      }
                                    }  // container flags
    
                                    leaf metric {
                                      type ospf:ospf-metric;
                                      description
                                        "External prefix metric.";
                                    }
    
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      reference
                                        "RFC 8362:  OSPFv3 Link State Advertisement (LSA)
                                        Extensibility, Section 3.1";
    
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-e-prefix-option;
                                        }
                                        description
                                          "OSPFv3 prefix options flag list.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
    
                                    list sub-tlvs {
                                      description
                                        "External-Prefix TLV sub-TLVs.";
                                      container ipv6-fwd-addr-sub-tlv {
                                        description
                                          "IPv6-Forwarding-Address sub-TLV for
    E-AS-External-LSAs and E-NSSA-LSAs for the IPv6
    address family.";
                                        reference
                                          "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                          Extensibility, Section 3.10";
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 forwarding address.";
                                        }
                                      }  // container ipv6-fwd-addr-sub-tlv
    
                                      container ipv4-fwd-addr-sub-tlv {
                                        description
                                          "IPv4-Forwarding-Address sub-TLV for
    E-AS-External-LSAs and E-NSSA-LSAs for the IPv4
    address family.";
                                        reference
                                          "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                          Extensibility, Section 3.11";
    
                                        leaf forwarding-address {
                                          type inet:ipv4-address;
                                          description
                                            "IPv4 forwarding address.";
                                        }
                                      }  // container ipv4-fwd-addr-sub-tlv
    
                                      container route-tag-sub-tlv {
                                        description
                                          "Route-Tag sub-TLV.";
                                        reference
                                          "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                          Extensibility, Section 3.12";
    
                                        leaf route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
                                      }  // container route-tag-sub-tlv
    
                                      container unknown-sub-tlv {
                                        description
                                          "Unknown External TLV sub-TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-sub-tlv
                                    }  // list sub-tlvs
                                  }  // container external-prefix-tlv
                                }  // list e-external-tlvs
                              }  // container e-as-external
                            }  // container body
                          }  // container ospfv3
                        }  // choice version
                      }  // list as-scope-lsa
                    }  // container as-scope-lsas
                  }  // list as-scope-lsa-type
                }  // container database
    
                container spf-log {
                  config false;
                  description
                    "This container lists the SPF log entries.";
                  list event {
                    key "id";
                    description
                      "List of SPF log entries represented
    as a wrapping buffer in chronological
    order, with the oldest entry returned
    first.";
                    leaf id {
                      type uint32;
                      description
                        "Event identifier.  A purely internal value.";
                    }
    
                    leaf spf-type {
                      type enumeration {
                        enum "full" {
                          value 0;
                          description
                            "The SPF computation was for a full SPF.";
                        }
                        enum "intra" {
                          value 1;
                          description
                            "The SPF computation was only for intra-area
    routes.";
                        }
                        enum "inter" {
                          value 2;
                          description
                            "The SPF computation was only for inter-area
    summary routes.";
                        }
                        enum "external" {
                          value 3;
                          description
                            "The SPF computation was only for AS external
    and NSSA routes.";
                        }
                      }
                      description
                        "The SPF computation type for the SPF log entry.";
                    }
    
                    leaf schedule-timestamp {
                      type yang:timestamp;
                      description
                        "This is the timestamp when the computation was
    scheduled.";
                    }
    
                    leaf start-timestamp {
                      type yang:timestamp;
                      description
                        "This is the timestamp when the computation was
    started.";
                    }
    
                    leaf end-timestamp {
                      type yang:timestamp;
                      description
                        "This is the timestamp when the computation was
    completed.";
                    }
    
                    list trigger-lsa {
                      description
                        "The list of LSAs that triggered the computation.";
                      leaf area-id {
                        type area-id-type;
                        description "Area ID.";
                      }
    
                      leaf type {
                        type uint16;
                        description "LSA type.";
                      }
    
                      leaf lsa-id {
                        type union {
                          type inet:ipv4-address;
                          type yang:dotted-quad;
                        }
                        description
                          "Link State ID.";
                      }
    
                      leaf adv-router {
                        type rt-types:router-id;
                        description
                          "LSA advertising router.";
                      }
    
                      leaf seq-num {
                        type uint32;
                        description
                          "LSA sequence number.";
                      }
                    }  // list trigger-lsa
                  }  // list event
                }  // container spf-log
    
                container lsa-log {
                  config false;
                  description
                    "This container lists the LSA log entries.
    Local LSA modifications are also included
    in the list.";
                  list event {
                    key "id";
                    description
                      "List of LSA log entries represented
    as a wrapping buffer in chronological order,
    with the oldest entry returned first.";
                    leaf id {
                      type uint32;
                      description
                        "Event identifier.  A purely internal value.";
                    }
    
                    container lsa {
                      description
                        "This container describes the LSA that was logged.";
                      leaf area-id {
                        type area-id-type;
                        description "Area ID.";
                      }
    
                      leaf type {
                        type uint16;
                        description "LSA type.";
                      }
    
                      leaf lsa-id {
                        type union {
                          type inet:ipv4-address;
                          type yang:dotted-quad;
                        }
                        description
                          "Link State ID.";
                      }
    
                      leaf adv-router {
                        type rt-types:router-id;
                        description
                          "LSA advertising router.";
                      }
    
                      leaf seq-num {
                        type uint32;
                        description
                          "LSA sequence number.";
                      }
                    }  // container lsa
    
                    leaf received-timestamp {
                      type yang:timestamp;
                      description
                        "This is the timestamp when the LSA was received.
    In the case of a local LSA update, the timestamp
    refers to the LSA origination time.";
                    }
    
                    leaf reason {
                      type identityref {
                        base lsa-log-reason;
                      }
                      description
                        "Reason for the LSA log entry.";
                    }
                  }  // list event
                }  // container lsa-log
    
                container areas {
                  description "All OSPF areas.";
                  list area {
                    key "area-id";
                    description
                      "List of OSPF areas.";
                    leaf area-id {
                      type area-id-type;
                      description "Area ID.";
                    }
    
                    leaf area-type {
                      type identityref {
                        base area-type;
                      }
                      default "normal-area";
                      description "Area type.";
                    }
    
                    leaf summary {
                      when
                        "derived-from(../area-type,'stub-nssa-area')" {
                        description
                          "Summary advertisement into the stub area or NSSA.";
                      }
                      type boolean;
                      description
                        "Enables/disables summary advertisement into the stub
    area or NSSA.";
                    }
    
                    leaf default-cost {
                      when
                        "derived-from(../area-type,'stub-nssa-area')" {
                        description
                          "Cost for the LSA default route advertised into the
    stub area or NSSA.";
                      }
                      type ospf-metric;
                      description
                        "Sets the summary default route cost for a stub area
    or NSSA.";
                    }
    
                    container ranges {
                      description
                        "Container for summary ranges.";
                      list range {
                        key "prefix";
                        description
                          "Summarizes routes matching the address/mask.
    Applicable to Area Border Routers (ABRs) only.";
                        leaf prefix {
                          type inet:ip-prefix;
                          description
                            "IPv4 or IPv6 prefix.";
                        }
    
                        leaf advertise {
                          type boolean;
                          description
                            "Advertise or hide.";
                        }
    
                        leaf cost {
                          type ospf-metric;
                          description
                            "Advertised cost of a summary route.";
                        }
                      }  // list range
                    }  // container ranges
    
                    container statistics {
                      config false;
                      description
                        "Per-area statistics.";
                      leaf discontinuity-time {
                        type yang:date-and-time;
                        description
                          "The time of the most recent occasion at which any one or
    more of this OSPF area's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF area was last reinitialized, then
    this node contains the time the OSPF area was
    reinitialized, which normally occurs when it was
    created.";
                      }
    
                      leaf spf-runs-count {
                        type yang:counter32;
                        description
                          "The number of times the intra-area SPF has run.
    Discontinuities in the value of this counter can occur
    when the OSPF area is reinitialized.";
                      }
    
                      leaf abr-count {
                        type yang:gauge32;
                        description
                          "The total number of Area Border Routers (ABRs)
    reachable within this area.";
                      }
    
                      leaf asbr-count {
                        type yang:gauge32;
                        description
                          "The total number of AS Boundary Routers (ASBRs)
    reachable within this area.";
                      }
    
                      leaf ar-nssa-translator-event-count {
                        type yang:counter32;
                        description
                          "The number of NSSA translator-state changes.
    Discontinuities in the value of this counter can occur
    when the OSPF area is reinitialized.";
                      }
    
                      leaf area-scope-lsa-count {
                        type yang:gauge32;
                        description
                          "The number of area-scope LSAs in the area.";
                      }
    
                      leaf area-scope-lsa-cksum-sum {
                        type uint32;
                        description
                          "The modulo 2^32 sum of the LSA checksums
    for area-scope LSAs.  The value should be treated as
    unsigned when comparing two sums of checksums.  While
    differing checksums indicate a different combination
    of LSAs, equivalent checksums don't guarantee that the
    LSAs are the same, given that multiple combinations of
    LSAs can result in the same checksum.";
                      }
    
                      container database {
                        description
                          "Container for area-scope LSA type statistics.";
                        list area-scope-lsa-type {
                          description
                            "List of area-scope LSA statistics.";
                          leaf lsa-type {
                            type uint16;
                            description
                              "Area-scope LSA type.";
                          }
    
                          leaf lsa-count {
                            type yang:gauge32;
                            description
                              "The number of LSAs of this LSA type.";
                          }
    
                          leaf lsa-cksum-sum {
                            type uint32;
                            description
                              "The modulo 2^32 sum of the LSA checksums
    for LSAs of this type.  The value should be
    treated as unsigned when comparing two sums of
    checksums.  While differing checksums indicate a
    different combination of LSAs, equivalent checksums
    don't guarantee that the LSAs are the same, given that
    multiple combinations of LSAs can result in the same
    checksum.";
                          }
                        }  // list area-scope-lsa-type
                      }  // container database
                    }  // container statistics
    
                    container database {
                      config false;
                      description
                        "Area-scope LSDB.";
                      list area-scope-lsa-type {
                        key "lsa-type";
                        description
                          "List of OSPF area-scope LSAs.";
                        leaf lsa-type {
                          type uint16;
                          description
                            "OSPF area-scope LSA type.";
                        }
    
                        container area-scope-lsas {
                          description
                            "All area-scope LSAs.";
                          list area-scope-lsa {
                            key "lsa-id adv-router";
                            description
                              "List of OSPF area-scope LSAs.";
                            leaf lsa-id {
                              type union {
                                type yang:dotted-quad;
                                type uint32;
                              }
                              description
                                "Link State ID.";
                            }
    
                            leaf adv-router {
                              type rt-types:router-id;
                              description
                                "Advertising router.";
                            }
    
                            leaf decode-completed {
                              type boolean;
                              description
                                "The OSPF LSA body was successfully decoded, except for
    unknown TLVs.  Unknown LSA types and OSPFv2 unknown
    Opaque-LSA types are not decoded.  Additionally,
    malformed LSAs are generally not accepted and will
    not be in the Link State Database (LSDB).";
                            }
    
                            leaf raw-data {
                              type yang:hex-string;
                              description
                                "The hexadecimal representation of the complete LSA as
    received or originated, in network byte order.";
                            }
    
                            choice version {
                              description
                                "OSPFv2 or OSPFv3 LSA body.";
                              container ospfv2 {
                                description
                                  "OSPFv2 LSA.";
                                container header {
                                  must
                                    "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" {
                                    description
                                      "The opaque-type and the opaque-id only apply to
    Opaque-LSAs.";
                                  }
                                  description
                                    "Decoded OSPFv2 LSA header data.";
                                  container lsa-options {
                                    description
                                      "LSA Options.";
                                    leaf-list lsa-options {
                                      type identityref {
                                        base ospfv2-lsa-option;
                                      }
                                      description
                                        "List of LSA Options.  This list will contain the
    identities for the OSPFv2 LSA Options that are set.";
                                    }
                                  }  // container lsa-options
    
                                  leaf lsa-id {
                                    type yang:dotted-quad;
                                    mandatory
                                      true;
                                    description
                                      "Link State ID.";
                                  }
    
                                  leaf opaque-type {
                                    type uint8;
                                    description
                                      "Opaque-LSA type.";
                                  }
    
                                  leaf opaque-id {
                                    type opaque-id;
                                    description
                                      "Opaque-LSA ID.";
                                  }
    
                                  leaf age {
                                    type uint16;
                                    mandatory
                                      true;
                                    description
                                      "LSA age.";
                                  }
    
                                  leaf type {
                                    type identityref {
                                      base ospf-lsa-type;
                                    }
                                    mandatory
                                      true;
                                    description
                                      "LSA type.";
                                  }
    
                                  leaf adv-router {
                                    type rt-types:router-id;
                                    mandatory
                                      true;
                                    description
                                      "LSA advertising router.";
                                  }
    
                                  leaf seq-num {
                                    type uint32;
                                    mandatory
                                      true;
                                    description
                                      "LSA sequence number.";
                                  }
    
                                  leaf checksum {
                                    type fletcher-checksum16-type;
                                    mandatory
                                      true;
                                    description
                                      "LSA checksum.";
                                  }
    
                                  leaf length {
                                    type uint16;
                                    mandatory
                                      true;
                                    description
                                      "LSA length, including the header.";
                                  }
                                }  // container header
    
                                container body {
                                  description
                                    "Decoded OSPFv2 LSA body data.";
                                  container router {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" {
                                      description
                                        "Only applies to Router-LSAs.";
                                    }
                                    description
                                      "Router-LSA.";
                                    container router-bits {
                                      description
                                        "Router-LSA bits.";
                                      leaf-list rtr-lsa-bits {
                                        type identityref {
                                          base router-lsa-bit;
                                        }
                                        description
                                          "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                      }
                                    }  // container router-bits
    
                                    leaf num-of-links {
                                      type uint16;
                                      description
                                        "Number of links in the Router-LSA.";
                                    }
    
                                    container links {
                                      description
                                        "All router links.";
                                      list link {
                                        description
                                          "Router-LSA link.";
                                        leaf link-id {
                                          type union {
                                            type inet:ipv4-address;
                                            type yang:dotted-quad;
                                          }
                                          description
                                            "Router-LSA Link ID.";
                                        }
    
                                        leaf link-data {
                                          type union {
                                            type inet:ipv4-address;
                                            type uint32;
                                          }
                                          description
                                            "Router-LSA link data.";
                                        }
    
                                        leaf type {
                                          type router-link-type;
                                          description
                                            "Router-LSA link type.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the link.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled on the link.";
                                            }
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Metric for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // list link
                                    }  // container links
                                  }  // container router
    
                                  container network {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" {
                                      description
                                        "Only applies to Network-LSAs.";
                                    }
                                    description
                                      "Network-LSA.";
                                    leaf network-mask {
                                      type yang:dotted-quad;
                                      description
                                        "The IP address mask for the network.";
                                    }
    
                                    container attached-routers {
                                      description
                                        "All attached routers.";
                                      leaf-list attached-router {
                                        type inet:ipv4-address;
                                        description
                                          "List of the routers attached to the network.";
                                      }
                                    }  // container attached-routers
                                  }  // container network
    
                                  container summary {
                                    when
                                      "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" {
                                      description
                                        "Only applies to summary LSAs.";
                                    }
                                    description
                                      "Summary LSA.";
                                    leaf network-mask {
                                      type inet:ipv4-address;
                                      description
                                        "The IP address mask for the network.";
                                    }
    
                                    container topologies {
                                      description
                                        "All topologies for the summary LSA.";
                                      list topology {
                                        description
                                          "Topology-specific information.";
                                        leaf mt-id {
                                          type uint8;
                                          description
                                            "The MT-ID for the topology enabled for the summary.";
                                        }
    
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Metric for the topology.";
                                        }
                                      }  // list topology
                                    }  // container topologies
                                  }  // container summary
    
                                  container external {
                                    when
                                      "derived-from(../../header/type, 'ospfv2-external-lsa-type')" {
                                      description
                                        "Only applies to AS-External-LSAs and NSSA-LSAs.";
                                    }
                                    description
                                      "External-LSA.";
                                    leaf network-mask {
                                      type inet:ipv4-address;
                                      description
                                        "The IP address mask for the network.";
                                    }
    
                                    container topologies {
                                      description
                                        "All topologies for the External-LSA.";
                                      list topology {
                                        description
                                          "Topology-specific information.";
                                        leaf mt-id {
                                          type uint8;
                                          description
                                            "The MT-ID for the topology enabled for the
    external or NSSA prefix.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                          }
                                          description
                                            "Topology flags.";
                                        }
    
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Metric for the topology.";
                                        }
    
                                        leaf forwarding-address {
                                          type inet:ipv4-address;
                                          description
                                            "IPv4 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag for the topology.";
                                        }
                                      }  // list topology
                                    }  // container topologies
                                  }  // container external
    
                                  container opaque {
                                    when
                                      "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" {
                                      description
                                        "Only applies to Opaque-LSAs.";
                                    }
                                    description
                                      "Opaque-LSA.";
                                    container ri-opaque {
                                      description
                                        "OSPF Router-Information-Opaque-LSA.";
                                      reference
                                        "RFC 7770: Extensions to OSPF for Advertising Optional
                                        Router Capabilities";
    
                                      container router-capabilities-tlv {
                                        description
                                          "Informational and functional router capabilities.";
                                        container router-informational-capabilities {
                                          description
                                            "OSPF Router Informational Flag definitions.";
                                          leaf-list informational-capabilities {
                                            type identityref {
                                              base informational-capability;
                                            }
                                            description
                                              "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                          }
                                        }  // container router-informational-capabilities
    
                                        list informational-capabilities-flags {
                                          description
                                            "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                          leaf informational-flag {
                                            type uint32;
                                            description
                                              "Individual informational capability flag.";
                                          }
                                        }  // list informational-capabilities-flags
    
                                        list functional-capabilities {
                                          description
                                            "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                          leaf functional-flag {
                                            type uint32;
                                            description
                                              "Individual functional capability flag.";
                                          }
                                        }  // list functional-capabilities
                                      }  // container router-capabilities-tlv
    
                                      container node-tag-tlvs {
                                        description
                                          "All Node Admin Tag TLVs.";
                                        list node-tag-tlv {
                                          description
                                            "Node Admin Tag TLV.";
                                          list node-tag {
                                            description
                                              "List of tags.";
                                            leaf tag {
                                              type uint32;
                                              description
                                                "Value of the node administrative tag.";
                                            }
                                          }  // list node-tag
                                        }  // list node-tag-tlv
                                      }  // container node-tag-tlvs
    
                                      container dynamic-hostname-tlv {
                                        description
                                          "OSPF Dynamic Hostname TLV.";
                                        leaf hostname {
                                          type string {
                                            length
                                              "1..255";
                                          }
                                          description
                                            "Dynamic hostname.";
                                        }
                                      }  // container dynamic-hostname-tlv
    
                                      container sbfd-discriminator-tlv {
                                        description
                                          "OSPF S-BFD Discriminator TLV.";
                                        list sbfd-discriminators {
                                          description
                                            "List of S-BFD Discriminators.";
                                          leaf sbfd-discriminator {
                                            type uint32;
                                            description
                                              "Individual S-BFD Discriminator.";
                                          }
                                        }  // list sbfd-discriminators
                                      }  // container sbfd-discriminator-tlv
    
                                      container maximum-sid-depth-tlv {
                                        description
                                          "OSPF Node MSD TLV.";
                                        list msd-type {
                                          description
                                            "List of MSD tuples.";
                                          leaf msd-type {
                                            type uint8;
                                            description
                                              "Maximum SID Depth (MSD) type.";
                                          }
    
                                          leaf msd-value {
                                            type uint8;
                                            description
                                              "MSD value for the type.";
                                          }
                                        }  // list msd-type
                                      }  // container maximum-sid-depth-tlv
    
                                      container unknown-tlvs {
                                        description
                                          "All unknown TLVs.";
                                        list unknown-tlv {
                                          description
                                            "Unknown TLV.";
                                          leaf type {
                                            type uint16;
                                            description
                                              "TLV type.";
                                          }
    
                                          leaf length {
                                            type uint16;
                                            description
                                              "TLV length (octets).";
                                          }
    
                                          leaf value {
                                            type yang:hex-string;
                                            description
                                              "TLV value.";
                                          }
                                        }  // list unknown-tlv
                                      }  // container unknown-tlvs
                                    }  // container ri-opaque
    
                                    container te-opaque {
                                      description
                                        "OSPFv2 TE Opaque-LSA.";
                                      reference
                                        "RFC 3630: Traffic Engineering (TE) Extensions to
                                        OSPF Version 2";
    
                                      container router-address-tlv {
                                        description
                                          "Router address TLV.";
                                        leaf router-address {
                                          type inet:ipv4-address;
                                          description
                                            "Router address.";
                                        }
                                      }  // container router-address-tlv
    
                                      container link-tlv {
                                        description
                                          "Describes a single link.  It is constructed
    from a set of sub-TLVs.";
                                        leaf link-type {
                                          type router-link-type;
                                          mandatory
                                            true;
                                          description
                                            "Link type.";
                                        }
    
                                        leaf link-id {
                                          type union {
                                            type inet:ipv4-address;
                                            type yang:dotted-quad;
                                          }
                                          mandatory
                                            true;
                                          description
                                            "Link ID.";
                                        }
    
                                        container local-if-ipv4-addrs {
                                          description
                                            "All local interface IPv4 addresses.";
                                          leaf-list local-if-ipv4-addr {
                                            type inet:ipv4-address;
                                            description
                                              "List of local interface IPv4 addresses.";
                                          }
                                        }  // container local-if-ipv4-addrs
    
                                        container remote-if-ipv4-addrs {
                                          description
                                            "All remote interface IPv4 addresses.";
                                          leaf-list remote-if-ipv4-addr {
                                            type inet:ipv4-address;
                                            description
                                              "List of remote interface IPv4 addresses.";
                                          }
                                        }  // container remote-if-ipv4-addrs
    
                                        leaf te-metric {
                                          type uint32;
                                          description
                                            "TE metric.";
                                        }
    
                                        leaf max-bandwidth {
                                          type rt-types:bandwidth-ieee-float32;
                                          description
                                            "Maximum bandwidth.";
                                        }
    
                                        leaf max-reservable-bandwidth {
                                          type rt-types:bandwidth-ieee-float32;
                                          description
                                            "Maximum reservable bandwidth.";
                                        }
    
                                        container unreserved-bandwidths {
                                          description
                                            "All unreserved bandwidths.";
                                          list unreserved-bandwidth {
                                            description
                                              "List of unreserved bandwidths for different
    priorities.";
                                            leaf priority {
                                              type uint8 {
                                                range
                                                  "0 .. 7";
                                              }
                                              description
                                                "Priority from 0 to 7.";
                                            }
    
                                            leaf unreserved-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Unreserved bandwidth.";
                                            }
                                          }  // list unreserved-bandwidth
                                        }  // container unreserved-bandwidths
    
                                        leaf admin-group {
                                          type uint32;
                                          description
                                            "Administrative Group / Resource Class/Color.";
                                        }
    
                                        container unknown-tlvs {
                                          description
                                            "All unknown TLVs.";
                                          list unknown-tlv {
                                            description
                                              "Unknown TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // list unknown-tlv
                                        }  // container unknown-tlvs
                                      }  // container link-tlv
                                    }  // container te-opaque
    
                                    container extended-prefix-opaque {
                                      description
                                        "All Extended Prefix TLVs in the LSA.";
                                      list extended-prefix-tlv {
                                        description
                                          "Extended Prefix TLV.";
                                        leaf route-type {
                                          type enumeration {
                                            enum
                                              "unspecified" {
                                              value
                                                0;
                                              description
                                                "Unspecified.";
                                            }
                                            enum
                                              "intra-area" {
                                              value
                                                1;
                                              description
                                                "OSPF intra-area route.";
                                            }
                                            enum
                                              "inter-area" {
                                              value
                                                3;
                                              description
                                                "OSPF inter-area route.";
                                            }
                                            enum
                                              "external" {
                                              value
                                                5;
                                              description
                                                "OSPF external route.";
                                            }
                                            enum
                                              "nssa" {
                                              value
                                                7;
                                              description
                                                "OSPF NSSA external route.";
                                            }
                                          }
                                          description
                                            "Route type.";
                                        }
    
                                        container flags {
                                          description
                                            "Prefix flags.";
                                          leaf-list extended-prefix-flags {
                                            type identityref {
                                              base ospfv2-extended-prefix-flag;
                                            }
                                            description
                                              "List of Extended Prefix TLV flags.  This list will
    contain identities for the prefix flags; these
    identities are set in the extended prefix flags.";
                                          }
                                        }  // container flags
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "Address prefix.";
                                        }
    
                                        container unknown-tlvs {
                                          description
                                            "All unknown TLVs.";
                                          list unknown-tlv {
                                            description
                                              "Unknown TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // list unknown-tlv
                                        }  // container unknown-tlvs
                                      }  // list extended-prefix-tlv
                                    }  // container extended-prefix-opaque
    
                                    container extended-link-opaque {
                                      description
                                        "All Extended Link TLVs in the LSA.";
                                      reference
                                        "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                                      container extended-link-tlv {
                                        description
                                          "Extended Link TLV.";
                                        leaf link-id {
                                          type union {
                                            type inet:ipv4-address;
                                            type yang:dotted-quad;
                                          }
                                          description
                                            "Router-LSA Link ID.";
                                        }
    
                                        leaf link-data {
                                          type union {
                                            type inet:ipv4-address;
                                            type uint32;
                                          }
                                          description
                                            "Router-LSA link data.";
                                        }
    
                                        leaf type {
                                          type router-link-type;
                                          description
                                            "Router-LSA link type.";
                                        }
    
                                        container maximum-sid-depth-tlv {
                                          description
                                            "OSPF Node MSD TLV.";
                                          list msd-type {
                                            description
                                              "List of MSD tuples.";
                                            leaf msd-type {
                                              type uint8;
                                              description
                                                "Maximum SID Depth (MSD) type.";
                                            }
    
                                            leaf msd-value {
                                              type uint8;
                                              description
                                                "MSD value for the type.";
                                            }
                                          }  // list msd-type
                                        }  // container maximum-sid-depth-tlv
    
                                        container unknown-tlvs {
                                          description
                                            "All unknown TLVs.";
                                          list unknown-tlv {
                                            description
                                              "Unknown TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // list unknown-tlv
                                        }  // container unknown-tlvs
                                      }  // container extended-link-tlv
                                    }  // container extended-link-opaque
                                  }  // container opaque
                                }  // container body
                              }  // container ospfv2
                              container ospfv3 {
                                description
                                  "OSPFv3 LSA.";
                                container header {
                                  description
                                    "Decoded OSPFv3 LSA header data.";
                                  leaf lsa-id {
                                    type uint32;
                                    mandatory
                                      true;
                                    description
                                      "OSPFv3 LSA ID.";
                                  }
    
                                  leaf age {
                                    type uint16;
                                    mandatory
                                      true;
                                    description
                                      "LSA age.";
                                  }
    
                                  leaf type {
                                    type identityref {
                                      base ospf-lsa-type;
                                    }
                                    mandatory
                                      true;
                                    description
                                      "LSA type.";
                                  }
    
                                  leaf adv-router {
                                    type rt-types:router-id;
                                    mandatory
                                      true;
                                    description
                                      "LSA advertising router.";
                                  }
    
                                  leaf seq-num {
                                    type uint32;
                                    mandatory
                                      true;
                                    description
                                      "LSA sequence number.";
                                  }
    
                                  leaf checksum {
                                    type fletcher-checksum16-type;
                                    mandatory
                                      true;
                                    description
                                      "LSA checksum.";
                                  }
    
                                  leaf length {
                                    type uint16;
                                    mandatory
                                      true;
                                    description
                                      "LSA length, including the header.";
                                  }
                                }  // container header
    
                                container body {
                                  description
                                    "Decoded OSPF LSA body data.";
                                  container router {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" {
                                      description
                                        "Only applies to Router-LSAs.";
                                    }
                                    description
                                      "Router-LSA.";
                                    container router-bits {
                                      description
                                        "Router-LSA bits.";
                                      leaf-list rtr-lsa-bits {
                                        type identityref {
                                          base router-lsa-bit;
                                        }
                                        description
                                          "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                      }
                                    }  // container router-bits
    
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    container links {
                                      description
                                        "All router links.";
                                      list link {
                                        description
                                          "Router-LSA link.";
                                        leaf interface-id {
                                          type uint32;
                                          description
                                            "Interface ID for the link.";
                                        }
    
                                        leaf neighbor-interface-id {
                                          type uint32;
                                          description
                                            "Neighbor's Interface ID for the link.";
                                        }
    
                                        leaf neighbor-router-id {
                                          type rt-types:router-id;
                                          description
                                            "Neighbor's Router ID for the link.";
                                        }
    
                                        leaf type {
                                          type router-link-type;
                                          description
                                            "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Reserved for OSPFv3 Links
    	   4 - Virtual Link.";
                                        }
    
                                        leaf metric {
                                          type uint16;
                                          description
                                            "Link metric.";
                                        }
                                      }  // list link
                                    }  // container links
                                  }  // container router
    
                                  container network {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" {
                                      description
                                        "Only applies to Network-LSAs.";
                                    }
                                    description
                                      "Network-LSA.";
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    container attached-routers {
                                      description
                                        "All attached routers.";
                                      leaf-list attached-router {
                                        type rt-types:router-id;
                                        description
                                          "List of the routers attached to the network.";
                                      }
                                    }  // container attached-routers
                                  }  // container network
    
                                  container inter-area-prefix {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" {
                                      description
                                        "Only applies to Inter-Area-Prefix-LSAs.";
                                    }
                                    description
                                      "Prefix-LSA.";
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "Inter-Area Prefix metric.";
                                    }
    
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-prefix-option;
                                        }
                                        description
                                          "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
                                  }  // container inter-area-prefix
    
                                  container inter-area-router {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" {
                                      description
                                        "Only applies to Inter-Area-Router-LSAs.";
                                    }
                                    description
                                      "Inter-Area-Router-LSA.";
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "Autonomous System Boundary Router (ASBR) metric.";
                                    }
    
                                    leaf destination-router-id {
                                      type rt-types:router-id;
                                      description
                                        "The Router ID of the ASBR described by the LSA.";
                                    }
                                  }  // container inter-area-router
    
                                  container as-external {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" {
                                      description
                                        "Only applies to AS-External-LSAs.";
                                    }
                                    description
                                      "AS-External-LSA.";
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "AS-External-LSA or NSSA-LSA Metric.";
                                    }
    
                                    leaf flags {
                                      type bits {
                                        bit E {
                                          position
                                            0;
                                          description
                                            "When set, the metric specified is a Type 2
    external metric.";
                                        }
                                        bit F {
                                          position
                                            1;
                                          description
                                            "When set, a forwarding address is included
    in the LSA.";
                                        }
                                        bit T {
                                          position
                                            2;
                                          description
                                            "When set, an external route tag is included
    in the LSA.";
                                        }
                                      }
                                      description
                                        "AS-External-LSA or NSSA-LSA flags.";
                                    }
    
                                    leaf referenced-ls-type {
                                      type identityref {
                                        base ospfv3-lsa-type;
                                      }
                                      description
                                        "Referenced Link State (LS) Type.";
                                      reference
                                        "RFC 5340: OSPF for IPv6";
    
                                    }
    
                                    leaf unknown-referenced-ls-type {
                                      type uint16;
                                      description
                                        "Value for an unknown Referenced LS Type.";
                                    }
    
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-prefix-option;
                                        }
                                        description
                                          "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
    
                                    leaf forwarding-address {
                                      type inet:ipv6-address;
                                      description
                                        "IPv6 Forwarding address.";
                                    }
    
                                    leaf external-route-tag {
                                      type uint32;
                                      description
                                        "Route tag.";
                                    }
    
                                    leaf referenced-link-state-id {
                                      type uint32;
                                      description
                                        "Referenced Link State ID.";
                                      reference
                                        "RFC 5340: OSPF for IPv6";
    
                                    }
                                  }  // container as-external
    
                                  container nssa {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" {
                                      description
                                        "Only applies to NSSA-LSAs.";
                                    }
                                    description
                                      "NSSA-LSA.";
                                    leaf metric {
                                      type ospf-metric;
                                      description
                                        "AS-External-LSA or NSSA-LSA Metric.";
                                    }
    
                                    leaf flags {
                                      type bits {
                                        bit E {
                                          position
                                            0;
                                          description
                                            "When set, the metric specified is a Type 2
    external metric.";
                                        }
                                        bit F {
                                          position
                                            1;
                                          description
                                            "When set, a forwarding address is included
    in the LSA.";
                                        }
                                        bit T {
                                          position
                                            2;
                                          description
                                            "When set, an external route tag is included
    in the LSA.";
                                        }
                                      }
                                      description
                                        "AS-External-LSA or NSSA-LSA flags.";
                                    }
    
                                    leaf referenced-ls-type {
                                      type identityref {
                                        base ospfv3-lsa-type;
                                      }
                                      description
                                        "Referenced Link State (LS) Type.";
                                      reference
                                        "RFC 5340: OSPF for IPv6";
    
                                    }
    
                                    leaf unknown-referenced-ls-type {
                                      type uint16;
                                      description
                                        "Value for an unknown Referenced LS Type.";
                                    }
    
                                    leaf prefix {
                                      type inet:ip-prefix;
                                      description
                                        "LSA prefix.";
                                    }
    
                                    container prefix-options {
                                      description
                                        "Prefix options.";
                                      leaf-list prefix-options {
                                        type identityref {
                                          base ospfv3-prefix-option;
                                        }
                                        description
                                          "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                      }
                                    }  // container prefix-options
    
                                    leaf forwarding-address {
                                      type inet:ipv6-address;
                                      description
                                        "IPv6 Forwarding address.";
                                    }
    
                                    leaf external-route-tag {
                                      type uint32;
                                      description
                                        "Route tag.";
                                    }
    
                                    leaf referenced-link-state-id {
                                      type uint32;
                                      description
                                        "Referenced Link State ID.";
                                      reference
                                        "RFC 5340: OSPF for IPv6";
    
                                    }
                                  }  // container nssa
    
                                  container link {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" {
                                      description
                                        "Only applies to Link-LSAs.";
                                    }
                                    description
                                      "Link-LSA.";
                                    leaf rtr-priority {
                                      type uint8;
                                      description
                                        "Router priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible
    to become the DR or BDR.";
                                    }
    
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    leaf link-local-interface-address {
                                      type inet:ipv6-address;
                                      description
                                        "The originating router's link-local
    interface address for the link.";
                                    }
    
                                    leaf num-of-prefixes {
                                      type uint32;
                                      description
                                        "Number of prefixes.";
                                    }
    
                                    container prefixes {
                                      description
                                        "All prefixes for the link.";
                                      list prefix {
                                        description
                                          "List of prefixes associated with the link.";
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
                                      }  // list prefix
                                    }  // container prefixes
                                  }  // container link
    
                                  container intra-area-prefix {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" {
                                      description
                                        "Only applies to Intra-Area-Prefix-LSAs.";
                                    }
                                    description
                                      "Intra-Area-Prefix-LSA.";
                                    leaf referenced-ls-type {
                                      type identityref {
                                        base ospfv3-lsa-type;
                                      }
                                      description
                                        "Referenced LS Type.";
                                    }
    
                                    leaf unknown-referenced-ls-type {
                                      type uint16;
                                      description
                                        "Value for an unknown Referenced LS Type.";
                                    }
    
                                    leaf referenced-link-state-id {
                                      type uint32;
                                      description
                                        "Referenced Link State ID.";
                                    }
    
                                    leaf referenced-adv-router {
                                      type rt-types:router-id;
                                      description
                                        "Referenced Advertising Router.";
                                      reference
                                        "RFC 5340: OSPF for IPv6";
    
                                    }
    
                                    leaf num-of-prefixes {
                                      type uint16;
                                      description
                                        "Number of prefixes.";
                                    }
    
                                    container prefixes {
                                      description
                                        "All prefixes in this LSA.";
                                      list prefix {
                                        description
                                          "List of prefixes in this LSA.";
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf metric {
                                          type uint16;
                                          description
                                            "Prefix metric.";
                                        }
                                      }  // list prefix
                                    }  // container prefixes
                                  }  // container intra-area-prefix
    
                                  container router-information {
                                    when
                                      "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" {
                                      description
                                        "Only applies to Router-Information-LSAs (RFC 7770).";
                                      reference
                                        "RFC 7770: Extensions to OSPF for Advertising Optional
                                        Router Capabilities";
    
                                    }
                                    description
                                      "Router-Information-LSA.";
                                    reference
                                      "RFC 7770: Extensions to OSPF for Advertising Optional
                                      Router Capabilities";
    
                                    container router-capabilities-tlv {
                                      description
                                        "Informational and functional router capabilities.";
                                      container router-informational-capabilities {
                                        description
                                          "OSPF Router Informational Flag definitions.";
                                        leaf-list informational-capabilities {
                                          type identityref {
                                            base informational-capability;
                                          }
                                          description
                                            "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                        }
                                      }  // container router-informational-capabilities
    
                                      list informational-capabilities-flags {
                                        description
                                          "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                        leaf informational-flag {
                                          type uint32;
                                          description
                                            "Individual informational capability flag.";
                                        }
                                      }  // list informational-capabilities-flags
    
                                      list functional-capabilities {
                                        description
                                          "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                        leaf functional-flag {
                                          type uint32;
                                          description
                                            "Individual functional capability flag.";
                                        }
                                      }  // list functional-capabilities
                                    }  // container router-capabilities-tlv
    
                                    container node-tag-tlvs {
                                      description
                                        "All Node Admin Tag TLVs.";
                                      list node-tag-tlv {
                                        description
                                          "Node Admin Tag TLV.";
                                        list node-tag {
                                          description
                                            "List of tags.";
                                          leaf tag {
                                            type uint32;
                                            description
                                              "Value of the node administrative tag.";
                                          }
                                        }  // list node-tag
                                      }  // list node-tag-tlv
                                    }  // container node-tag-tlvs
    
                                    container dynamic-hostname-tlv {
                                      description
                                        "OSPF Dynamic Hostname TLV.";
                                      leaf hostname {
                                        type string {
                                          length
                                            "1..255";
                                        }
                                        description
                                          "Dynamic hostname.";
                                      }
                                    }  // container dynamic-hostname-tlv
    
                                    container sbfd-discriminator-tlv {
                                      description
                                        "OSPF S-BFD Discriminator TLV.";
                                      list sbfd-discriminators {
                                        description
                                          "List of S-BFD Discriminators.";
                                        leaf sbfd-discriminator {
                                          type uint32;
                                          description
                                            "Individual S-BFD Discriminator.";
                                        }
                                      }  // list sbfd-discriminators
                                    }  // container sbfd-discriminator-tlv
                                  }  // container router-information
    
                                  container e-router {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-router-lsa'" {
                                      description
                                        "Only valid for OSPFv3 E-Router-LSAs.";
                                    }
                                    description
                                      "OSPFv3 E-Router-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.1";
    
                                    container router-bits {
                                      description
                                        "Router-LSA bits.";
                                      leaf-list rtr-lsa-bits {
                                        type identityref {
                                          base router-lsa-bit;
                                        }
                                        description
                                          "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                      }
                                    }  // container router-bits
    
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    list e-router-tlvs {
                                      description
                                        "E-Router-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-Router TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container link-tlv {
                                        description
                                          "E-Router-LSA TLV.";
                                        leaf interface-id {
                                          type uint32;
                                          description
                                            "Interface ID for link.";
                                        }
    
                                        leaf neighbor-interface-id {
                                          type uint32;
                                          description
                                            "Neighbor's Interface ID for link.";
                                        }
    
                                        leaf neighbor-router-id {
                                          type rt-types:router-id;
                                          description
                                            "Neighbor's Router ID for link.";
                                        }
    
                                        leaf type {
                                          type ospf:router-link-type;
                                          description
                                            "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Stub Network Link
    	   4 - Virtual Link.";
                                        }
    
                                        leaf metric {
                                          type ospf:ospf-link-metric;
                                          description
                                            "Link metric.";
                                        }
    
                                        list sub-tlvs {
                                          description
                                            "Link TLV sub-TLVs.";
                                          container unknown-sub-tlv {
                                            description
                                              "Unknown External TLV sub-TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-sub-tlv
                                        }  // list sub-tlvs
                                      }  // container link-tlv
                                    }  // list e-router-tlvs
                                  }  // container e-router
    
                                  container e-network {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-network-lsa'" {
                                      description
                                        "Only applies to E-Network-LSAs.";
                                    }
                                    description
                                      "E-Network-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.2";
    
                                    container lsa-options {
                                      description
                                        "OSPFv3 LSA Options.";
                                      leaf-list lsa-options {
                                        type identityref {
                                          base ospfv3-lsa-option;
                                        }
                                        description
                                          "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                      }
                                    }  // container lsa-options
    
                                    list e-network-tlvs {
                                      description
                                        "E-Network-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-Network TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container attached-router-tlv {
                                        description
                                          "Attached-Routers TLV.";
                                        leaf-list adjacent-neighbor-router-id {
                                          type rt-types:router-id;
                                          description
                                            "Adjacent neighbor's Router ID.";
                                        }
                                      }  // container attached-router-tlv
                                    }  // list e-network-tlvs
                                  }  // container e-network
    
                                  container e-nssa {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-nssa-lsa'" {
                                      description
                                        "Only applies to E-NSSA-LSAs.";
                                    }
                                    description
                                      "E-NSSA-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.6";
    
                                    list e-external-tlvs {
                                      description
                                        "E-NSSA-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-External TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container external-prefix-tlv {
                                        description
                                          "External-Prefix TLV.";
                                        container flags {
                                          description
                                            "External prefix flags.";
                                          leaf-list ospfv3-e-external-prefix-bits {
                                            type identityref {
                                              base ospfv3-e-external-prefix-option;
                                            }
                                            description
                                              "OSPFv3 External-Prefix TLV bits list.";
                                          }
                                        }  // container flags
    
                                        leaf metric {
                                          type ospf:ospf-metric;
                                          description
                                            "External prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          reference
                                            "RFC 8362:  OSPFv3 Link State Advertisement (LSA)
                                            Extensibility, Section 3.1";
    
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-e-prefix-option;
                                            }
                                            description
                                              "OSPFv3 prefix options flag list.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        list sub-tlvs {
                                          description
                                            "External-Prefix TLV sub-TLVs.";
                                          container ipv6-fwd-addr-sub-tlv {
                                            description
                                              "IPv6-Forwarding-Address sub-TLV for
    E-AS-External-LSAs and E-NSSA-LSAs for the IPv6
    address family.";
                                            reference
                                              "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                              Extensibility, Section 3.10";
    
                                            leaf forwarding-address {
                                              type inet:ipv6-address;
                                              description
                                                "IPv6 forwarding address.";
                                            }
                                          }  // container ipv6-fwd-addr-sub-tlv
    
                                          container ipv4-fwd-addr-sub-tlv {
                                            description
                                              "IPv4-Forwarding-Address sub-TLV for
    E-AS-External-LSAs and E-NSSA-LSAs for the IPv4
    address family.";
                                            reference
                                              "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                              Extensibility, Section 3.11";
    
                                            leaf forwarding-address {
                                              type inet:ipv4-address;
                                              description
                                                "IPv4 forwarding address.";
                                            }
                                          }  // container ipv4-fwd-addr-sub-tlv
    
                                          container route-tag-sub-tlv {
                                            description
                                              "Route-Tag sub-TLV.";
                                            reference
                                              "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                              Extensibility, Section 3.12";
    
                                            leaf route-tag {
                                              type uint32;
                                              description
                                                "Route tag.";
                                            }
                                          }  // container route-tag-sub-tlv
    
                                          container unknown-sub-tlv {
                                            description
                                              "Unknown External TLV sub-TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-sub-tlv
                                        }  // list sub-tlvs
                                      }  // container external-prefix-tlv
                                    }  // list e-external-tlvs
                                  }  // container e-nssa
    
                                  container e-inter-area-prefix {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-inter-area-prefix-lsa'" {
                                      description
                                        "Only applies to E-Inter-Area-Prefix-LSAs.";
                                    }
                                    description
                                      "E-Inter-Area-Prefix-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.3";
    
                                    list e-inter-prefix-tlvs {
                                      description
                                        "E-Inter-Area-Prefix-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-Inter-Area-Prefix TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container inter-prefix-tlv {
                                        description
                                          "Unknown E-Inter-Area-Prefix-LSA TLV.";
                                        leaf metric {
                                          type ospf:ospf-metric;
                                          description
                                            "Inter-Area Prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          reference
                                            "RFC 8362:  OSPFv3 Link State Advertisement (LSA)
                                            Extensibility, Section 3.1";
    
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-e-prefix-option;
                                            }
                                            description
                                              "OSPFv3 prefix options flag list.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        list sub-tlvs {
                                          description
                                            "Inter-Area-Prefix TLV sub-TLVs.";
                                          container unknown-sub-tlv {
                                            description
                                              "Unknown External TLV sub-TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-sub-tlv
                                        }  // list sub-tlvs
                                      }  // container inter-prefix-tlv
                                    }  // list e-inter-prefix-tlvs
                                  }  // container e-inter-area-prefix
    
                                  container e-inter-area-router {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-inter-area-router-lsa'" {
                                      description
                                        "Only applies to E-Inter-Area-Router-LSAs.";
                                    }
                                    description
                                      "E-Inter-Area-Router-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.4";
    
                                    list e-inter-router-tlvs {
                                      description
                                        "E-Inter-Area-Router-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-Inter-Area-Router TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container inter-router-tlv {
                                        description
                                          "Unknown E-Inter-Area-Router-LSA TLV.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf metric {
                                          type ospf:ospf-metric;
                                          description
                                            "Inter-Area Router metric.";
                                        }
    
                                        leaf destination-router-id {
                                          type rt-types:router-id;
                                          description
                                            "Destination Router ID.";
                                        }
    
                                        list sub-tlvs {
                                          description
                                            "Inter-Area-Router TLV sub-TLVs.";
                                          container unknown-sub-tlv {
                                            description
                                              "Unknown External TLV sub-TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-sub-tlv
                                        }  // list sub-tlvs
                                      }  // container inter-router-tlv
                                    }  // list e-inter-router-tlvs
                                  }  // container e-inter-area-router
    
                                  container e-intra-area-prefix {
                                    when
                                      "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-intra-area-prefix-lsa'" {
                                      description
                                        "Only applies to E-Intra-Area-Prefix-LSAs.";
                                    }
                                    description
                                      "E-Intra-Area-Prefix-LSA contents.";
                                    reference
                                      "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                      Extensibility, Section 4.8";
    
                                    leaf referenced-ls-type {
                                      type uint16;
                                      description
                                        "Referenced Link State type.";
                                    }
    
                                    leaf referenced-link-state-id {
                                      type uint32;
                                      description
                                        "Referenced Link State ID.";
                                    }
    
                                    leaf referenced-adv-router {
                                      type rt-types:router-id;
                                      description
                                        "Referenced advertising router.";
                                    }
    
                                    list e-intra-prefix-tlvs {
                                      description
                                        "E-Intra-Area-Prefix-LSA TLVs.";
                                      container unknown-tlv {
                                        description
                                          "Unknown E-Intra-Area-Prefix TLV.";
                                        leaf type {
                                          type uint16;
                                          description
                                            "TLV type.";
                                        }
    
                                        leaf length {
                                          type uint16;
                                          description
                                            "TLV length (octets).";
                                        }
    
                                        leaf value {
                                          type yang:hex-string;
                                          description
                                            "TLV value.";
                                        }
                                      }  // container unknown-tlv
    
                                      container intra-prefix-tlv {
                                        description
                                          "Intra-Area-Prefix-LSA TLV.";
                                        leaf metric {
                                          type ospf:ospf-metric;
                                          description
                                            "Intra-Area Prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          reference
                                            "RFC 8362:  OSPFv3 Link State Advertisement (LSA)
                                            Extensibility, Section 3.1";
    
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-e-prefix-option;
                                            }
                                            description
                                              "OSPFv3 prefix options flag list.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        list sub-tlvs {
                                          description
                                            "Intra-Area-Prefix TLV sub-TLVs.";
                                          container unknown-sub-tlv {
                                            description
                                              "Unknown External TLV sub-TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-sub-tlv
                                        }  // list sub-tlvs
                                      }  // container intra-prefix-tlv
                                    }  // list e-intra-prefix-tlvs
                                  }  // container e-intra-area-prefix
                                }  // container body
                              }  // container ospfv3
                            }  // choice version
                          }  // list area-scope-lsa
                        }  // container area-scope-lsas
                      }  // list area-scope-lsa-type
                    }  // container database
    
                    container virtual-links {
                      when
                        "derived-from-or-self(../area-type, 'normal-area') and ../area-id = '0.0.0.0'" {
                        description
                          "Virtual links must be in a backbone area.";
                      }
                      description
                        "All virtual links.";
                      list virtual-link {
                        key "transit-area-id router-id";
                        description
                          "OSPF virtual link.";
                        leaf transit-area-id {
                          type leafref {
                            path "../../../../area/area-id";
                          }
                          must
                            "derived-from-or-self(../../../../area[area-id=current()]/area-type, 'normal-area') and ../../../../area[area-id=current()]/area-id != '0.0.0.0'" {
                            error-message
                              "The virtual link transit area must not be the backbone area.";
                            description
                              "The virtual link transit area must not be the
    backbone area (0.0.0.0).";
                          }
                          description
                            "Virtual link transit area ID.";
                        }
    
                        leaf router-id {
                          type rt-types:router-id;
                          description
                            "Virtual link remote endpoint Router ID.";
                        }
    
                        leaf hello-interval {
                          type uint16;
                          units "seconds";
                          description
                            "Interval between Hello packets (seconds).  It must
    be the same for all routers on the same network.
    Different networks, implementations, and deployments
    will use different Hello intervals.  A sample value
    for a LAN network would be 10 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf dead-interval {
                          type uint16;
                          units "seconds";
                          must
                            "../dead-interval > ../hello-interval" {
                            error-message
                              "The dead interval must be larger than the Hello interval";
                            description
                              "The value must be greater than 'hello-interval'.";
                          }
                          description
                            "Interval after which a neighbor is declared down
    (seconds) if Hello packets are not received.  It is
    typically 3 or 4 times the 'hello-interval' period.
    A typical value for LAN networks is 40 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf retransmit-interval {
                          type uint16 {
                            range "1..3600";
                          }
                          units "seconds";
                          description
                            "Interval between retransmitting unacknowledged Link
    State Advertisements (LSAs) (seconds).  This should
    be well over the round-trip transmit delay for
    any two routers on the network.  A sample value
    would be 5 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf transmit-delay {
                          type uint16;
                          units "seconds";
                          description
                            "Estimated time needed to transmit Link State Update
    (LSU) packets on the interface (seconds).  LSAs have
    their age incremented by this amount when advertised
    on the interface.  A sample value would be 1 second.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf lls {
                          if-feature lls;
                          type boolean;
                          description
                            "Enables/disables link-local signaling (LLS) support.";
                        }
    
                        container ttl-security {
                          if-feature ttl-security;
                          description
                            "Time to Live (TTL) security checking.";
                          leaf enabled {
                            type boolean;
                            description
                              "Enables/disables TTL security checking.";
                          }
    
                          leaf hops {
                            type uint8 {
                              range "1..254";
                            }
                            default "1";
                            description
                              "Maximum number of hops that an OSPF packet may
    have traversed before reception.";
                          }
                        }  // container ttl-security
    
                        leaf enabled {
                          type boolean;
                          default "true";
                          description
                            "Enables/disables the OSPF protocol on the interface.";
                        }
    
                        container authentication {
                          description
                            "Authentication configuration.";
                          choice auth-type-selection {
                            description
                              "Options for OSPFv2/OSPFv3 authentication
    configuration.";
                            case ospfv2-auth {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" {
                                description
                                  "Applied to OSPFv2 only.";
                              }
                              leaf ospfv2-auth-trailer-rfc {
                                if-feature ospfv2-authentication-trailer;
                                type ospfv2-auth-trailer-rfc-version;
                                description
                                  "Version of OSPFv2 authentication trailer support.
    See RFCs 5709 and 7474.";
                                reference
                                  "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication
                                   RFC 7474: Security Extension for OSPFv2 When Using
                                  Manual Key Management";
    
                              }
    
                              choice ospfv2-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv2-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv2-key-id {
                                    type uint32;
                                    description
                                      "Key identifier.";
                                  }
    
                                  leaf ospfv2-key {
                                    type string;
                                    description
                                      "OSPFv2 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv2-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv2-auth-specification
                            }  // case ospfv2-auth
    
                            case ospfv3-auth-ipsec {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-ipsec;
                              leaf sa {
                                type string;
                                description
                                  "Name of the Security Association (SA).";
                              }
                            }  // case ospfv3-auth-ipsec
    
                            case ospfv3-auth-trailer {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-trailer;
                              choice ospfv3-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv3-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv3-sa-id {
                                    type uint16;
                                    description
                                      "Security Association (SA) Identifier.";
                                  }
    
                                  leaf ospfv3-key {
                                    type string;
                                    description
                                      "OSPFv3 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv3-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv3-auth-specification
                            }  // case ospfv3-auth-trailer
                          }  // choice auth-type-selection
                        }  // container authentication
    
                        leaf cost {
                          type ospf-link-metric;
                          config false;
                          description
                            "Virtual link interface's cost.";
                        }
    
                        leaf state {
                          type if-state-type;
                          config false;
                          description
                            "Interface state.";
                        }
    
                        leaf hello-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before the
    next Hello packet is sent on the interface.";
                        }
    
                        leaf wait-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before
    the interface exits the 'Waiting' state.";
                        }
    
                        leaf dr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "DR Router ID.";
                        }
    
                        leaf dr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "DR IP address.";
                        }
    
                        leaf bdr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "BDR Router ID.";
                        }
    
                        leaf bdr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "BDR IP address.";
                        }
    
                        container statistics {
                          config false;
                          description
                            "Per-interface statistics.";
                          leaf discontinuity-time {
                            type yang:date-and-time;
                            description
                              "The time of the most recent occasion at which any one or
    more of this OSPF interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF interface was last reinitialized, then
    this node contains the time the OSPF interface was
    reinitialized, which normally occurs when it was
    created.";
                          }
    
                          leaf if-event-count {
                            type yang:counter32;
                            description
                              "The number of times this interface has changed its
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF interface
    is reinitialized.";
                          }
    
                          leaf link-scope-lsa-count {
                            type yang:gauge32;
                            description
                              "The number of link-scope LSAs.";
                          }
    
                          leaf link-scope-lsa-cksum-sum {
                            type uint32;
                            description
                              "The modulo 2^32 sum of the LSA checksums
    for link-scope LSAs.  The value should be treated as
    unsigned when comparing two sums of checksums.  While
    differing checksums indicate a different combination
    of LSAs, equivalent checksums don't guarantee that the
    LSAs are the same, given that multiple combinations of
    LSAs can result in the same checksum.";
                          }
    
                          container database {
                            description
                              "Container for link-scope LSA type statistics.";
                            list link-scope-lsa-type {
                              description
                                "List of link-scope LSA statistics.";
                              leaf lsa-type {
                                type uint16;
                                description
                                  "Link-scope LSA type.";
                              }
    
                              leaf lsa-count {
                                type yang:gauge32;
                                description
                                  "The number of LSAs of this LSA type.";
                              }
    
                              leaf lsa-cksum-sum {
                                type uint32;
                                description
                                  "The modulo 2^32 sum of the LSA checksums
    for LSAs of this type.  The value should be
    treated as unsigned when comparing two sums of
    checksums.  While differing checksums indicate a
    different combination of LSAs, equivalent checksums
    don't guarantee that the LSAs are the same, given that
    multiple combinations of LSAs can result in the same
    checksum.";
                              }
                            }  // list link-scope-lsa-type
                          }  // container database
                        }  // container statistics
    
                        container neighbors {
                          config false;
                          description
                            "All neighbors for the interface.";
                          list neighbor {
                            key "neighbor-router-id";
                            description
                              "List of interface OSPF neighbors.";
                            leaf neighbor-router-id {
                              type rt-types:router-id;
                              description
                                "Neighbor's Router ID.";
                            }
    
                            leaf address {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's address.";
                            }
    
                            leaf dr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's DR Router ID.";
                            }
    
                            leaf dr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's DR IP address.";
                            }
    
                            leaf bdr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's BDR Router ID.";
                            }
    
                            leaf bdr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's BDR IP address.";
                            }
    
                            leaf state {
                              type nbr-state-type;
                              config false;
                              description
                                "OSPF neighbor state.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              config false;
                              description
                                "Cost to reach the neighbor for point-to-multipoint
    and Hybrid networks.";
                            }
    
                            leaf dead-timer {
                              type rt-types:timer-value-seconds16;
                              config false;
                              description
                                "This timer tracks the remaining time before
    the neighbor is declared dead.";
                            }
    
                            container statistics {
                              config false;
                              description
                                "Per-neighbor statistics.";
                              leaf discontinuity-time {
                                type yang:date-and-time;
                                description
                                  "The time of the most recent occasion at which any one or
    more of this OSPF neighbor's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF neighbor was last reinitialized, then
    this node contains the time the OSPF neighbor was
    reinitialized, which normally occurs when the neighbor
    is dynamically discovered and created.";
                              }
    
                              leaf nbr-event-count {
                                type yang:counter32;
                                description
                                  "The number of times this neighbor has changed
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF neighbor
    is reinitialized.";
                              }
    
                              leaf nbr-retrans-qlen {
                                type yang:gauge32;
                                description
                                  "The current length of the retransmission queue.";
                              }
                            }  // container statistics
                          }  // list neighbor
                        }  // container neighbors
    
                        container database {
                          config false;
                          description
                            "Link-scope LSDB.";
                          list link-scope-lsa-type {
                            key "lsa-type";
                            description
                              "List of OSPF link-scope LSAs.";
                            leaf lsa-type {
                              type uint16;
                              description
                                "OSPF link-scope LSA type.";
                            }
    
                            container link-scope-lsas {
                              description
                                "All link-scope LSAs of this LSA type.";
                              list link-scope-lsa {
                                key "lsa-id adv-router";
                                description
                                  "List of OSPF link-scope LSAs.";
                                leaf lsa-id {
                                  type union {
                                    type yang:dotted-quad;
                                    type uint32;
                                  }
                                  description
                                    "Link State ID.";
                                }
    
                                leaf adv-router {
                                  type rt-types:router-id;
                                  description
                                    "Advertising router.";
                                }
    
                                leaf decode-completed {
                                  type boolean;
                                  description
                                    "The OSPF LSA body was successfully decoded, except for
    unknown TLVs.  Unknown LSA types and OSPFv2 unknown
    Opaque-LSA types are not decoded.  Additionally,
    malformed LSAs are generally not accepted and will
    not be in the Link State Database (LSDB).";
                                }
    
                                leaf raw-data {
                                  type yang:hex-string;
                                  description
                                    "The hexadecimal representation of the complete LSA as
    received or originated, in network byte order.";
                                }
    
                                choice version {
                                  description
                                    "OSPFv2 or OSPFv3 LSA body.";
                                  container ospfv2 {
                                    description
                                      "OSPFv2 LSA.";
                                    container header {
                                      must
                                        "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" {
                                        description
                                          "The opaque-type and the opaque-id only apply to
    Opaque-LSAs.";
                                      }
                                      description
                                        "Decoded OSPFv2 LSA header data.";
                                      container lsa-options {
                                        description
                                          "LSA Options.";
                                        leaf-list lsa-options {
                                          type identityref {
                                            base ospfv2-lsa-option;
                                          }
                                          description
                                            "List of LSA Options.  This list will contain the
    identities for the OSPFv2 LSA Options that are set.";
                                        }
                                      }  // container lsa-options
    
                                      leaf lsa-id {
                                        type yang:dotted-quad;
                                        mandatory
                                          true;
                                        description
                                          "Link State ID.";
                                      }
    
                                      leaf opaque-type {
                                        type uint8;
                                        description
                                          "Opaque-LSA type.";
                                      }
    
                                      leaf opaque-id {
                                        type opaque-id;
                                        description
                                          "Opaque-LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPFv2 LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        leaf num-of-links {
                                          type uint16;
                                          description
                                            "Number of links in the Router-LSA.";
                                        }
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container topologies {
                                              description
                                                "All topologies for the link.";
                                              list topology {
                                                description
                                                  "Topology-specific information.";
                                                leaf mt-id {
                                                  type uint8;
                                                  description
                                                    "The MT-ID for the topology enabled on the link.";
                                                }
    
                                                leaf metric {
                                                  type uint16;
                                                  description
                                                    "Metric for the topology.";
                                                }
                                              }  // list topology
                                            }  // container topologies
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        leaf network-mask {
                                          type yang:dotted-quad;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type inet:ipv4-address;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container summary {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" {
                                          description
                                            "Only applies to summary LSAs.";
                                        }
                                        description
                                          "Summary LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the summary LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the summary.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container summary
    
                                      container external {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-external-lsa-type')" {
                                          description
                                            "Only applies to AS-External-LSAs and NSSA-LSAs.";
                                        }
                                        description
                                          "External-LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the External-LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the
    external or NSSA prefix.";
                                            }
    
                                            leaf flags {
                                              type bits {
                                                bit
                                                  E {
                                                  position
                                                    0;
                                                  description
                                                    "When set, the metric specified is a Type 2
    external metric.";
                                                }
                                              }
                                              description
                                                "Topology flags.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
    
                                            leaf forwarding-address {
                                              type inet:ipv4-address;
                                              description
                                                "IPv4 Forwarding address.";
                                            }
    
                                            leaf external-route-tag {
                                              type uint32;
                                              description
                                                "Route tag for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container external
    
                                      container opaque {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" {
                                          description
                                            "Only applies to Opaque-LSAs.";
                                        }
                                        description
                                          "Opaque-LSA.";
                                        container ri-opaque {
                                          description
                                            "OSPF Router-Information-Opaque-LSA.";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                          container router-capabilities-tlv {
                                            description
                                              "Informational and functional router capabilities.";
                                            container router-informational-capabilities {
                                              description
                                                "OSPF Router Informational Flag definitions.";
                                              leaf-list informational-capabilities {
                                                type identityref {
                                                  base informational-capability;
                                                }
                                                description
                                                  "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                              }
                                            }  // container router-informational-capabilities
    
                                            list informational-capabilities-flags {
                                              description
                                                "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                              leaf informational-flag {
                                                type uint32;
                                                description
                                                  "Individual informational capability flag.";
                                              }
                                            }  // list informational-capabilities-flags
    
                                            list functional-capabilities {
                                              description
                                                "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                              leaf functional-flag {
                                                type uint32;
                                                description
                                                  "Individual functional capability flag.";
                                              }
                                            }  // list functional-capabilities
                                          }  // container router-capabilities-tlv
    
                                          container node-tag-tlvs {
                                            description
                                              "All Node Admin Tag TLVs.";
                                            list node-tag-tlv {
                                              description
                                                "Node Admin Tag TLV.";
                                              list node-tag {
                                                description
                                                  "List of tags.";
                                                leaf tag {
                                                  type uint32;
                                                  description
                                                    "Value of the node administrative tag.";
                                                }
                                              }  // list node-tag
                                            }  // list node-tag-tlv
                                          }  // container node-tag-tlvs
    
                                          container dynamic-hostname-tlv {
                                            description
                                              "OSPF Dynamic Hostname TLV.";
                                            leaf hostname {
                                              type string {
                                                length
                                                  "1..255";
                                              }
                                              description
                                                "Dynamic hostname.";
                                            }
                                          }  // container dynamic-hostname-tlv
    
                                          container sbfd-discriminator-tlv {
                                            description
                                              "OSPF S-BFD Discriminator TLV.";
                                            list sbfd-discriminators {
                                              description
                                                "List of S-BFD Discriminators.";
                                              leaf sbfd-discriminator {
                                                type uint32;
                                                description
                                                  "Individual S-BFD Discriminator.";
                                              }
                                            }  // list sbfd-discriminators
                                          }  // container sbfd-discriminator-tlv
    
                                          container maximum-sid-depth-tlv {
                                            description
                                              "OSPF Node MSD TLV.";
                                            list msd-type {
                                              description
                                                "List of MSD tuples.";
                                              leaf msd-type {
                                                type uint8;
                                                description
                                                  "Maximum SID Depth (MSD) type.";
                                              }
    
                                              leaf msd-value {
                                                type uint8;
                                                description
                                                  "MSD value for the type.";
                                              }
                                            }  // list msd-type
                                          }  // container maximum-sid-depth-tlv
    
                                          container unknown-tlvs {
                                            description
                                              "All unknown TLVs.";
                                            list unknown-tlv {
                                              description
                                                "Unknown TLV.";
                                              leaf type {
                                                type uint16;
                                                description
                                                  "TLV type.";
                                              }
    
                                              leaf length {
                                                type uint16;
                                                description
                                                  "TLV length (octets).";
                                              }
    
                                              leaf value {
                                                type yang:hex-string;
                                                description
                                                  "TLV value.";
                                              }
                                            }  // list unknown-tlv
                                          }  // container unknown-tlvs
                                        }  // container ri-opaque
    
                                        container te-opaque {
                                          description
                                            "OSPFv2 TE Opaque-LSA.";
                                          reference
                                            "RFC 3630: Traffic Engineering (TE) Extensions to
                                            OSPF Version 2";
    
                                          container router-address-tlv {
                                            description
                                              "Router address TLV.";
                                            leaf router-address {
                                              type inet:ipv4-address;
                                              description
                                                "Router address.";
                                            }
                                          }  // container router-address-tlv
    
                                          container link-tlv {
                                            description
                                              "Describes a single link.  It is constructed
    from a set of sub-TLVs.";
                                            leaf link-type {
                                              type router-link-type;
                                              mandatory
                                                true;
                                              description
                                                "Link type.";
                                            }
    
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              mandatory
                                                true;
                                              description
                                                "Link ID.";
                                            }
    
                                            container local-if-ipv4-addrs {
                                              description
                                                "All local interface IPv4 addresses.";
                                              leaf-list local-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of local interface IPv4 addresses.";
                                              }
                                            }  // container local-if-ipv4-addrs
    
                                            container remote-if-ipv4-addrs {
                                              description
                                                "All remote interface IPv4 addresses.";
                                              leaf-list remote-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of remote interface IPv4 addresses.";
                                              }
                                            }  // container remote-if-ipv4-addrs
    
                                            leaf te-metric {
                                              type uint32;
                                              description
                                                "TE metric.";
                                            }
    
                                            leaf max-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum bandwidth.";
                                            }
    
                                            leaf max-reservable-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum reservable bandwidth.";
                                            }
    
                                            container unreserved-bandwidths {
                                              description
                                                "All unreserved bandwidths.";
                                              list unreserved-bandwidth {
                                                description
                                                  "List of unreserved bandwidths for different
    priorities.";
                                                leaf priority {
                                                  type uint8 {
                                                    range
                                                      "0 .. 7";
                                                  }
                                                  description
                                                    "Priority from 0 to 7.";
                                                }
    
                                                leaf unreserved-bandwidth {
                                                  type rt-types:bandwidth-ieee-float32;
                                                  description
                                                    "Unreserved bandwidth.";
                                                }
                                              }  // list unreserved-bandwidth
                                            }  // container unreserved-bandwidths
    
                                            leaf admin-group {
                                              type uint32;
                                              description
                                                "Administrative Group / Resource Class/Color.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container link-tlv
                                        }  // container te-opaque
    
                                        container extended-prefix-opaque {
                                          description
                                            "All Extended Prefix TLVs in the LSA.";
                                          list extended-prefix-tlv {
                                            description
                                              "Extended Prefix TLV.";
                                            leaf route-type {
                                              type enumeration {
                                                enum
                                                  "unspecified" {
                                                  value
                                                    0;
                                                  description
                                                    "Unspecified.";
                                                }
                                                enum
                                                  "intra-area" {
                                                  value
                                                    1;
                                                  description
                                                    "OSPF intra-area route.";
                                                }
                                                enum
                                                  "inter-area" {
                                                  value
                                                    3;
                                                  description
                                                    "OSPF inter-area route.";
                                                }
                                                enum
                                                  "external" {
                                                  value
                                                    5;
                                                  description
                                                    "OSPF external route.";
                                                }
                                                enum
                                                  "nssa" {
                                                  value
                                                    7;
                                                  description
                                                    "OSPF NSSA external route.";
                                                }
                                              }
                                              description
                                                "Route type.";
                                            }
    
                                            container flags {
                                              description
                                                "Prefix flags.";
                                              leaf-list extended-prefix-flags {
                                                type identityref {
                                                  base ospfv2-extended-prefix-flag;
                                                }
                                                description
                                                  "List of Extended Prefix TLV flags.  This list will
    contain identities for the prefix flags; these
    identities are set in the extended prefix flags.";
                                              }
                                            }  // container flags
    
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "Address prefix.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // list extended-prefix-tlv
                                        }  // container extended-prefix-opaque
    
                                        container extended-link-opaque {
                                          description
                                            "All Extended Link TLVs in the LSA.";
                                          reference
                                            "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                                          container extended-link-tlv {
                                            description
                                              "Extended Link TLV.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container maximum-sid-depth-tlv {
                                              description
                                                "OSPF Node MSD TLV.";
                                              list msd-type {
                                                description
                                                  "List of MSD tuples.";
                                                leaf msd-type {
                                                  type uint8;
                                                  description
                                                    "Maximum SID Depth (MSD) type.";
                                                }
    
                                                leaf msd-value {
                                                  type uint8;
                                                  description
                                                    "MSD value for the type.";
                                                }
                                              }  // list msd-type
                                            }  // container maximum-sid-depth-tlv
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container extended-link-tlv
                                        }  // container extended-link-opaque
                                      }  // container opaque
                                    }  // container body
                                  }  // container ospfv2
                                  container ospfv3 {
                                    description
                                      "OSPFv3 LSA.";
                                    container header {
                                      description
                                        "Decoded OSPFv3 LSA header data.";
                                      leaf lsa-id {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "OSPFv3 LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPF LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf interface-id {
                                              type uint32;
                                              description
                                                "Interface ID for the link.";
                                            }
    
                                            leaf neighbor-interface-id {
                                              type uint32;
                                              description
                                                "Neighbor's Interface ID for the link.";
                                            }
    
                                            leaf neighbor-router-id {
                                              type rt-types:router-id;
                                              description
                                                "Neighbor's Router ID for the link.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Reserved for OSPFv3 Links
    	   4 - Virtual Link.";
                                            }
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Link metric.";
                                            }
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type rt-types:router-id;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container inter-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Prefix-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Inter-Area Prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
                                      }  // container inter-area-prefix
    
                                      container inter-area-router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Router-LSAs.";
                                        }
                                        description
                                          "Inter-Area-Router-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Autonomous System Boundary Router (ASBR) metric.";
                                        }
    
                                        leaf destination-router-id {
                                          type rt-types:router-id;
                                          description
                                            "The Router ID of the ASBR described by the LSA.";
                                        }
                                      }  // container inter-area-router
    
                                      container as-external {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" {
                                          description
                                            "Only applies to AS-External-LSAs.";
                                        }
                                        description
                                          "AS-External-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container as-external
    
                                      container nssa {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" {
                                          description
                                            "Only applies to NSSA-LSAs.";
                                        }
                                        description
                                          "NSSA-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container nssa
    
                                      container link {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" {
                                          description
                                            "Only applies to Link-LSAs.";
                                        }
                                        description
                                          "Link-LSA.";
                                        leaf rtr-priority {
                                          type uint8;
                                          description
                                            "Router priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible
    to become the DR or BDR.";
                                        }
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf link-local-interface-address {
                                          type inet:ipv6-address;
                                          description
                                            "The originating router's link-local
    interface address for the link.";
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint32;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes for the link.";
                                          list prefix {
                                            description
                                              "List of prefixes associated with the link.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container link
    
                                      container intra-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" {
                                          description
                                            "Only applies to Intra-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Intra-Area-Prefix-LSA.";
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced LS Type.";
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                        }
    
                                        leaf referenced-adv-router {
                                          type rt-types:router-id;
                                          description
                                            "Referenced Advertising Router.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint16;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes in this LSA.";
                                          list prefix {
                                            description
                                              "List of prefixes in this LSA.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Prefix metric.";
                                            }
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container intra-area-prefix
    
                                      container router-information {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" {
                                          description
                                            "Only applies to Router-Information-LSAs (RFC 7770).";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                        }
                                        description
                                          "Router-Information-LSA.";
                                        reference
                                          "RFC 7770: Extensions to OSPF for Advertising Optional
                                          Router Capabilities";
    
                                        container router-capabilities-tlv {
                                          description
                                            "Informational and functional router capabilities.";
                                          container router-informational-capabilities {
                                            description
                                              "OSPF Router Informational Flag definitions.";
                                            leaf-list informational-capabilities {
                                              type identityref {
                                                base informational-capability;
                                              }
                                              description
                                                "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                            }
                                          }  // container router-informational-capabilities
    
                                          list informational-capabilities-flags {
                                            description
                                              "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                            leaf informational-flag {
                                              type uint32;
                                              description
                                                "Individual informational capability flag.";
                                            }
                                          }  // list informational-capabilities-flags
    
                                          list functional-capabilities {
                                            description
                                              "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                            leaf functional-flag {
                                              type uint32;
                                              description
                                                "Individual functional capability flag.";
                                            }
                                          }  // list functional-capabilities
                                        }  // container router-capabilities-tlv
    
                                        container node-tag-tlvs {
                                          description
                                            "All Node Admin Tag TLVs.";
                                          list node-tag-tlv {
                                            description
                                              "Node Admin Tag TLV.";
                                            list node-tag {
                                              description
                                                "List of tags.";
                                              leaf tag {
                                                type uint32;
                                                description
                                                  "Value of the node administrative tag.";
                                              }
                                            }  // list node-tag
                                          }  // list node-tag-tlv
                                        }  // container node-tag-tlvs
    
                                        container dynamic-hostname-tlv {
                                          description
                                            "OSPF Dynamic Hostname TLV.";
                                          leaf hostname {
                                            type string {
                                              length
                                                "1..255";
                                            }
                                            description
                                              "Dynamic hostname.";
                                          }
                                        }  // container dynamic-hostname-tlv
    
                                        container sbfd-discriminator-tlv {
                                          description
                                            "OSPF S-BFD Discriminator TLV.";
                                          list sbfd-discriminators {
                                            description
                                              "List of S-BFD Discriminators.";
                                            leaf sbfd-discriminator {
                                              type uint32;
                                              description
                                                "Individual S-BFD Discriminator.";
                                            }
                                          }  // list sbfd-discriminators
                                        }  // container sbfd-discriminator-tlv
                                      }  // container router-information
                                    }  // container body
                                  }  // container ospfv3
                                }  // choice version
                              }  // list link-scope-lsa
                            }  // container link-scope-lsas
                          }  // list link-scope-lsa-type
                        }  // container database
                      }  // list virtual-link
                    }  // container virtual-links
    
                    container sham-links {
                      if-feature pe-ce-protocol;
                      description
                        "All sham links.";
                      list sham-link {
                        key "local-id remote-id";
                        description
                          "OSPF sham link.";
                        leaf local-id {
                          type inet:ip-address;
                          description
                            "Address of the local sham link endpoint.";
                        }
    
                        leaf remote-id {
                          type inet:ip-address;
                          description
                            "Address of the remote sham link endpoint.";
                        }
    
                        leaf hello-interval {
                          type uint16;
                          units "seconds";
                          description
                            "Interval between Hello packets (seconds).  It must
    be the same for all routers on the same network.
    Different networks, implementations, and deployments
    will use different Hello intervals.  A sample value
    for a LAN network would be 10 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf dead-interval {
                          type uint16;
                          units "seconds";
                          must
                            "../dead-interval > ../hello-interval" {
                            error-message
                              "The dead interval must be larger than the Hello interval";
                            description
                              "The value must be greater than 'hello-interval'.";
                          }
                          description
                            "Interval after which a neighbor is declared down
    (seconds) if Hello packets are not received.  It is
    typically 3 or 4 times the 'hello-interval' period.
    A typical value for LAN networks is 40 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf retransmit-interval {
                          type uint16 {
                            range "1..3600";
                          }
                          units "seconds";
                          description
                            "Interval between retransmitting unacknowledged Link
    State Advertisements (LSAs) (seconds).  This should
    be well over the round-trip transmit delay for
    any two routers on the network.  A sample value
    would be 5 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf transmit-delay {
                          type uint16;
                          units "seconds";
                          description
                            "Estimated time needed to transmit Link State Update
    (LSU) packets on the interface (seconds).  LSAs have
    their age incremented by this amount when advertised
    on the interface.  A sample value would be 1 second.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf lls {
                          if-feature lls;
                          type boolean;
                          description
                            "Enables/disables link-local signaling (LLS) support.";
                        }
    
                        container ttl-security {
                          if-feature ttl-security;
                          description
                            "Time to Live (TTL) security checking.";
                          leaf enabled {
                            type boolean;
                            description
                              "Enables/disables TTL security checking.";
                          }
    
                          leaf hops {
                            type uint8 {
                              range "1..254";
                            }
                            default "1";
                            description
                              "Maximum number of hops that an OSPF packet may
    have traversed before reception.";
                          }
                        }  // container ttl-security
    
                        leaf enabled {
                          type boolean;
                          default "true";
                          description
                            "Enables/disables the OSPF protocol on the interface.";
                        }
    
                        container authentication {
                          description
                            "Authentication configuration.";
                          choice auth-type-selection {
                            description
                              "Options for OSPFv2/OSPFv3 authentication
    configuration.";
                            case ospfv2-auth {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" {
                                description
                                  "Applied to OSPFv2 only.";
                              }
                              leaf ospfv2-auth-trailer-rfc {
                                if-feature ospfv2-authentication-trailer;
                                type ospfv2-auth-trailer-rfc-version;
                                description
                                  "Version of OSPFv2 authentication trailer support.
    See RFCs 5709 and 7474.";
                                reference
                                  "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication
                                   RFC 7474: Security Extension for OSPFv2 When Using
                                  Manual Key Management";
    
                              }
    
                              choice ospfv2-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv2-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv2-key-id {
                                    type uint32;
                                    description
                                      "Key identifier.";
                                  }
    
                                  leaf ospfv2-key {
                                    type string;
                                    description
                                      "OSPFv2 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv2-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv2-auth-specification
                            }  // case ospfv2-auth
    
                            case ospfv3-auth-ipsec {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-ipsec;
                              leaf sa {
                                type string;
                                description
                                  "Name of the Security Association (SA).";
                              }
                            }  // case ospfv3-auth-ipsec
    
                            case ospfv3-auth-trailer {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-trailer;
                              choice ospfv3-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv3-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv3-sa-id {
                                    type uint16;
                                    description
                                      "Security Association (SA) Identifier.";
                                  }
    
                                  leaf ospfv3-key {
                                    type string;
                                    description
                                      "OSPFv3 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv3-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv3-auth-specification
                            }  // case ospfv3-auth-trailer
                          }  // choice auth-type-selection
                        }  // container authentication
    
                        leaf cost {
                          type ospf-link-metric;
                          description
                            "Interface's cost.";
                        }
    
                        leaf mtu-ignore {
                          if-feature mtu-ignore;
                          type boolean;
                          description
                            "Enables/disables bypassing the MTU mismatch check in
    Database Description packets as specified in Section 10.6
    of RFC 2328.";
                          reference
                            "RFC 2328: OSPF Version 2, Section 10.6";
    
                        }
    
                        leaf prefix-suppression {
                          if-feature prefix-suppression;
                          type boolean;
                          description
                            "Suppresses advertisement of the prefixes associated
    with the interface.";
                        }
    
                        leaf state {
                          type if-state-type;
                          config false;
                          description
                            "Interface state.";
                        }
    
                        leaf hello-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before the
    next Hello packet is sent on the interface.";
                        }
    
                        leaf wait-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before
    the interface exits the 'Waiting' state.";
                        }
    
                        leaf dr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "DR Router ID.";
                        }
    
                        leaf dr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "DR IP address.";
                        }
    
                        leaf bdr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "BDR Router ID.";
                        }
    
                        leaf bdr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "BDR IP address.";
                        }
    
                        container statistics {
                          config false;
                          description
                            "Per-interface statistics.";
                          leaf discontinuity-time {
                            type yang:date-and-time;
                            description
                              "The time of the most recent occasion at which any one or
    more of this OSPF interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF interface was last reinitialized, then
    this node contains the time the OSPF interface was
    reinitialized, which normally occurs when it was
    created.";
                          }
    
                          leaf if-event-count {
                            type yang:counter32;
                            description
                              "The number of times this interface has changed its
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF interface
    is reinitialized.";
                          }
    
                          leaf link-scope-lsa-count {
                            type yang:gauge32;
                            description
                              "The number of link-scope LSAs.";
                          }
    
                          leaf link-scope-lsa-cksum-sum {
                            type uint32;
                            description
                              "The modulo 2^32 sum of the LSA checksums
    for link-scope LSAs.  The value should be treated as
    unsigned when comparing two sums of checksums.  While
    differing checksums indicate a different combination
    of LSAs, equivalent checksums don't guarantee that the
    LSAs are the same, given that multiple combinations of
    LSAs can result in the same checksum.";
                          }
    
                          container database {
                            description
                              "Container for link-scope LSA type statistics.";
                            list link-scope-lsa-type {
                              description
                                "List of link-scope LSA statistics.";
                              leaf lsa-type {
                                type uint16;
                                description
                                  "Link-scope LSA type.";
                              }
    
                              leaf lsa-count {
                                type yang:gauge32;
                                description
                                  "The number of LSAs of this LSA type.";
                              }
    
                              leaf lsa-cksum-sum {
                                type uint32;
                                description
                                  "The modulo 2^32 sum of the LSA checksums
    for LSAs of this type.  The value should be
    treated as unsigned when comparing two sums of
    checksums.  While differing checksums indicate a
    different combination of LSAs, equivalent checksums
    don't guarantee that the LSAs are the same, given that
    multiple combinations of LSAs can result in the same
    checksum.";
                              }
                            }  // list link-scope-lsa-type
                          }  // container database
                        }  // container statistics
    
                        container neighbors {
                          config false;
                          description
                            "All neighbors for the interface.";
                          list neighbor {
                            key "neighbor-router-id";
                            description
                              "List of interface OSPF neighbors.";
                            leaf neighbor-router-id {
                              type rt-types:router-id;
                              description
                                "Neighbor's Router ID.";
                            }
    
                            leaf address {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's address.";
                            }
    
                            leaf dr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's DR Router ID.";
                            }
    
                            leaf dr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's DR IP address.";
                            }
    
                            leaf bdr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's BDR Router ID.";
                            }
    
                            leaf bdr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's BDR IP address.";
                            }
    
                            leaf state {
                              type nbr-state-type;
                              config false;
                              description
                                "OSPF neighbor state.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              config false;
                              description
                                "Cost to reach the neighbor for point-to-multipoint
    and Hybrid networks.";
                            }
    
                            leaf dead-timer {
                              type rt-types:timer-value-seconds16;
                              config false;
                              description
                                "This timer tracks the remaining time before
    the neighbor is declared dead.";
                            }
    
                            container statistics {
                              config false;
                              description
                                "Per-neighbor statistics.";
                              leaf discontinuity-time {
                                type yang:date-and-time;
                                description
                                  "The time of the most recent occasion at which any one or
    more of this OSPF neighbor's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF neighbor was last reinitialized, then
    this node contains the time the OSPF neighbor was
    reinitialized, which normally occurs when the neighbor
    is dynamically discovered and created.";
                              }
    
                              leaf nbr-event-count {
                                type yang:counter32;
                                description
                                  "The number of times this neighbor has changed
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF neighbor
    is reinitialized.";
                              }
    
                              leaf nbr-retrans-qlen {
                                type yang:gauge32;
                                description
                                  "The current length of the retransmission queue.";
                              }
                            }  // container statistics
                          }  // list neighbor
                        }  // container neighbors
    
                        container database {
                          config false;
                          description
                            "Link-scope LSDB.";
                          list link-scope-lsa-type {
                            key "lsa-type";
                            description
                              "List of OSPF link-scope LSAs.";
                            leaf lsa-type {
                              type uint16;
                              description
                                "OSPF link-scope LSA type.";
                            }
    
                            container link-scope-lsas {
                              description
                                "All link-scope LSAs of this LSA type.";
                              list link-scope-lsa {
                                key "lsa-id adv-router";
                                description
                                  "List of OSPF link-scope LSAs.";
                                leaf lsa-id {
                                  type union {
                                    type yang:dotted-quad;
                                    type uint32;
                                  }
                                  description
                                    "Link State ID.";
                                }
    
                                leaf adv-router {
                                  type rt-types:router-id;
                                  description
                                    "Advertising router.";
                                }
    
                                leaf decode-completed {
                                  type boolean;
                                  description
                                    "The OSPF LSA body was successfully decoded, except for
    unknown TLVs.  Unknown LSA types and OSPFv2 unknown
    Opaque-LSA types are not decoded.  Additionally,
    malformed LSAs are generally not accepted and will
    not be in the Link State Database (LSDB).";
                                }
    
                                leaf raw-data {
                                  type yang:hex-string;
                                  description
                                    "The hexadecimal representation of the complete LSA as
    received or originated, in network byte order.";
                                }
    
                                choice version {
                                  description
                                    "OSPFv2 or OSPFv3 LSA body.";
                                  container ospfv2 {
                                    description
                                      "OSPFv2 LSA.";
                                    container header {
                                      must
                                        "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" {
                                        description
                                          "The opaque-type and the opaque-id only apply to
    Opaque-LSAs.";
                                      }
                                      description
                                        "Decoded OSPFv2 LSA header data.";
                                      container lsa-options {
                                        description
                                          "LSA Options.";
                                        leaf-list lsa-options {
                                          type identityref {
                                            base ospfv2-lsa-option;
                                          }
                                          description
                                            "List of LSA Options.  This list will contain the
    identities for the OSPFv2 LSA Options that are set.";
                                        }
                                      }  // container lsa-options
    
                                      leaf lsa-id {
                                        type yang:dotted-quad;
                                        mandatory
                                          true;
                                        description
                                          "Link State ID.";
                                      }
    
                                      leaf opaque-type {
                                        type uint8;
                                        description
                                          "Opaque-LSA type.";
                                      }
    
                                      leaf opaque-id {
                                        type opaque-id;
                                        description
                                          "Opaque-LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPFv2 LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        leaf num-of-links {
                                          type uint16;
                                          description
                                            "Number of links in the Router-LSA.";
                                        }
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container topologies {
                                              description
                                                "All topologies for the link.";
                                              list topology {
                                                description
                                                  "Topology-specific information.";
                                                leaf mt-id {
                                                  type uint8;
                                                  description
                                                    "The MT-ID for the topology enabled on the link.";
                                                }
    
                                                leaf metric {
                                                  type uint16;
                                                  description
                                                    "Metric for the topology.";
                                                }
                                              }  // list topology
                                            }  // container topologies
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        leaf network-mask {
                                          type yang:dotted-quad;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type inet:ipv4-address;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container summary {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" {
                                          description
                                            "Only applies to summary LSAs.";
                                        }
                                        description
                                          "Summary LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the summary LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the summary.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container summary
    
                                      container external {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-external-lsa-type')" {
                                          description
                                            "Only applies to AS-External-LSAs and NSSA-LSAs.";
                                        }
                                        description
                                          "External-LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the External-LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the
    external or NSSA prefix.";
                                            }
    
                                            leaf flags {
                                              type bits {
                                                bit
                                                  E {
                                                  position
                                                    0;
                                                  description
                                                    "When set, the metric specified is a Type 2
    external metric.";
                                                }
                                              }
                                              description
                                                "Topology flags.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
    
                                            leaf forwarding-address {
                                              type inet:ipv4-address;
                                              description
                                                "IPv4 Forwarding address.";
                                            }
    
                                            leaf external-route-tag {
                                              type uint32;
                                              description
                                                "Route tag for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container external
    
                                      container opaque {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" {
                                          description
                                            "Only applies to Opaque-LSAs.";
                                        }
                                        description
                                          "Opaque-LSA.";
                                        container ri-opaque {
                                          description
                                            "OSPF Router-Information-Opaque-LSA.";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                          container router-capabilities-tlv {
                                            description
                                              "Informational and functional router capabilities.";
                                            container router-informational-capabilities {
                                              description
                                                "OSPF Router Informational Flag definitions.";
                                              leaf-list informational-capabilities {
                                                type identityref {
                                                  base informational-capability;
                                                }
                                                description
                                                  "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                              }
                                            }  // container router-informational-capabilities
    
                                            list informational-capabilities-flags {
                                              description
                                                "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                              leaf informational-flag {
                                                type uint32;
                                                description
                                                  "Individual informational capability flag.";
                                              }
                                            }  // list informational-capabilities-flags
    
                                            list functional-capabilities {
                                              description
                                                "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                              leaf functional-flag {
                                                type uint32;
                                                description
                                                  "Individual functional capability flag.";
                                              }
                                            }  // list functional-capabilities
                                          }  // container router-capabilities-tlv
    
                                          container node-tag-tlvs {
                                            description
                                              "All Node Admin Tag TLVs.";
                                            list node-tag-tlv {
                                              description
                                                "Node Admin Tag TLV.";
                                              list node-tag {
                                                description
                                                  "List of tags.";
                                                leaf tag {
                                                  type uint32;
                                                  description
                                                    "Value of the node administrative tag.";
                                                }
                                              }  // list node-tag
                                            }  // list node-tag-tlv
                                          }  // container node-tag-tlvs
    
                                          container dynamic-hostname-tlv {
                                            description
                                              "OSPF Dynamic Hostname TLV.";
                                            leaf hostname {
                                              type string {
                                                length
                                                  "1..255";
                                              }
                                              description
                                                "Dynamic hostname.";
                                            }
                                          }  // container dynamic-hostname-tlv
    
                                          container sbfd-discriminator-tlv {
                                            description
                                              "OSPF S-BFD Discriminator TLV.";
                                            list sbfd-discriminators {
                                              description
                                                "List of S-BFD Discriminators.";
                                              leaf sbfd-discriminator {
                                                type uint32;
                                                description
                                                  "Individual S-BFD Discriminator.";
                                              }
                                            }  // list sbfd-discriminators
                                          }  // container sbfd-discriminator-tlv
    
                                          container maximum-sid-depth-tlv {
                                            description
                                              "OSPF Node MSD TLV.";
                                            list msd-type {
                                              description
                                                "List of MSD tuples.";
                                              leaf msd-type {
                                                type uint8;
                                                description
                                                  "Maximum SID Depth (MSD) type.";
                                              }
    
                                              leaf msd-value {
                                                type uint8;
                                                description
                                                  "MSD value for the type.";
                                              }
                                            }  // list msd-type
                                          }  // container maximum-sid-depth-tlv
    
                                          container unknown-tlvs {
                                            description
                                              "All unknown TLVs.";
                                            list unknown-tlv {
                                              description
                                                "Unknown TLV.";
                                              leaf type {
                                                type uint16;
                                                description
                                                  "TLV type.";
                                              }
    
                                              leaf length {
                                                type uint16;
                                                description
                                                  "TLV length (octets).";
                                              }
    
                                              leaf value {
                                                type yang:hex-string;
                                                description
                                                  "TLV value.";
                                              }
                                            }  // list unknown-tlv
                                          }  // container unknown-tlvs
                                        }  // container ri-opaque
    
                                        container te-opaque {
                                          description
                                            "OSPFv2 TE Opaque-LSA.";
                                          reference
                                            "RFC 3630: Traffic Engineering (TE) Extensions to
                                            OSPF Version 2";
    
                                          container router-address-tlv {
                                            description
                                              "Router address TLV.";
                                            leaf router-address {
                                              type inet:ipv4-address;
                                              description
                                                "Router address.";
                                            }
                                          }  // container router-address-tlv
    
                                          container link-tlv {
                                            description
                                              "Describes a single link.  It is constructed
    from a set of sub-TLVs.";
                                            leaf link-type {
                                              type router-link-type;
                                              mandatory
                                                true;
                                              description
                                                "Link type.";
                                            }
    
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              mandatory
                                                true;
                                              description
                                                "Link ID.";
                                            }
    
                                            container local-if-ipv4-addrs {
                                              description
                                                "All local interface IPv4 addresses.";
                                              leaf-list local-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of local interface IPv4 addresses.";
                                              }
                                            }  // container local-if-ipv4-addrs
    
                                            container remote-if-ipv4-addrs {
                                              description
                                                "All remote interface IPv4 addresses.";
                                              leaf-list remote-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of remote interface IPv4 addresses.";
                                              }
                                            }  // container remote-if-ipv4-addrs
    
                                            leaf te-metric {
                                              type uint32;
                                              description
                                                "TE metric.";
                                            }
    
                                            leaf max-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum bandwidth.";
                                            }
    
                                            leaf max-reservable-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum reservable bandwidth.";
                                            }
    
                                            container unreserved-bandwidths {
                                              description
                                                "All unreserved bandwidths.";
                                              list unreserved-bandwidth {
                                                description
                                                  "List of unreserved bandwidths for different
    priorities.";
                                                leaf priority {
                                                  type uint8 {
                                                    range
                                                      "0 .. 7";
                                                  }
                                                  description
                                                    "Priority from 0 to 7.";
                                                }
    
                                                leaf unreserved-bandwidth {
                                                  type rt-types:bandwidth-ieee-float32;
                                                  description
                                                    "Unreserved bandwidth.";
                                                }
                                              }  // list unreserved-bandwidth
                                            }  // container unreserved-bandwidths
    
                                            leaf admin-group {
                                              type uint32;
                                              description
                                                "Administrative Group / Resource Class/Color.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container link-tlv
                                        }  // container te-opaque
    
                                        container extended-prefix-opaque {
                                          description
                                            "All Extended Prefix TLVs in the LSA.";
                                          list extended-prefix-tlv {
                                            description
                                              "Extended Prefix TLV.";
                                            leaf route-type {
                                              type enumeration {
                                                enum
                                                  "unspecified" {
                                                  value
                                                    0;
                                                  description
                                                    "Unspecified.";
                                                }
                                                enum
                                                  "intra-area" {
                                                  value
                                                    1;
                                                  description
                                                    "OSPF intra-area route.";
                                                }
                                                enum
                                                  "inter-area" {
                                                  value
                                                    3;
                                                  description
                                                    "OSPF inter-area route.";
                                                }
                                                enum
                                                  "external" {
                                                  value
                                                    5;
                                                  description
                                                    "OSPF external route.";
                                                }
                                                enum
                                                  "nssa" {
                                                  value
                                                    7;
                                                  description
                                                    "OSPF NSSA external route.";
                                                }
                                              }
                                              description
                                                "Route type.";
                                            }
    
                                            container flags {
                                              description
                                                "Prefix flags.";
                                              leaf-list extended-prefix-flags {
                                                type identityref {
                                                  base ospfv2-extended-prefix-flag;
                                                }
                                                description
                                                  "List of Extended Prefix TLV flags.  This list will
    contain identities for the prefix flags; these
    identities are set in the extended prefix flags.";
                                              }
                                            }  // container flags
    
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "Address prefix.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // list extended-prefix-tlv
                                        }  // container extended-prefix-opaque
    
                                        container extended-link-opaque {
                                          description
                                            "All Extended Link TLVs in the LSA.";
                                          reference
                                            "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                                          container extended-link-tlv {
                                            description
                                              "Extended Link TLV.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container maximum-sid-depth-tlv {
                                              description
                                                "OSPF Node MSD TLV.";
                                              list msd-type {
                                                description
                                                  "List of MSD tuples.";
                                                leaf msd-type {
                                                  type uint8;
                                                  description
                                                    "Maximum SID Depth (MSD) type.";
                                                }
    
                                                leaf msd-value {
                                                  type uint8;
                                                  description
                                                    "MSD value for the type.";
                                                }
                                              }  // list msd-type
                                            }  // container maximum-sid-depth-tlv
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container extended-link-tlv
                                        }  // container extended-link-opaque
                                      }  // container opaque
                                    }  // container body
                                  }  // container ospfv2
                                  container ospfv3 {
                                    description
                                      "OSPFv3 LSA.";
                                    container header {
                                      description
                                        "Decoded OSPFv3 LSA header data.";
                                      leaf lsa-id {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "OSPFv3 LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPF LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf interface-id {
                                              type uint32;
                                              description
                                                "Interface ID for the link.";
                                            }
    
                                            leaf neighbor-interface-id {
                                              type uint32;
                                              description
                                                "Neighbor's Interface ID for the link.";
                                            }
    
                                            leaf neighbor-router-id {
                                              type rt-types:router-id;
                                              description
                                                "Neighbor's Router ID for the link.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Reserved for OSPFv3 Links
    	   4 - Virtual Link.";
                                            }
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Link metric.";
                                            }
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type rt-types:router-id;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container inter-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Prefix-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Inter-Area Prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
                                      }  // container inter-area-prefix
    
                                      container inter-area-router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Router-LSAs.";
                                        }
                                        description
                                          "Inter-Area-Router-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Autonomous System Boundary Router (ASBR) metric.";
                                        }
    
                                        leaf destination-router-id {
                                          type rt-types:router-id;
                                          description
                                            "The Router ID of the ASBR described by the LSA.";
                                        }
                                      }  // container inter-area-router
    
                                      container as-external {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" {
                                          description
                                            "Only applies to AS-External-LSAs.";
                                        }
                                        description
                                          "AS-External-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container as-external
    
                                      container nssa {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" {
                                          description
                                            "Only applies to NSSA-LSAs.";
                                        }
                                        description
                                          "NSSA-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container nssa
    
                                      container link {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" {
                                          description
                                            "Only applies to Link-LSAs.";
                                        }
                                        description
                                          "Link-LSA.";
                                        leaf rtr-priority {
                                          type uint8;
                                          description
                                            "Router priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible
    to become the DR or BDR.";
                                        }
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf link-local-interface-address {
                                          type inet:ipv6-address;
                                          description
                                            "The originating router's link-local
    interface address for the link.";
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint32;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes for the link.";
                                          list prefix {
                                            description
                                              "List of prefixes associated with the link.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container link
    
                                      container intra-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" {
                                          description
                                            "Only applies to Intra-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Intra-Area-Prefix-LSA.";
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced LS Type.";
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                        }
    
                                        leaf referenced-adv-router {
                                          type rt-types:router-id;
                                          description
                                            "Referenced Advertising Router.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint16;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes in this LSA.";
                                          list prefix {
                                            description
                                              "List of prefixes in this LSA.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Prefix metric.";
                                            }
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container intra-area-prefix
    
                                      container router-information {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" {
                                          description
                                            "Only applies to Router-Information-LSAs (RFC 7770).";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                        }
                                        description
                                          "Router-Information-LSA.";
                                        reference
                                          "RFC 7770: Extensions to OSPF for Advertising Optional
                                          Router Capabilities";
    
                                        container router-capabilities-tlv {
                                          description
                                            "Informational and functional router capabilities.";
                                          container router-informational-capabilities {
                                            description
                                              "OSPF Router Informational Flag definitions.";
                                            leaf-list informational-capabilities {
                                              type identityref {
                                                base informational-capability;
                                              }
                                              description
                                                "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                            }
                                          }  // container router-informational-capabilities
    
                                          list informational-capabilities-flags {
                                            description
                                              "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                            leaf informational-flag {
                                              type uint32;
                                              description
                                                "Individual informational capability flag.";
                                            }
                                          }  // list informational-capabilities-flags
    
                                          list functional-capabilities {
                                            description
                                              "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                            leaf functional-flag {
                                              type uint32;
                                              description
                                                "Individual functional capability flag.";
                                            }
                                          }  // list functional-capabilities
                                        }  // container router-capabilities-tlv
    
                                        container node-tag-tlvs {
                                          description
                                            "All Node Admin Tag TLVs.";
                                          list node-tag-tlv {
                                            description
                                              "Node Admin Tag TLV.";
                                            list node-tag {
                                              description
                                                "List of tags.";
                                              leaf tag {
                                                type uint32;
                                                description
                                                  "Value of the node administrative tag.";
                                              }
                                            }  // list node-tag
                                          }  // list node-tag-tlv
                                        }  // container node-tag-tlvs
    
                                        container dynamic-hostname-tlv {
                                          description
                                            "OSPF Dynamic Hostname TLV.";
                                          leaf hostname {
                                            type string {
                                              length
                                                "1..255";
                                            }
                                            description
                                              "Dynamic hostname.";
                                          }
                                        }  // container dynamic-hostname-tlv
    
                                        container sbfd-discriminator-tlv {
                                          description
                                            "OSPF S-BFD Discriminator TLV.";
                                          list sbfd-discriminators {
                                            description
                                              "List of S-BFD Discriminators.";
                                            leaf sbfd-discriminator {
                                              type uint32;
                                              description
                                                "Individual S-BFD Discriminator.";
                                            }
                                          }  // list sbfd-discriminators
                                        }  // container sbfd-discriminator-tlv
                                      }  // container router-information
                                    }  // container body
                                  }  // container ospfv3
                                }  // choice version
                              }  // list link-scope-lsa
                            }  // container link-scope-lsas
                          }  // list link-scope-lsa-type
                        }  // container database
                      }  // list sham-link
                    }  // container sham-links
    
                    container interfaces {
                      description
                        "All OSPF interfaces.";
                      list interface {
                        key "name";
                        description
                          "List of OSPF interfaces.";
                        leaf name {
                          type if:interface-ref;
                          description
                            "Interface name reference.";
                        }
    
                        leaf interface-type {
                          type enumeration {
                            enum "broadcast" {
                              value 0;
                              description
                                "Specifies an OSPF broadcast multi-access network.";
                            }
                            enum "non-broadcast" {
                              value 1;
                              description
                                "Specifies an OSPF Non-Broadcast Multi-Access
    (NBMA) network.";
                            }
                            enum
                              "point-to-multipoint" {
                              value 2;
                              description
                                "Specifies an OSPF point-to-multipoint network.";
                            }
                            enum
                              "point-to-point" {
                              value 3;
                              description
                                "Specifies an OSPF point-to-point network.";
                            }
                            enum "hybrid" {
                              value 4;
                              description
                                "Specifies an OSPF hybrid broadcast /
    point-to-multipoint network.";
                            }
                          }
                          description
                            "Interface type.";
                        }
    
                        leaf passive {
                          type boolean;
                          description
                            "Enables/disables a passive interface.  A passive
    interface's prefix will be advertised, but no neighbor
    adjacencies will be formed on the interface.";
                        }
    
                        leaf demand-circuit {
                          if-feature demand-circuit;
                          type boolean;
                          description
                            "Enables/disables a demand circuit.";
                        }
    
                        leaf priority {
                          type uint8;
                          description
                            "Configures OSPF router priority.  In a multi-access
    network, this value is for Designated Router (DR) election.
    The priority is ignored on other interface types.  A router
    with a higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible to
    become the DR or Backup DR (BDR).";
                        }
    
                        container multi-areas {
                          if-feature multi-area-adj;
                          description
                            "Container for multi-area configuration.";
                          list multi-area {
                            key "multi-area-id";
                            description
                              "Configures an OSPF multi-area adjacency.";
                            leaf multi-area-id {
                              type area-id-type;
                              description
                                "Multi-area adjacency area ID.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              description
                                "Interface cost for a multi-area adjacency.";
                            }
                          }  // list multi-area
                        }  // container multi-areas
    
                        container static-neighbors {
                          description
                            "Statically configured neighbors.";
                          list neighbor {
                            key "identifier";
                            description
                              "Specifies a static OSPF neighbor.";
                            leaf identifier {
                              type inet:ip-address;
                              description
                                "Neighbor's Router ID, IPv4 address, or IPv6 address.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              description
                                "Interface cost.  Different implementations have
    different default costs, with some defaulting to a
    cost inversely proportional to the interface speed.
    Others will default to 1, equating the cost to a
    hop count.";
                            }
    
                            leaf poll-interval {
                              type uint16;
                              units "seconds";
                              description
                                "Neighbor's poll interval (seconds) for sending OSPF
    Hello packets to discover the neighbor on NBMA
    networks.  This interval dictates the granularity for
    discovery of new neighbors.  A sample would be
    120 seconds (2 minutes) for a legacy Packet Data
    Network (PDN) X.25 network.";
                              reference
                                "RFC 2328: OSPF Version 2, Appendix C.5";
    
                            }
    
                            leaf priority {
                              type uint8;
                              description
                                "Neighbor's priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not
    eligible to become the DR or BDR.";
                            }
                          }  // list neighbor
                        }  // container static-neighbors
    
                        leaf node-flag {
                          if-feature node-flag;
                          type boolean;
                          default "false";
                          description
                            "Sets the prefix as identifying the advertising router.";
                          reference
                            "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                        }
    
                        container bfd {
                          if-feature bfd;
                          description
                            "BFD interface configuration.";
                          reference
                            "RFC 5880: Bidirectional Forwarding Detection (BFD)
                             RFC 5881: Bidirectional Forwarding Detection
                            (BFD) for IPv4 and IPv6 (Single Hop)
                             RFC 9314: YANG Data Model for Bidirectional Forwarding
                            Detection (BFD)";
    
                          leaf enabled {
                            type boolean;
                            default "false";
                            description
                              "Indicates whether BFD is enabled.";
                          }
    
                          leaf local-multiplier {
                            type multiplier;
                            default "3";
                            description
                              "Multiplier transmitted by the local system.";
                          }
    
                          choice interval-config-type {
                            default
                              "tx-rx-intervals";
                            description
                              "Two interval values or one value used for both transmit and
    receive.";
                            case tx-rx-intervals {
                              leaf desired-min-tx-interval {
                                type uint32;
                                units
                                  "microseconds";
                                default
                                  "1000000";
                                description
                                  "Desired minimum transmit interval of control packets.";
                              }
    
                              leaf required-min-rx-interval {
                                type uint32;
                                units
                                  "microseconds";
                                default
                                  "1000000";
                                description
                                  "Required minimum receive interval of control packets.";
                              }
                            }  // case tx-rx-intervals
    
                            case single-interval {
                              if-feature single-minimum-interval;
                              leaf min-interval {
                                type uint32;
                                units
                                  "microseconds";
                                default
                                  "1000000";
                                description
                                  "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                              }
                            }  // case single-interval
                          }  // choice interval-config-type
                        }  // container bfd
    
                        container fast-reroute {
                          if-feature fast-reroute;
                          description
                            "Interface IP-FRR configuration.";
                          container lfa {
                            if-feature lfa;
                            description
                              "LFA configuration.";
                            leaf candidate-enabled {
                              type boolean;
                              default "true";
                              description
                                "Enables the interface to be used as a backup.";
                            }
    
                            leaf enabled {
                              type boolean;
                              default "false";
                              description
                                "Activates an LFA.  Per-prefix LFA computation
    is assumed.";
                            }
    
                            container remote-lfa {
                              if-feature remote-lfa;
                              description
                                "R-LFA configuration.";
                              leaf enabled {
                                type boolean;
                                default "false";
                                description
                                  "Activates a Remote LFA (R-LFA).";
                              }
                            }  // container remote-lfa
                          }  // container lfa
                        }  // container fast-reroute
    
                        leaf hello-interval {
                          type uint16;
                          units "seconds";
                          description
                            "Interval between Hello packets (seconds).  It must
    be the same for all routers on the same network.
    Different networks, implementations, and deployments
    will use different Hello intervals.  A sample value
    for a LAN network would be 10 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf dead-interval {
                          type uint16;
                          units "seconds";
                          must
                            "../dead-interval > ../hello-interval" {
                            error-message
                              "The dead interval must be larger than the Hello interval";
                            description
                              "The value must be greater than 'hello-interval'.";
                          }
                          description
                            "Interval after which a neighbor is declared down
    (seconds) if Hello packets are not received.  It is
    typically 3 or 4 times the 'hello-interval' period.
    A typical value for LAN networks is 40 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf retransmit-interval {
                          type uint16 {
                            range "1..3600";
                          }
                          units "seconds";
                          description
                            "Interval between retransmitting unacknowledged Link
    State Advertisements (LSAs) (seconds).  This should
    be well over the round-trip transmit delay for
    any two routers on the network.  A sample value
    would be 5 seconds.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf transmit-delay {
                          type uint16;
                          units "seconds";
                          description
                            "Estimated time needed to transmit Link State Update
    (LSU) packets on the interface (seconds).  LSAs have
    their age incremented by this amount when advertised
    on the interface.  A sample value would be 1 second.";
                          reference
                            "RFC 2328: OSPF Version 2, Appendix C.3";
    
                        }
    
                        leaf lls {
                          if-feature lls;
                          type boolean;
                          description
                            "Enables/disables link-local signaling (LLS) support.";
                        }
    
                        container ttl-security {
                          if-feature ttl-security;
                          description
                            "Time to Live (TTL) security checking.";
                          leaf enabled {
                            type boolean;
                            description
                              "Enables/disables TTL security checking.";
                          }
    
                          leaf hops {
                            type uint8 {
                              range "1..254";
                            }
                            default "1";
                            description
                              "Maximum number of hops that an OSPF packet may
    have traversed before reception.";
                          }
                        }  // container ttl-security
    
                        leaf enabled {
                          type boolean;
                          default "true";
                          description
                            "Enables/disables the OSPF protocol on the interface.";
                        }
    
                        container authentication {
                          description
                            "Authentication configuration.";
                          choice auth-type-selection {
                            description
                              "Options for OSPFv2/OSPFv3 authentication
    configuration.";
                            case ospfv2-auth {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv2')" {
                                description
                                  "Applied to OSPFv2 only.";
                              }
                              leaf ospfv2-auth-trailer-rfc {
                                if-feature ospfv2-authentication-trailer;
                                type ospfv2-auth-trailer-rfc-version;
                                description
                                  "Version of OSPFv2 authentication trailer support.
    See RFCs 5709 and 7474.";
                                reference
                                  "RFC 5709: OSPFv2 HMAC-SHA Cryptographic Authentication
                                   RFC 7474: Security Extension for OSPFv2 When Using
                                  Manual Key Management";
    
                              }
    
                              choice ospfv2-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv2-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv2-key-id {
                                    type uint32;
                                    description
                                      "Key identifier.";
                                  }
    
                                  leaf ospfv2-key {
                                    type string;
                                    description
                                      "OSPFv2 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv2-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv2-auth-specification
                            }  // case ospfv2-auth
    
                            case ospfv3-auth-ipsec {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-ipsec;
                              leaf sa {
                                type string;
                                description
                                  "Name of the Security Association (SA).";
                              }
                            }  // case ospfv3-auth-ipsec
    
                            case ospfv3-auth-trailer {
                              when
                                "derived-from-or-self(../../../../../../rt:type, 'ospfv3')" {
                                description
                                  "Applied to OSPFv3 only.";
                              }
                              if-feature ospfv3-authentication-trailer;
                              choice ospfv3-auth-specification {
                                description
                                  "Key chain or explicit key parameter specification.";
                                case auth-key-chain {
                                  if-feature key-chain;
                                  leaf ospfv3-key-chain {
                                    type key-chain:key-chain-ref;
                                    description
                                      "Name of the key chain.";
                                  }
                                }  // case auth-key-chain
    
                                case auth-key-explicit {
                                  leaf ospfv3-sa-id {
                                    type uint16;
                                    description
                                      "Security Association (SA) Identifier.";
                                  }
    
                                  leaf ospfv3-key {
                                    type string;
                                    description
                                      "OSPFv3 authentication key.  The
    length of the key may be dependent on the
    cryptographic algorithm.";
                                  }
    
                                  leaf ospfv3-crypto-algorithm {
                                    type identityref {
                                      base key-chain:crypto-algorithm;
                                    }
                                    description
                                      "Cryptographic algorithm associated with the key.";
                                  }
                                }  // case auth-key-explicit
                              }  // choice ospfv3-auth-specification
                            }  // case ospfv3-auth-trailer
                          }  // choice auth-type-selection
                        }  // container authentication
    
                        leaf cost {
                          type ospf-link-metric;
                          description
                            "Interface's cost.";
                        }
    
                        leaf mtu-ignore {
                          if-feature mtu-ignore;
                          type boolean;
                          description
                            "Enables/disables bypassing the MTU mismatch check in
    Database Description packets as specified in Section 10.6
    of RFC 2328.";
                          reference
                            "RFC 2328: OSPF Version 2, Section 10.6";
    
                        }
    
                        leaf prefix-suppression {
                          if-feature prefix-suppression;
                          type boolean;
                          description
                            "Suppresses advertisement of the prefixes associated
    with the interface.";
                        }
    
                        leaf state {
                          type if-state-type;
                          config false;
                          description
                            "Interface state.";
                        }
    
                        leaf hello-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before the
    next Hello packet is sent on the interface.";
                        }
    
                        leaf wait-timer {
                          type rt-types:timer-value-seconds16;
                          config false;
                          description
                            "This timer tracks the remaining time before
    the interface exits the 'Waiting' state.";
                        }
    
                        leaf dr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "DR Router ID.";
                        }
    
                        leaf dr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "DR IP address.";
                        }
    
                        leaf bdr-router-id {
                          type rt-types:router-id;
                          config false;
                          description
                            "BDR Router ID.";
                        }
    
                        leaf bdr-ip-addr {
                          type inet:ip-address;
                          config false;
                          description
                            "BDR IP address.";
                        }
    
                        container statistics {
                          config false;
                          description
                            "Per-interface statistics.";
                          leaf discontinuity-time {
                            type yang:date-and-time;
                            description
                              "The time of the most recent occasion at which any one or
    more of this OSPF interface's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF interface was last reinitialized, then
    this node contains the time the OSPF interface was
    reinitialized, which normally occurs when it was
    created.";
                          }
    
                          leaf if-event-count {
                            type yang:counter32;
                            description
                              "The number of times this interface has changed its
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF interface
    is reinitialized.";
                          }
    
                          leaf link-scope-lsa-count {
                            type yang:gauge32;
                            description
                              "The number of link-scope LSAs.";
                          }
    
                          leaf link-scope-lsa-cksum-sum {
                            type uint32;
                            description
                              "The modulo 2^32 sum of the LSA checksums
    for link-scope LSAs.  The value should be treated as
    unsigned when comparing two sums of checksums.  While
    differing checksums indicate a different combination
    of LSAs, equivalent checksums don't guarantee that the
    LSAs are the same, given that multiple combinations of
    LSAs can result in the same checksum.";
                          }
    
                          container database {
                            description
                              "Container for link-scope LSA type statistics.";
                            list link-scope-lsa-type {
                              description
                                "List of link-scope LSA statistics.";
                              leaf lsa-type {
                                type uint16;
                                description
                                  "Link-scope LSA type.";
                              }
    
                              leaf lsa-count {
                                type yang:gauge32;
                                description
                                  "The number of LSAs of this LSA type.";
                              }
    
                              leaf lsa-cksum-sum {
                                type uint32;
                                description
                                  "The modulo 2^32 sum of the LSA checksums
    for LSAs of this type.  The value should be
    treated as unsigned when comparing two sums of
    checksums.  While differing checksums indicate a
    different combination of LSAs, equivalent checksums
    don't guarantee that the LSAs are the same, given that
    multiple combinations of LSAs can result in the same
    checksum.";
                              }
                            }  // list link-scope-lsa-type
                          }  // container database
                        }  // container statistics
    
                        container neighbors {
                          config false;
                          description
                            "All neighbors for the interface.";
                          list neighbor {
                            key "neighbor-router-id";
                            description
                              "List of interface OSPF neighbors.";
                            leaf neighbor-router-id {
                              type rt-types:router-id;
                              description
                                "Neighbor's Router ID.";
                            }
    
                            leaf address {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's address.";
                            }
    
                            leaf dr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's DR Router ID.";
                            }
    
                            leaf dr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's DR IP address.";
                            }
    
                            leaf bdr-router-id {
                              type rt-types:router-id;
                              config false;
                              description
                                "Neighbor's BDR Router ID.";
                            }
    
                            leaf bdr-ip-addr {
                              type inet:ip-address;
                              config false;
                              description
                                "Neighbor's BDR IP address.";
                            }
    
                            leaf state {
                              type nbr-state-type;
                              config false;
                              description
                                "OSPF neighbor state.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              config false;
                              description
                                "Cost to reach the neighbor for point-to-multipoint
    and Hybrid networks.";
                            }
    
                            leaf dead-timer {
                              type rt-types:timer-value-seconds16;
                              config false;
                              description
                                "This timer tracks the remaining time before
    the neighbor is declared dead.";
                            }
    
                            container statistics {
                              config false;
                              description
                                "Per-neighbor statistics.";
                              leaf discontinuity-time {
                                type yang:date-and-time;
                                description
                                  "The time of the most recent occasion at which any one or
    more of this OSPF neighbor's counters suffered a
    discontinuity.  If no such discontinuities have occurred
    since the OSPF neighbor was last reinitialized, then
    this node contains the time the OSPF neighbor was
    reinitialized, which normally occurs when the neighbor
    is dynamically discovered and created.";
                              }
    
                              leaf nbr-event-count {
                                type yang:counter32;
                                description
                                  "The number of times this neighbor has changed
    state or an error has occurred.  Discontinuities in the
    value of this counter can occur when the OSPF neighbor
    is reinitialized.";
                              }
    
                              leaf nbr-retrans-qlen {
                                type yang:gauge32;
                                description
                                  "The current length of the retransmission queue.";
                              }
                            }  // container statistics
                          }  // list neighbor
                        }  // container neighbors
    
                        container database {
                          config false;
                          description
                            "Link-scope LSDB.";
                          list link-scope-lsa-type {
                            key "lsa-type";
                            description
                              "List of OSPF link-scope LSAs.";
                            leaf lsa-type {
                              type uint16;
                              description
                                "OSPF link-scope LSA type.";
                            }
    
                            container link-scope-lsas {
                              description
                                "All link-scope LSAs of this LSA type.";
                              list link-scope-lsa {
                                key "lsa-id adv-router";
                                description
                                  "List of OSPF link-scope LSAs.";
                                leaf lsa-id {
                                  type union {
                                    type yang:dotted-quad;
                                    type uint32;
                                  }
                                  description
                                    "Link State ID.";
                                }
    
                                leaf adv-router {
                                  type rt-types:router-id;
                                  description
                                    "Advertising router.";
                                }
    
                                leaf decode-completed {
                                  type boolean;
                                  description
                                    "The OSPF LSA body was successfully decoded, except for
    unknown TLVs.  Unknown LSA types and OSPFv2 unknown
    Opaque-LSA types are not decoded.  Additionally,
    malformed LSAs are generally not accepted and will
    not be in the Link State Database (LSDB).";
                                }
    
                                leaf raw-data {
                                  type yang:hex-string;
                                  description
                                    "The hexadecimal representation of the complete LSA as
    received or originated, in network byte order.";
                                }
    
                                choice version {
                                  description
                                    "OSPFv2 or OSPFv3 LSA body.";
                                  container ospfv2 {
                                    description
                                      "OSPFv2 LSA.";
                                    container header {
                                      must
                                        "(derived-from(type, 'ospfv2-opaque-lsa-type') and opaque-id and opaque-type) or (not(derived-from(type, 'ospfv2-opaque-lsa-type')) and not(opaque-id) and not(opaque-type))" {
                                        description
                                          "The opaque-type and the opaque-id only apply to
    Opaque-LSAs.";
                                      }
                                      description
                                        "Decoded OSPFv2 LSA header data.";
                                      container lsa-options {
                                        description
                                          "LSA Options.";
                                        leaf-list lsa-options {
                                          type identityref {
                                            base ospfv2-lsa-option;
                                          }
                                          description
                                            "List of LSA Options.  This list will contain the
    identities for the OSPFv2 LSA Options that are set.";
                                        }
                                      }  // container lsa-options
    
                                      leaf lsa-id {
                                        type yang:dotted-quad;
                                        mandatory
                                          true;
                                        description
                                          "Link State ID.";
                                      }
    
                                      leaf opaque-type {
                                        type uint8;
                                        description
                                          "Opaque-LSA type.";
                                      }
    
                                      leaf opaque-id {
                                        type opaque-id;
                                        description
                                          "Opaque-LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPFv2 LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        leaf num-of-links {
                                          type uint16;
                                          description
                                            "Number of links in the Router-LSA.";
                                        }
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container topologies {
                                              description
                                                "All topologies for the link.";
                                              list topology {
                                                description
                                                  "Topology-specific information.";
                                                leaf mt-id {
                                                  type uint8;
                                                  description
                                                    "The MT-ID for the topology enabled on the link.";
                                                }
    
                                                leaf metric {
                                                  type uint16;
                                                  description
                                                    "Metric for the topology.";
                                                }
                                              }  // list topology
                                            }  // container topologies
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv2-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        leaf network-mask {
                                          type yang:dotted-quad;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type inet:ipv4-address;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container summary {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-summary-lsa-type')" {
                                          description
                                            "Only applies to summary LSAs.";
                                        }
                                        description
                                          "Summary LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the summary LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the summary.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container summary
    
                                      container external {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-external-lsa-type')" {
                                          description
                                            "Only applies to AS-External-LSAs and NSSA-LSAs.";
                                        }
                                        description
                                          "External-LSA.";
                                        leaf network-mask {
                                          type inet:ipv4-address;
                                          description
                                            "The IP address mask for the network.";
                                        }
    
                                        container topologies {
                                          description
                                            "All topologies for the External-LSA.";
                                          list topology {
                                            description
                                              "Topology-specific information.";
                                            leaf mt-id {
                                              type uint8;
                                              description
                                                "The MT-ID for the topology enabled for the
    external or NSSA prefix.";
                                            }
    
                                            leaf flags {
                                              type bits {
                                                bit
                                                  E {
                                                  position
                                                    0;
                                                  description
                                                    "When set, the metric specified is a Type 2
    external metric.";
                                                }
                                              }
                                              description
                                                "Topology flags.";
                                            }
    
                                            leaf metric {
                                              type ospf-metric;
                                              description
                                                "Metric for the topology.";
                                            }
    
                                            leaf forwarding-address {
                                              type inet:ipv4-address;
                                              description
                                                "IPv4 Forwarding address.";
                                            }
    
                                            leaf external-route-tag {
                                              type uint32;
                                              description
                                                "Route tag for the topology.";
                                            }
                                          }  // list topology
                                        }  // container topologies
                                      }  // container external
    
                                      container opaque {
                                        when
                                          "derived-from(../../header/type, 'ospfv2-opaque-lsa-type')" {
                                          description
                                            "Only applies to Opaque-LSAs.";
                                        }
                                        description
                                          "Opaque-LSA.";
                                        container ri-opaque {
                                          description
                                            "OSPF Router-Information-Opaque-LSA.";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                          container router-capabilities-tlv {
                                            description
                                              "Informational and functional router capabilities.";
                                            container router-informational-capabilities {
                                              description
                                                "OSPF Router Informational Flag definitions.";
                                              leaf-list informational-capabilities {
                                                type identityref {
                                                  base informational-capability;
                                                }
                                                description
                                                  "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                              }
                                            }  // container router-informational-capabilities
    
                                            list informational-capabilities-flags {
                                              description
                                                "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                              leaf informational-flag {
                                                type uint32;
                                                description
                                                  "Individual informational capability flag.";
                                              }
                                            }  // list informational-capabilities-flags
    
                                            list functional-capabilities {
                                              description
                                                "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                              leaf functional-flag {
                                                type uint32;
                                                description
                                                  "Individual functional capability flag.";
                                              }
                                            }  // list functional-capabilities
                                          }  // container router-capabilities-tlv
    
                                          container node-tag-tlvs {
                                            description
                                              "All Node Admin Tag TLVs.";
                                            list node-tag-tlv {
                                              description
                                                "Node Admin Tag TLV.";
                                              list node-tag {
                                                description
                                                  "List of tags.";
                                                leaf tag {
                                                  type uint32;
                                                  description
                                                    "Value of the node administrative tag.";
                                                }
                                              }  // list node-tag
                                            }  // list node-tag-tlv
                                          }  // container node-tag-tlvs
    
                                          container dynamic-hostname-tlv {
                                            description
                                              "OSPF Dynamic Hostname TLV.";
                                            leaf hostname {
                                              type string {
                                                length
                                                  "1..255";
                                              }
                                              description
                                                "Dynamic hostname.";
                                            }
                                          }  // container dynamic-hostname-tlv
    
                                          container sbfd-discriminator-tlv {
                                            description
                                              "OSPF S-BFD Discriminator TLV.";
                                            list sbfd-discriminators {
                                              description
                                                "List of S-BFD Discriminators.";
                                              leaf sbfd-discriminator {
                                                type uint32;
                                                description
                                                  "Individual S-BFD Discriminator.";
                                              }
                                            }  // list sbfd-discriminators
                                          }  // container sbfd-discriminator-tlv
    
                                          container maximum-sid-depth-tlv {
                                            description
                                              "OSPF Node MSD TLV.";
                                            list msd-type {
                                              description
                                                "List of MSD tuples.";
                                              leaf msd-type {
                                                type uint8;
                                                description
                                                  "Maximum SID Depth (MSD) type.";
                                              }
    
                                              leaf msd-value {
                                                type uint8;
                                                description
                                                  "MSD value for the type.";
                                              }
                                            }  // list msd-type
                                          }  // container maximum-sid-depth-tlv
    
                                          container unknown-tlvs {
                                            description
                                              "All unknown TLVs.";
                                            list unknown-tlv {
                                              description
                                                "Unknown TLV.";
                                              leaf type {
                                                type uint16;
                                                description
                                                  "TLV type.";
                                              }
    
                                              leaf length {
                                                type uint16;
                                                description
                                                  "TLV length (octets).";
                                              }
    
                                              leaf value {
                                                type yang:hex-string;
                                                description
                                                  "TLV value.";
                                              }
                                            }  // list unknown-tlv
                                          }  // container unknown-tlvs
                                        }  // container ri-opaque
    
                                        container te-opaque {
                                          description
                                            "OSPFv2 TE Opaque-LSA.";
                                          reference
                                            "RFC 3630: Traffic Engineering (TE) Extensions to
                                            OSPF Version 2";
    
                                          container router-address-tlv {
                                            description
                                              "Router address TLV.";
                                            leaf router-address {
                                              type inet:ipv4-address;
                                              description
                                                "Router address.";
                                            }
                                          }  // container router-address-tlv
    
                                          container link-tlv {
                                            description
                                              "Describes a single link.  It is constructed
    from a set of sub-TLVs.";
                                            leaf link-type {
                                              type router-link-type;
                                              mandatory
                                                true;
                                              description
                                                "Link type.";
                                            }
    
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              mandatory
                                                true;
                                              description
                                                "Link ID.";
                                            }
    
                                            container local-if-ipv4-addrs {
                                              description
                                                "All local interface IPv4 addresses.";
                                              leaf-list local-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of local interface IPv4 addresses.";
                                              }
                                            }  // container local-if-ipv4-addrs
    
                                            container remote-if-ipv4-addrs {
                                              description
                                                "All remote interface IPv4 addresses.";
                                              leaf-list remote-if-ipv4-addr {
                                                type inet:ipv4-address;
                                                description
                                                  "List of remote interface IPv4 addresses.";
                                              }
                                            }  // container remote-if-ipv4-addrs
    
                                            leaf te-metric {
                                              type uint32;
                                              description
                                                "TE metric.";
                                            }
    
                                            leaf max-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum bandwidth.";
                                            }
    
                                            leaf max-reservable-bandwidth {
                                              type rt-types:bandwidth-ieee-float32;
                                              description
                                                "Maximum reservable bandwidth.";
                                            }
    
                                            container unreserved-bandwidths {
                                              description
                                                "All unreserved bandwidths.";
                                              list unreserved-bandwidth {
                                                description
                                                  "List of unreserved bandwidths for different
    priorities.";
                                                leaf priority {
                                                  type uint8 {
                                                    range
                                                      "0 .. 7";
                                                  }
                                                  description
                                                    "Priority from 0 to 7.";
                                                }
    
                                                leaf unreserved-bandwidth {
                                                  type rt-types:bandwidth-ieee-float32;
                                                  description
                                                    "Unreserved bandwidth.";
                                                }
                                              }  // list unreserved-bandwidth
                                            }  // container unreserved-bandwidths
    
                                            leaf admin-group {
                                              type uint32;
                                              description
                                                "Administrative Group / Resource Class/Color.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container link-tlv
                                        }  // container te-opaque
    
                                        container extended-prefix-opaque {
                                          description
                                            "All Extended Prefix TLVs in the LSA.";
                                          list extended-prefix-tlv {
                                            description
                                              "Extended Prefix TLV.";
                                            leaf route-type {
                                              type enumeration {
                                                enum
                                                  "unspecified" {
                                                  value
                                                    0;
                                                  description
                                                    "Unspecified.";
                                                }
                                                enum
                                                  "intra-area" {
                                                  value
                                                    1;
                                                  description
                                                    "OSPF intra-area route.";
                                                }
                                                enum
                                                  "inter-area" {
                                                  value
                                                    3;
                                                  description
                                                    "OSPF inter-area route.";
                                                }
                                                enum
                                                  "external" {
                                                  value
                                                    5;
                                                  description
                                                    "OSPF external route.";
                                                }
                                                enum
                                                  "nssa" {
                                                  value
                                                    7;
                                                  description
                                                    "OSPF NSSA external route.";
                                                }
                                              }
                                              description
                                                "Route type.";
                                            }
    
                                            container flags {
                                              description
                                                "Prefix flags.";
                                              leaf-list extended-prefix-flags {
                                                type identityref {
                                                  base ospfv2-extended-prefix-flag;
                                                }
                                                description
                                                  "List of Extended Prefix TLV flags.  This list will
    contain identities for the prefix flags; these
    identities are set in the extended prefix flags.";
                                              }
                                            }  // container flags
    
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "Address prefix.";
                                            }
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // list extended-prefix-tlv
                                        }  // container extended-prefix-opaque
    
                                        container extended-link-opaque {
                                          description
                                            "All Extended Link TLVs in the LSA.";
                                          reference
                                            "RFC 7684: OSPFv2 Prefix/Link Attribute Advertisement";
    
                                          container extended-link-tlv {
                                            description
                                              "Extended Link TLV.";
                                            leaf link-id {
                                              type union {
                                                type inet:ipv4-address;
                                                type yang:dotted-quad;
                                              }
                                              description
                                                "Router-LSA Link ID.";
                                            }
    
                                            leaf link-data {
                                              type union {
                                                type inet:ipv4-address;
                                                type uint32;
                                              }
                                              description
                                                "Router-LSA link data.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Router-LSA link type.";
                                            }
    
                                            container maximum-sid-depth-tlv {
                                              description
                                                "OSPF Node MSD TLV.";
                                              list msd-type {
                                                description
                                                  "List of MSD tuples.";
                                                leaf msd-type {
                                                  type uint8;
                                                  description
                                                    "Maximum SID Depth (MSD) type.";
                                                }
    
                                                leaf msd-value {
                                                  type uint8;
                                                  description
                                                    "MSD value for the type.";
                                                }
                                              }  // list msd-type
                                            }  // container maximum-sid-depth-tlv
    
                                            container unknown-tlvs {
                                              description
                                                "All unknown TLVs.";
                                              list unknown-tlv {
                                                description
                                                  "Unknown TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // list unknown-tlv
                                            }  // container unknown-tlvs
                                          }  // container extended-link-tlv
                                        }  // container extended-link-opaque
                                      }  // container opaque
                                    }  // container body
                                  }  // container ospfv2
                                  container ospfv3 {
                                    description
                                      "OSPFv3 LSA.";
                                    container header {
                                      description
                                        "Decoded OSPFv3 LSA header data.";
                                      leaf lsa-id {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "OSPFv3 LSA ID.";
                                      }
    
                                      leaf age {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA age.";
                                      }
    
                                      leaf type {
                                        type identityref {
                                          base ospf-lsa-type;
                                        }
                                        mandatory
                                          true;
                                        description
                                          "LSA type.";
                                      }
    
                                      leaf adv-router {
                                        type rt-types:router-id;
                                        mandatory
                                          true;
                                        description
                                          "LSA advertising router.";
                                      }
    
                                      leaf seq-num {
                                        type uint32;
                                        mandatory
                                          true;
                                        description
                                          "LSA sequence number.";
                                      }
    
                                      leaf checksum {
                                        type fletcher-checksum16-type;
                                        mandatory
                                          true;
                                        description
                                          "LSA checksum.";
                                      }
    
                                      leaf length {
                                        type uint16;
                                        mandatory
                                          true;
                                        description
                                          "LSA length, including the header.";
                                      }
                                    }  // container header
    
                                    container body {
                                      description
                                        "Decoded OSPF LSA body data.";
                                      container router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-lsa')" {
                                          description
                                            "Only applies to Router-LSAs.";
                                        }
                                        description
                                          "Router-LSA.";
                                        container router-bits {
                                          description
                                            "Router-LSA bits.";
                                          leaf-list rtr-lsa-bits {
                                            type identityref {
                                              base router-lsa-bit;
                                            }
                                            description
                                              "List of Router-LSA bits.  This list will contain
    identities for the bits; these identities are set
    in the Router-LSA bits.";
                                          }
                                        }  // container router-bits
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container links {
                                          description
                                            "All router links.";
                                          list link {
                                            description
                                              "Router-LSA link.";
                                            leaf interface-id {
                                              type uint32;
                                              description
                                                "Interface ID for the link.";
                                            }
    
                                            leaf neighbor-interface-id {
                                              type uint32;
                                              description
                                                "Neighbor's Interface ID for the link.";
                                            }
    
                                            leaf neighbor-router-id {
                                              type rt-types:router-id;
                                              description
                                                "Neighbor's Router ID for the link.";
                                            }
    
                                            leaf type {
                                              type router-link-type;
                                              description
                                                "Link type: 1 - Point-to-Point Link
    	   2 - Transit Network Link
    	   3 - Reserved for OSPFv3 Links
    	   4 - Virtual Link.";
                                            }
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Link metric.";
                                            }
                                          }  // list link
                                        }  // container links
                                      }  // container router
    
                                      container network {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-network-lsa')" {
                                          description
                                            "Only applies to Network-LSAs.";
                                        }
                                        description
                                          "Network-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        container attached-routers {
                                          description
                                            "All attached routers.";
                                          leaf-list attached-router {
                                            type rt-types:router-id;
                                            description
                                              "List of the routers attached to the network.";
                                          }
                                        }  // container attached-routers
                                      }  // container network
    
                                      container inter-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-prefix-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Prefix-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Inter-Area Prefix metric.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
                                      }  // container inter-area-prefix
    
                                      container inter-area-router {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-inter-area-router-lsa')" {
                                          description
                                            "Only applies to Inter-Area-Router-LSAs.";
                                        }
                                        description
                                          "Inter-Area-Router-LSA.";
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "Autonomous System Boundary Router (ASBR) metric.";
                                        }
    
                                        leaf destination-router-id {
                                          type rt-types:router-id;
                                          description
                                            "The Router ID of the ASBR described by the LSA.";
                                        }
                                      }  // container inter-area-router
    
                                      container as-external {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-as-external-lsa')" {
                                          description
                                            "Only applies to AS-External-LSAs.";
                                        }
                                        description
                                          "AS-External-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container as-external
    
                                      container nssa {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-nssa-lsa')" {
                                          description
                                            "Only applies to NSSA-LSAs.";
                                        }
                                        description
                                          "NSSA-LSA.";
                                        leaf metric {
                                          type ospf-metric;
                                          description
                                            "AS-External-LSA or NSSA-LSA Metric.";
                                        }
    
                                        leaf flags {
                                          type bits {
                                            bit
                                              E {
                                              position
                                                0;
                                              description
                                                "When set, the metric specified is a Type 2
    external metric.";
                                            }
                                            bit
                                              F {
                                              position
                                                1;
                                              description
                                                "When set, a forwarding address is included
    in the LSA.";
                                            }
                                            bit
                                              T {
                                              position
                                                2;
                                              description
                                                "When set, an external route tag is included
    in the LSA.";
                                            }
                                          }
                                          description
                                            "AS-External-LSA or NSSA-LSA flags.";
                                        }
    
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced Link State (LS) Type.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf prefix {
                                          type inet:ip-prefix;
                                          description
                                            "LSA prefix.";
                                        }
    
                                        container prefix-options {
                                          description
                                            "Prefix options.";
                                          leaf-list prefix-options {
                                            type identityref {
                                              base ospfv3-prefix-option;
                                            }
                                            description
                                              "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                          }
                                        }  // container prefix-options
    
                                        leaf forwarding-address {
                                          type inet:ipv6-address;
                                          description
                                            "IPv6 Forwarding address.";
                                        }
    
                                        leaf external-route-tag {
                                          type uint32;
                                          description
                                            "Route tag.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
                                      }  // container nssa
    
                                      container link {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-link-lsa')" {
                                          description
                                            "Only applies to Link-LSAs.";
                                        }
                                        description
                                          "Link-LSA.";
                                        leaf rtr-priority {
                                          type uint8;
                                          description
                                            "Router priority for DR election.  A router with a
    higher priority will be preferred in the election.
    A value of 0 indicates that the router is not eligible
    to become the DR or BDR.";
                                        }
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        leaf link-local-interface-address {
                                          type inet:ipv6-address;
                                          description
                                            "The originating router's link-local
    interface address for the link.";
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint32;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes for the link.";
                                          list prefix {
                                            description
                                              "List of prefixes associated with the link.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container link
    
                                      container intra-area-prefix {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-intra-area-prefix-lsa')" {
                                          description
                                            "Only applies to Intra-Area-Prefix-LSAs.";
                                        }
                                        description
                                          "Intra-Area-Prefix-LSA.";
                                        leaf referenced-ls-type {
                                          type identityref {
                                            base ospfv3-lsa-type;
                                          }
                                          description
                                            "Referenced LS Type.";
                                        }
    
                                        leaf unknown-referenced-ls-type {
                                          type uint16;
                                          description
                                            "Value for an unknown Referenced LS Type.";
                                        }
    
                                        leaf referenced-link-state-id {
                                          type uint32;
                                          description
                                            "Referenced Link State ID.";
                                        }
    
                                        leaf referenced-adv-router {
                                          type rt-types:router-id;
                                          description
                                            "Referenced Advertising Router.";
                                          reference
                                            "RFC 5340: OSPF for IPv6";
    
                                        }
    
                                        leaf num-of-prefixes {
                                          type uint16;
                                          description
                                            "Number of prefixes.";
                                        }
    
                                        container prefixes {
                                          description
                                            "All prefixes in this LSA.";
                                          list prefix {
                                            description
                                              "List of prefixes in this LSA.";
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-prefix-option;
                                                }
                                                description
                                                  "List of OSPFv3 prefix Options.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
    
                                            leaf metric {
                                              type uint16;
                                              description
                                                "Prefix metric.";
                                            }
                                          }  // list prefix
                                        }  // container prefixes
                                      }  // container intra-area-prefix
    
                                      container router-information {
                                        when
                                          "derived-from-or-self(../../header/type, 'ospfv3-router-information-lsa')" {
                                          description
                                            "Only applies to Router-Information-LSAs (RFC 7770).";
                                          reference
                                            "RFC 7770: Extensions to OSPF for Advertising Optional
                                            Router Capabilities";
    
                                        }
                                        description
                                          "Router-Information-LSA.";
                                        reference
                                          "RFC 7770: Extensions to OSPF for Advertising Optional
                                          Router Capabilities";
    
                                        container router-capabilities-tlv {
                                          description
                                            "Informational and functional router capabilities.";
                                          container router-informational-capabilities {
                                            description
                                              "OSPF Router Informational Flag definitions.";
                                            leaf-list informational-capabilities {
                                              type identityref {
                                                base informational-capability;
                                              }
                                              description
                                                "List of informational capabilities.  This list will
    contain the identities for the informational
    capabilities supported by the router.";
                                            }
                                          }  // container router-informational-capabilities
    
                                          list informational-capabilities-flags {
                                            description
                                              "List of informational capability flags.  This will
    return all the 32-bit informational flags, irrespective
    of whether or not they are known to the device.";
                                            leaf informational-flag {
                                              type uint32;
                                              description
                                                "Individual informational capability flag.";
                                            }
                                          }  // list informational-capabilities-flags
    
                                          list functional-capabilities {
                                            description
                                              "List of functional capability flags.  This will
    return all the 32-bit functional flags, irrespective
    of whether or not they are known to the device.";
                                            leaf functional-flag {
                                              type uint32;
                                              description
                                                "Individual functional capability flag.";
                                            }
                                          }  // list functional-capabilities
                                        }  // container router-capabilities-tlv
    
                                        container node-tag-tlvs {
                                          description
                                            "All Node Admin Tag TLVs.";
                                          list node-tag-tlv {
                                            description
                                              "Node Admin Tag TLV.";
                                            list node-tag {
                                              description
                                                "List of tags.";
                                              leaf tag {
                                                type uint32;
                                                description
                                                  "Value of the node administrative tag.";
                                              }
                                            }  // list node-tag
                                          }  // list node-tag-tlv
                                        }  // container node-tag-tlvs
    
                                        container dynamic-hostname-tlv {
                                          description
                                            "OSPF Dynamic Hostname TLV.";
                                          leaf hostname {
                                            type string {
                                              length
                                                "1..255";
                                            }
                                            description
                                              "Dynamic hostname.";
                                          }
                                        }  // container dynamic-hostname-tlv
    
                                        container sbfd-discriminator-tlv {
                                          description
                                            "OSPF S-BFD Discriminator TLV.";
                                          list sbfd-discriminators {
                                            description
                                              "List of S-BFD Discriminators.";
                                            leaf sbfd-discriminator {
                                              type uint32;
                                              description
                                                "Individual S-BFD Discriminator.";
                                            }
                                          }  // list sbfd-discriminators
                                        }  // container sbfd-discriminator-tlv
                                      }  // container router-information
    
                                      container e-link {
                                        when
                                          "../../ospf:header/ospf:type = 'ospfv3-e-lsa:ospfv3-e-link-lsa'" {
                                          description
                                            "Only applies to E-Link-LSAs.";
                                        }
                                        description
                                          "E-Link-LSA contents.";
                                        reference
                                          "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                                          Extensibility, Section 4.7";
    
                                        leaf rtr-priority {
                                          type uint8;
                                          description
                                            "Router priority for the interface.";
                                        }
    
                                        container lsa-options {
                                          description
                                            "OSPFv3 LSA Options.";
                                          leaf-list lsa-options {
                                            type identityref {
                                              base ospfv3-lsa-option;
                                            }
                                            description
                                              "List of OSPFv3 LSA Options.  This list will contain
    the identities for the OSPFv3 LSA Options that are
    set for the LSA.";
                                          }
                                        }  // container lsa-options
    
                                        list e-link-tlvs {
                                          description
                                            "E-Link-LSA TLVs.";
                                          container unknown-tlv {
                                            description
                                              "Unknown E-Link TLV.";
                                            leaf type {
                                              type uint16;
                                              description
                                                "TLV type.";
                                            }
    
                                            leaf length {
                                              type uint16;
                                              description
                                                "TLV length (octets).";
                                            }
    
                                            leaf value {
                                              type yang:hex-string;
                                              description
                                                "TLV value.";
                                            }
                                          }  // container unknown-tlv
    
                                          container intra-prefix-tlv {
                                            description
                                              "Intra-Area-Prefix-LSA TLV.";
                                            leaf metric {
                                              type ospf:ospf-metric;
                                              description
                                                "Intra-Area Prefix metric.";
                                            }
    
                                            leaf prefix {
                                              type inet:ip-prefix;
                                              description
                                                "LSA prefix.";
                                            }
    
                                            container prefix-options {
                                              description
                                                "Prefix options.";
                                              reference
                                                "RFC 8362:  OSPFv3 Link State Advertisement (LSA)
                                                Extensibility, Section 3.1";
    
                                              leaf-list prefix-options {
                                                type identityref {
                                                  base ospfv3-e-prefix-option;
                                                }
                                                description
                                                  "OSPFv3 prefix options flag list.  This list will
    contain the identities for the OSPFv3 options
    that are set for the OSPFv3 prefix.";
                                              }
                                            }  // container prefix-options
    
                                            list sub-tlvs {
                                              description
                                                "Intra-Area-Prefix TLV sub-TLVs.";
                                              container unknown-sub-tlv {
                                                description
                                                  "Unknown External TLV sub-TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // container unknown-sub-tlv
                                            }  // list sub-tlvs
                                          }  // container intra-prefix-tlv
    
                                          container ipv6-link-local-addr-tlv {
                                            description
                                              "IPv6 Link-Local Address TLV.";
                                            leaf link-local-address {
                                              type inet:ipv6-address;
                                              description
                                                "IPv6 Link-Local address.";
                                            }
    
                                            list sub-tlvs {
                                              description
                                                "IPv6 Link-Local Address TLV sub-TLVs.";
                                              container unknown-sub-tlv {
                                                description
                                                  "Unknown External TLV sub-TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // container unknown-sub-tlv
                                            }  // list sub-tlvs
                                          }  // container ipv6-link-local-addr-tlv
    
                                          container ipv4-link-local-addr-tlv {
                                            description
                                              "IPv4 Link-Local Address TLV.";
                                            leaf link-local-address {
                                              type inet:ipv4-address;
                                              description
                                                "IPv4 Link-Local address.";
                                            }
    
                                            list sub-tlvs {
                                              description
                                                "IPv4 Link-Local Address TLV sub-TLVs.";
                                              container unknown-sub-tlv {
                                                description
                                                  "Unknown External TLV sub-TLV.";
                                                leaf type {
                                                  type uint16;
                                                  description
                                                    "TLV type.";
                                                }
    
                                                leaf length {
                                                  type uint16;
                                                  description
                                                    "TLV length (octets).";
                                                }
    
                                                leaf value {
                                                  type yang:hex-string;
                                                  description
                                                    "TLV value.";
                                                }
                                              }  // container unknown-sub-tlv
                                            }  // list sub-tlvs
                                          }  // container ipv4-link-local-addr-tlv
                                        }  // list e-link-tlvs
                                      }  // container e-link
                                    }  // container body
                                  }  // container ospfv3
                                }  // choice version
                              }  // list link-scope-lsa
                            }  // container link-scope-lsas
                          }  // list link-scope-lsa-type
                        }  // container database
    
                        container topologies {
                          description
                            "All topologies for the interface.";
                          list topology {
                            key "name";
                            description
                              "OSPF interface topology.";
                            leaf name {
                              type leafref {
                                path "../../../../../../../../../../rt:ribs/rt:rib/rt:name";
                              }
                              description
                                "Single topology enabled on this interface.";
                            }
    
                            leaf cost {
                              type ospf-link-metric;
                              description
                                "Interface cost for this topology.";
                            }
                          }  // list topology
                        }  // container topologies
    
                        leaf instance-id {
                          type uint8;
                          default "0";
                          description
                            "OSPFv3 instance ID.";
                        }
    
                        leaf interface-id {
                          type uint32;
                          config false;
                          description
                            "OSPFv3 interface ID.";
                        }
                      }  // list interface
                    }  // container interfaces
    
                    container topologies {
                      description
                        "All topologies for the area.";
                      list topology {
                        key "name";
                        description
                          "OSPF area topology.";
                        leaf name {
                          type leafref {
                            path "../../../../../../../../rt:ribs/rt:rib/rt:name";
                          }
                          description
                            "Single topology enabled for this area.";
                        }
    
                        leaf summary {
                          when
                            "derived-from(../../../area-type, 'stub-nssa-area')" {
                            description
                              "Summary advertisement into the stub area or NSSA.";
                          }
                          type boolean;
                          description
                            "Enables/disables a summary advertisement into the
    topology in the stub area or NSSA.";
                        }
    
                        leaf default-cost {
                          when
                            "derived-from(../../../area-type, 'stub-nssa-area')" {
                            description
                              "Cost for the LSA default route advertised into the
    topology in the stub area or NSSA.";
                          }
                          type ospf-metric;
                          description
                            "Sets the summary default route cost for a
    stub area or NSSA.";
                        }
    
                        container ranges {
                          description
                            "Container for summary ranges.";
                          list range {
                            key "prefix";
                            description
                              "Summarizes routes matching the address/mask.
    Applicable to Area Border Routers (ABRs) only.";
                            leaf prefix {
                              type inet:ip-prefix;
                              description
                                "IPv4 or IPv6 prefix.";
                            }
    
                            leaf advertise {
                              type boolean;
                              description
                                "Advertise or hide.";
                            }
    
                            leaf cost {
                              type ospf-metric;
                              description
                                "Advertised cost of a summary route.";
                            }
                          }  // list range
                        }  // container ranges
                      }  // list topology
                    }  // container topologies
    
                    leaf extended-lsa-support {
                      type boolean;
                      must
                        "derived-from(../ospf:area-type,'stub-nssa-area') or (current() = 'true') or (../../../extended-lsa-support = 'false')" {
                        description
                          "For regular areas, i.e., areas where AS-scoped LSAs
    are flooded, disabling AreaExtendedLSASupport at the
    area level is prohibited when ExtendedLSASupport is
    enabled at the instance level.  E-AS-External-LSAs
    are flooded into all OSPFv3 regular areas (i.e., not
    a stub or an NSSA), and disabling support at the
    area level is not possible.";
                      }
                      description
                        "This augments the OSPFv3 protocol area-level
    configuration with Extended LSA support.  When enabled,
    OSPFv3 Extended LSAs will be advertised and OSPFv3 Legacy
    LSAs will not be advertised.  When disabled, OSPFv3
    Legacy LSAs will be advertised.  However, OSPFv3 Extended
    LSAs could still be advertised in Extended LSA Sparse
    Mode to support incrementally deployed features as
    described in Section 6.2 of RFC 8362.  If not specified,
    Extended LSA support status is inherited from the
    instance-level configuration.";
                      reference
                        "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                        Extensibility, Appendix B - Area Configuration Support";
    
                    }
                  }  // list area
                }  // container areas
    
                container topologies {
                  description "All topologies.";
                  list topology {
                    key "name";
                    description
                      "OSPF topology.  The OSPF topology address family
    must coincide with the routing instance's
    address family.";
                    leaf name {
                      type leafref {
                        path "../../../../../../rt:ribs/rt:rib/rt:name";
                      }
                      description
                        "RIB name corresponding to the OSPF topology.";
                    }
    
                    container local-rib {
                      config false;
                      description "Local RIB.";
                      list route {
                        key "prefix";
                        description
                          "OSPF instance's Local Routes.";
                        leaf prefix {
                          type inet:ip-prefix;
                          description
                            "Destination prefix.";
                        }
    
                        container next-hops {
                          description
                            "Next hops for the route.";
                          list next-hop {
                            description
                              "List of next hops for the route.";
                            leaf outgoing-interface {
                              type if:interface-ref;
                              description
                                "Name of the outgoing interface.";
                            }
    
                            leaf next-hop {
                              type inet:ip-address;
                              description
                                "Address of the next hop.";
                            }
                          }  // list next-hop
                        }  // container next-hops
    
                        leaf metric {
                          type uint32;
                          description
                            "Metric for this route.";
                        }
    
                        leaf route-type {
                          type route-type;
                          description
                            "Route type for this route.";
                        }
    
                        leaf route-tag {
                          type uint32;
                          description
                            "Route tag for this route.";
                        }
                      }  // list route
                    }  // container local-rib
                  }  // list topology
                }  // container topologies
    
                leaf extended-lsa-support {
                  type boolean;
                  default "false";
                  description
                    "Enable OSPFv3 Extended LSA support for the OSPFv3
    domain.";
                  reference
                    "RFC 8362: OSPFv3 Link State Advertisement (LSA)
                    Extensibility, Appendix A - Global Configuration Support";
    
                }
              }  // container ospf
    
              container igmp {
                if-feature feature-igmp;
                description
                  "IGMP configuration and operational state data.";
                container global {
                  description
                    "Global attributes.";
                  leaf enabled {
                    if-feature global-admin-enable;
                    type boolean;
                    default "true";
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    whether IGMP is enabled ('true') or disabled ('false')
    in the routing instance.
    When this grouping is used for MLD, this leaf indicates
    whether MLD is enabled ('true') or disabled ('false')
    in the routing instance.";
                  }
    
                  leaf max-entries {
                    if-feature global-max-entries;
                    type uint32;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the maximum number of entries in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of entries in the MLD instance.
    If this leaf is not specified, the number of entries is not
    limited.";
                  }
    
                  leaf max-groups {
                    if-feature global-max-groups;
                    type uint32;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the maximum number of groups in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of groups in the MLD instance.
    If this leaf is not specified, the number of groups is not
    limited.";
                  }
    
                  leaf entries-count {
                    type uint32;
                    config false;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the number of entries in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the number of entries in the MLD instance.";
                  }
    
                  leaf groups-count {
                    type uint32;
                    config false;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the number of existing groups in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the number of existing groups in the MLD instance.";
                  }
    
                  container statistics {
                    config false;
                    description
                      "When this grouping is used for IGMP, this container contains
    the statistics for the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the statistics for the MLD instance.";
                    leaf discontinuity-time {
                      type yang:date-and-time;
                      description
                        "The time on the most recent occasion at which any one
    or more of the statistic 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
                        "Statistics of errors.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
    
                      leaf checksum {
                        type yang:counter64;
                        description
                          "The number of checksum errors.";
                      }
    
                      leaf too-short {
                        type yang:counter64;
                        description
                          "The number of messages that are too short.";
                      }
                    }  // container error
    
                    container received {
                      description
                        "Statistics of received messages.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
                    }  // container received
    
                    container sent {
                      description
                        "Statistics of sent messages.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
                    }  // container sent
                  }  // container statistics
                }  // container global
    
                container interfaces {
                  description
                    "Containing a list of interfaces.";
                  leaf last-member-query-interval {
                    type uint16 {
                      range "1..1023";
                    }
                    units "seconds";
                    description
                      "When used in IGMP schema, this leaf indicates the Last
    Member Query Interval, which may be tuned to modify the
    leave latency of the network;
    when used in MLD schema, this leaf indicates the Last
    Listener Query Interval, which may be tuned to modify the
    leave latency of the network.
    This leaf is not applicable for version 1 of the IGMP.  For
    version 2 and version 3 of the IGMP, and for all versions of
    the MLD, the default value of this leaf is 1.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Section 8.8 of RFC 2236: Internet Group Management Protocol,
                      Version 2.
                      Section 8.8 of RFC 3376: Internet Group Management Protocol,
                      Version 3.
                      Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD)
                      for IPv6.
                      Section 9.8 of RFC 3810: Multicast Listener Discovery
                      Version 2 (MLDv2) for IPv6.";
    
                  }
    
                  leaf query-interval {
                    type uint16 {
                      range "1..31744";
                    }
                    units "seconds";
                    default "125";
                    description
                      "The Query Interval is the interval between General Queries
    sent by the Querier.  In RFC 3376, the Querier's Query
    Interval (QQI) is represented from the Querier's Query
    Interval Code (QQIC) in query message as follows:
    If QQIC < 128, QQI = QQIC.
    If QQIC >= 128, QQIC represents a floating-point value as
    follows:
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |1| exp | mant  |
    +-+-+-+-+-+-+-+-+
    QQI = (mant | 0x10) << (exp + 3).
    The maximum value of QQI is 31744.
    The default value is 125.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf query-max-response-time {
                    type uint16 {
                      range "1..1023";
                    }
                    units "seconds";
                    default "10";
                    description
                      "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    The default value is 10.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf require-router-alert {
                    if-feature intf-require-router-alert;
                    type boolean;
                    description
                      "Protocol packets should contain the router alert IP option.
    When this leaf is not configured, the server uses the
    following rules to determine the operational value of this
    leaf:
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 1, the value 'false' is operationally used
    by the server;
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 2 or 3, the value 'true' is operationally
    used by the server;
    if this grouping is used in MLD schema, the value 'true' is
    operationally used by the server.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                  }
    
                  leaf robustness-variable {
                    type uint8 {
                      range "1..7";
                    }
                    default "2";
                    description
                      "The Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf version {
                    type uint8 {
                      range "1..3";
                    }
                    default "2";
                    description
                      "IGMP version.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "RFC 1112: Host Extensions for IP Multicasting,
                       RFC 2236: Internet Group Management Protocol, Version 2,
                       RFC 3376: Internet Group Management Protocol, Version 3.";
    
                  }
    
                  leaf max-groups-per-interface {
                    if-feature intf-max-groups;
                    type uint32;
                    description
                      "The maximum number of groups associated with each interface.
    If this leaf is not specified, the number of groups is not
    limited.";
                  }
    
                  list interface {
                    key "interface-name";
                    description
                      "List of IGMP interfaces.";
                    leaf interface-name {
                      type if:interface-ref;
                      must
                        "/if:interfaces/if:interface[if:name = current()]/ip:ipv4" {
                        error-message
                          "The interface must have IPv4 configured, either enabled or disabled.";
                      }
                      description
                        "Reference to an entry in the global interface list.";
                    }
    
                    leaf last-member-query-interval {
                      type uint16 {
                        range "1..1023";
                      }
                      units "seconds";
                      must
                        "../version != 1 or (not(../version) and (../../version != 1 or not(../../version)))" {
                        error-message
                          "IGMPv1 does not support last-member-query-interval.";
                      }
                      description
                        "When used in IGMP schema, this leaf indicates the Last
    Member Query Interval, which may be tuned to modify the
    leave latency of the network;
    when used in MLD schema, this leaf indicates the Last
    Listener Query Interval, which may be tuned to modify the
    leave latency of the network.
    This leaf is not applicable for version 1 of the IGMP.  For
    version 2 and version 3 of the IGMP, and for all versions of
    the MLD, the default value of this leaf is 1.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Section 8.8 of RFC 2236: Internet Group Management Protocol,
                        Version 2.
                        Section 8.8 of RFC 3376: Internet Group Management Protocol,
                        Version 3.
                        Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD)
                        for IPv6.
                        Section 9.8 of RFC 3810: Multicast Listener Discovery
                        Version 2 (MLDv2) for IPv6.";
    
                    }
    
                    leaf query-interval {
                      type uint16 {
                        range "1..31744";
                      }
                      units "seconds";
                      description
                        "The Query Interval is the interval between General Queries
    sent by the Querier.  In RFC 3376, the Querier's Query
    Interval (QQI) is represented from the Querier's Query
    Interval Code (QQIC) in query message as follows:
    If QQIC < 128, QQI = QQIC.
    If QQIC >= 128, QQIC represents a floating-point value as
    follows:
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |1| exp | mant  |
    +-+-+-+-+-+-+-+-+
    QQI = (mant | 0x10) << (exp + 3).
    The maximum value of QQI is 31744.
    The default value is 125.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf query-max-response-time {
                      type uint16 {
                        range "1..1023";
                      }
                      units "seconds";
                      description
                        "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    The default value is 10.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf require-router-alert {
                      if-feature intf-require-router-alert;
                      type boolean;
                      description
                        "Protocol packets should contain the router alert IP option.
    When this leaf is not configured, the server uses the
    following rules to determine the operational value of this
    leaf:
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 1, the value 'false' is operationally used
    by the server;
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 2 or 3, the value 'true' is operationally
    used by the server;
    if this grouping is used in MLD schema, the value 'true' is
    operationally used by the server.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    }
    
                    leaf robustness-variable {
                      type uint8 {
                        range "1..7";
                      }
                      description
                        "The Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf version {
                      type uint8 {
                        range "1..3";
                      }
                      description
                        "IGMP version.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "RFC 1112: Host Extensions for IP Multicasting,
                         RFC 2236: Internet Group Management Protocol, Version 2,
                         RFC 3376: Internet Group Management Protocol, Version 3.";
    
                    }
    
                    leaf enabled {
                      if-feature intf-admin-enable;
                      type boolean;
                      default "true";
                      description
                        "When this grouping is used for IGMP, this leaf indicates
    whether IGMP is enabled ('true') or disabled ('false')
    on the interface.
    When this grouping is used for MLD, this leaf indicates
    whether MLD is enabled ('true') or disabled ('false')
    on the interface.";
                    }
    
                    leaf group-policy {
                      type leafref {
                        path "/acl:acls/acl:acl/acl:name";
                      }
                      description
                        "When this grouping is used for IGMP, this leaf specifies
    the name of the access policy used to filter the
    IGMP membership.
    When this grouping is used for MLD, this leaf specifies
    the name of the access policy used to filter the
    MLD membership.
    The value space of this leaf is restricted to the existing
    policy instances defined by the referenced schema in
    RFC 8519.
    As specified by RFC 8519, the length of the name is between
    1 and 64; a device MAY further restrict the length of this
    name; space and special characters are not allowed.
    If this leaf is not specified, no policy is applied, and
    all packets received from this interface are accepted.";
                      reference
                        "RFC 8519: YANG Data Model for Network Access Control Lists
                        (ACLs)";
    
                    }
    
                    leaf immediate-leave {
                      if-feature intf-immediate-leave;
                      type empty;
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf requests IGMP to perform an immediate leave upon
    receiving an IGMPv2 leave message.
    If the router is IGMP-enabled, it sends an IGMP last member
    query with a last member query response time.  However, the
    router does not wait for the response time before it prunes
    the group.
    When this grouping is used for MLD, the presence of this
    leaf requests MLD to perform an immediate leave upon
    receiving an MLDv1 leave message.
    If the router is MLD-enabled, it sends an MLD last member
    query with a last member query response time.  However, the
    router does not wait for the response time before it prunes
    the group.";
                    }
    
                    leaf max-groups {
                      if-feature intf-max-groups;
                      type uint32;
                      description
                        "When this grouping is used for IGMP, this leaf indicates
    the maximum number of groups associated with the IGMP
    interface.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of groups associated with the MLD
    interface.
    If this leaf is not specified, the number of groups is not
    limited.";
                    }
    
                    leaf max-group-sources {
                      if-feature intf-max-group-sources;
                      type uint32;
                      must
                        "../version = 3 or (not(../version) and (../../version = 3))" {
                        error-message
                          "The version of IGMP must be 3 to support the source-specific parameters.";
                      }
                      description
                        "The maximum number of group sources.
    If this leaf is not specified, the number of group sources
    is not limited.";
                    }
    
                    leaf source-policy {
                      if-feature intf-source-policy;
                      type leafref {
                        path "/acl:acls/acl:acl/acl:name";
                      }
                      must
                        "../version = 3 or (not(../version) and (../../version = 3))" {
                        error-message
                          "The version of IGMP must be 3 to support the source-specific parameters.";
                      }
                      description
                        "Name of the access policy used to filter sources.
    The value space of this leaf is restricted to the existing
    policy instances defined by the referenced schema in
    RFC 8519.
    As specified by RFC 8519, the length of the name is between
    1 and 64; a device MAY further restrict the length of this
    name; space and special characters are not allowed.
    If this leaf is not specified, no policy is applied, and
    all packets received from this interface are accepted.";
                    }
    
                    leaf verify-source-subnet {
                      if-feature intf-verify-source-subnet;
                      type empty;
                      description
                        "If present, the interface accepts packets with matching
    source IP subnet only.";
                    }
    
                    leaf explicit-tracking {
                      if-feature intf-explicit-tracking;
                      type empty;
                      must
                        "../version = 3 or (not(../version) and (../../version = 3))" {
                        error-message
                          "The version of IGMP must be 3 to support the explicit tracking function.";
                      }
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf enables an IGMP-based explicit membership tracking
    function for multicast routers and IGMP proxy devices
    supporting IGMPv3.
    When this grouping is used for MLD, the presence of this
    leaf enables an MLD-based explicit membership tracking
    function for multicast routers and MLD proxy devices
    supporting MLDv2.
    The explicit membership tracking function contributes to
    saving network resources and shortening leave latency.";
                      reference
                        "Section 3 of RFC 6636: Tuning the Behavior of the Internet
                        Group Management Protocol (IGMP) and Multicast Listener
                        Discovery (MLD) for Routers in Mobile and Wireless
                        Networks";
    
                    }
    
                    leaf lite-exclude-filter {
                      if-feature intf-lite-exclude-filter;
                      type empty;
                      must
                        "../version = 3 or (not(../version) and (../../version = 3))" {
                        error-message
                          "The version of IGMP must be 3 to support the simplified EXCLUDE filter in the Lightweight IGMPv3 protocol.";
                      }
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight IGMPv3 protocol, which simplifies the
    standard versions of IGMPv3.
    When this grouping is used for MLD, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight MLDv2 protocol, which simplifies the
    standard versions of MLDv2.";
                      reference
                        "RFC 5790: Lightweight Internet Group Management Protocol
                        Version 3 (IGMPv3) and Multicast Listener Discovery
                        Version 2 (MLDv2) Protocols";
    
                    }
    
                    leaf-list join-group {
                      if-feature intf-join-group;
                      type rt-types:ipv4-multicast-group-address;
                      description
                        "The router joins this multicast group on the interface.";
                    }
    
                    list ssm-map {
                      if-feature intf-ssm-map;
                      key "ssm-map-source-addr ssm-map-group-policy";
                      description
                        "The policy for (*,G) mapping to (S,G).";
                      leaf ssm-map-source-addr {
                        type ssm-map-ipv4-addr-type;
                        description
                          "Multicast source IPv4 address.";
                      }
    
                      leaf ssm-map-group-policy {
                        type string;
                        description
                          "Name of the policy used to define ssm-map rules.
    A device can restrict the length
    and value of this name, possibly space and special
    characters are not allowed.";
                      }
                    }  // list ssm-map
    
                    list static-group {
                      if-feature intf-static-group;
                      key "group-addr source-addr";
                      description
                        "A static multicast route, (*,G) or (S,G).
    The version of IGMP must be 3 to support (S,G).";
                      leaf group-addr {
                        type rt-types:ipv4-multicast-group-address;
                        description
                          "Multicast group IPv4 address.";
                      }
    
                      leaf source-addr {
                        type rt-types:ipv4-multicast-source-address;
                        description
                          "Multicast source IPv4 address.";
                      }
                    }  // list static-group
    
                    leaf oper-status {
                      type enumeration {
                        enum "up" {
                          value 0;
                          description
                            "Ready to pass packets.";
                        }
                        enum "down" {
                          value 1;
                          description
                            "The interface does not pass any packets.";
                        }
                      }
                      config false;
                      mandatory true;
                      description
                        "Indicates whether the operational state of the interface
    is up or down.";
                    }
    
                    leaf querier {
                      type inet:ipv4-address;
                      config false;
                      mandatory true;
                      description
                        "The querier address in the subnet.";
                    }
    
                    leaf-list joined-group {
                      if-feature intf-join-group;
                      type rt-types:ipv4-multicast-group-address;
                      config false;
                      description
                        "The routers that joined this multicast group.";
                    }
    
                    list group {
                      key "group-address";
                      config false;
                      description
                        "Multicast group membership information
    that joined on the interface.";
                      leaf group-address {
                        type rt-types:ipv4-multicast-group-address;
                        description
                          "Multicast group address.";
                      }
    
                      leaf expire {
                        type uint32;
                        units "seconds";
                        mandatory true;
                        description
                          "The time left before the multicast group state expires.";
                      }
    
                      leaf filter-mode {
                        type enumeration {
                          enum "include" {
                            value 0;
                            description
                              "In include mode, reception of packets sent
    to the specified multicast address is requested
    only from those IP source addresses listed in the
    source-list parameter";
                          }
                          enum "exclude" {
                            value 1;
                            description
                              "In exclude mode, reception of packets sent
    to the given multicast address is requested
    from all IP source addresses except those
    listed in the source-list parameter.";
                          }
                        }
                        mandatory true;
                        description
                          "Filter mode for a multicast group,
    may be either include or exclude.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        mandatory true;
                        description
                          "The elapsed time since the device created multicast group
    record.";
                      }
    
                      leaf last-reporter {
                        type inet:ipv4-address;
                        description
                          "The IPv4 address of the last host that has sent the
    report to join the multicast group.";
                      }
    
                      list source {
                        key "source-address";
                        description
                          "List of multicast source information
    of the multicast group.";
                        leaf source-address {
                          type inet:ipv4-address;
                          description
                            "Multicast source address in group record.";
                        }
    
                        leaf expire {
                          type uint32;
                          units "seconds";
                          mandatory true;
                          description
                            "The time left before multicast source-group state expires.";
                        }
    
                        leaf up-time {
                          type uint32;
                          units "seconds";
                          mandatory true;
                          description
                            "The elapsed time since the device created multicast
    source-group record.";
                        }
    
                        leaf host-count {
                          if-feature intf-explicit-tracking;
                          type uint32;
                          description
                            "The number of host addresses.";
                        }
    
                        leaf last-reporter {
                          type inet:ipv4-address;
                          description
                            "The IPv4 address of the last host that has sent the
    report to join the multicast source and group.";
                        }
    
                        list host {
                          if-feature intf-explicit-tracking;
                          key "host-address";
                          description
                            "List of hosts with the membership for the specific
    multicast source-group.";
                          leaf host-address {
                            type inet:ipv4-address;
                            description
                              "The IPv4 address of the host.";
                          }
    
                          leaf host-filter-mode {
                            type enumeration {
                              enum "include" {
                                value 0;
                                description
                                  "In include mode.";
                              }
                              enum "exclude" {
                                value 1;
                                description
                                  "In exclude mode.";
                              }
                            }
                            mandatory true;
                            description
                              "Filter mode for a multicast membership
    host may be either include or exclude.";
                          }
                        }  // list host
                      }  // list source
                    }  // list group
                  }  // list interface
                }  // container interfaces
    
                action clear-groups {
                  if-feature action-clear-groups;
                  description
                    "Clears the specified IGMP cache entries.";
                  input {
                    choice interface {
                      mandatory true;
                      description
                        "Indicates the interface(s) from which the cache
    entries are cleared.";
                      leaf interface-name {
                        type leafref {
                          path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface/igmp-mld:interface-name";
                        }
                        description
                          "Name of the IGMP interface.";
                      }
                      leaf all-interfaces {
                        type empty;
                        description
                          "IGMP groups from all interfaces are cleared.";
                      }
                    }  // choice interface
    
                    leaf group-address {
                      type union {
                        type enumeration {
                          enum "*" {
                            value 0;
                            description
                              "Any group address.";
                          }
                        }
                        type rt-types:ipv4-multicast-group-address;
                      }
                      mandatory true;
                      description
                        "Multicast group IPv4 address.
    If the value '*' is specified, all IGMP group entries
    are cleared.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv4-multicast-source-address;
                      mandatory true;
                      description
                        "Multicast source IPv4 address.
    If the value '*' is specified, all IGMP source-group
    entries are cleared.";
                    }
                  }
                }  // rpc clear-groups
              }  // container igmp
    
              container mld {
                if-feature feature-mld;
                description
                  "MLD configuration and operational state data.";
                container global {
                  description
                    "Global attributes.";
                  leaf enabled {
                    if-feature global-admin-enable;
                    type boolean;
                    default "true";
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    whether IGMP is enabled ('true') or disabled ('false')
    in the routing instance.
    When this grouping is used for MLD, this leaf indicates
    whether MLD is enabled ('true') or disabled ('false')
    in the routing instance.";
                  }
    
                  leaf max-entries {
                    if-feature global-max-entries;
                    type uint32;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the maximum number of entries in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of entries in the MLD instance.
    If this leaf is not specified, the number of entries is not
    limited.";
                  }
    
                  leaf max-groups {
                    if-feature global-max-groups;
                    type uint32;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the maximum number of groups in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of groups in the MLD instance.
    If this leaf is not specified, the number of groups is not
    limited.";
                  }
    
                  leaf entries-count {
                    type uint32;
                    config false;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the number of entries in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the number of entries in the MLD instance.";
                  }
    
                  leaf groups-count {
                    type uint32;
                    config false;
                    description
                      "When this grouping is used for IGMP, this leaf indicates
    the number of existing groups in the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the number of existing groups in the MLD instance.";
                  }
    
                  container statistics {
                    config false;
                    description
                      "When this grouping is used for IGMP, this container contains
    the statistics for the IGMP instance.
    When this grouping is used for MLD, this leaf indicates
    the statistics for the MLD instance.";
                    leaf discontinuity-time {
                      type yang:date-and-time;
                      description
                        "The time on the most recent occasion at which any one
    or more of the statistic 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
                        "Statistics of errors.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
    
                      leaf checksum {
                        type yang:counter64;
                        description
                          "The number of checksum errors.";
                      }
    
                      leaf too-short {
                        type yang:counter64;
                        description
                          "The number of messages that are too short.";
                      }
                    }  // container error
    
                    container received {
                      description
                        "Statistics of received messages.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
                    }  // container received
    
                    container sent {
                      description
                        "Statistics of sent messages.";
                      leaf total {
                        type yang:counter64;
                        description
                          "The number of total messages.";
                      }
    
                      leaf query {
                        type yang:counter64;
                        description
                          "The number of query messages.";
                      }
    
                      leaf report {
                        type yang:counter64;
                        description
                          "The number of report messages.";
                      }
    
                      leaf leave {
                        type yang:counter64;
                        description
                          "The number of leave messages.";
                      }
                    }  // container sent
                  }  // container statistics
                }  // container global
    
                container interfaces {
                  description
                    "Containing a list of interfaces.";
                  leaf last-member-query-interval {
                    type uint16 {
                      range "1..1023";
                    }
                    units "seconds";
                    default "1";
                    description
                      "When used in IGMP schema, this leaf indicates the Last
    Member Query Interval, which may be tuned to modify the
    leave latency of the network;
    when used in MLD schema, this leaf indicates the Last
    Listener Query Interval, which may be tuned to modify the
    leave latency of the network.
    This leaf is not applicable for version 1 of the IGMP.  For
    version 2 and version 3 of the IGMP, and for all versions of
    the MLD, the default value of this leaf is 1.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Section 8.8 of RFC 2236: Internet Group Management Protocol,
                      Version 2.
                      Section 8.8 of RFC 3376: Internet Group Management Protocol,
                      Version 3.
                      Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD)
                      for IPv6.
                      Section 9.8 of RFC 3810: Multicast Listener Discovery
                      Version 2 (MLDv2) for IPv6.";
    
                  }
    
                  leaf query-interval {
                    type uint16 {
                      range "1..31744";
                    }
                    units "seconds";
                    default "125";
                    description
                      "The Query Interval is the interval between General Queries
    sent by the Querier.  In RFC 3376, the Querier's Query
    Interval (QQI) is represented from the Querier's Query
    Interval Code (QQIC) in query message as follows:
    If QQIC < 128, QQI = QQIC.
    If QQIC >= 128, QQIC represents a floating-point value as
    follows:
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |1| exp | mant  |
    +-+-+-+-+-+-+-+-+
    QQI = (mant | 0x10) << (exp + 3).
    The maximum value of QQI is 31744.
    The default value is 125.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf query-max-response-time {
                    type uint16 {
                      range "1..1023";
                    }
                    units "seconds";
                    default "10";
                    description
                      "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    The default value is 10.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf require-router-alert {
                    if-feature intf-require-router-alert;
                    type boolean;
                    default "true";
                    description
                      "Protocol packets should contain the router alert IP option.
    When this leaf is not configured, the server uses the
    following rules to determine the operational value of this
    leaf:
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 1, the value 'false' is operationally used
    by the server;
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 2 or 3, the value 'true' is operationally
    used by the server;
    if this grouping is used in MLD schema, the value 'true' is
    operationally used by the server.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                  }
    
                  leaf robustness-variable {
                    type uint8 {
                      range "1..7";
                    }
                    default "2";
                    description
                      "The Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group
                      Management Protocol, Version 3";
    
                  }
    
                  leaf version {
                    type uint8 {
                      range "1..2";
                    }
                    default "2";
                    description
                      "MLD version.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    reference
                      "RFC 2710: Multicast Listener Discovery (MLD) for IPv6,
                       RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                      for IPv6.";
    
                  }
    
                  leaf max-groups-per-interface {
                    if-feature intf-max-groups;
                    type uint32;
                    description
                      "The maximum number of groups associated with each interface.
    If this leaf is not specified, the number of groups is not
    limited.";
                  }
    
                  list interface {
                    key "interface-name";
                    description
                      "List of MLD interfaces.";
                    leaf interface-name {
                      type if:interface-ref;
                      must
                        "/if:interfaces/if:interface[if:name = current()]/ip:ipv6" {
                        error-message
                          "The interface must have IPv6 configured, either enabled or disabled.";
                      }
                      description
                        "Reference to an entry in the global interface list.";
                    }
    
                    leaf last-member-query-interval {
                      type uint16 {
                        range "1..1023";
                      }
                      units "seconds";
                      description
                        "When used in IGMP schema, this leaf indicates the Last
    Member Query Interval, which may be tuned to modify the
    leave latency of the network;
    when used in MLD schema, this leaf indicates the Last
    Listener Query Interval, which may be tuned to modify the
    leave latency of the network.
    This leaf is not applicable for version 1 of the IGMP.  For
    version 2 and version 3 of the IGMP, and for all versions of
    the MLD, the default value of this leaf is 1.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Section 8.8 of RFC 2236: Internet Group Management Protocol,
                        Version 2.
                        Section 8.8 of RFC 3376: Internet Group Management Protocol,
                        Version 3.
                        Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD)
                        for IPv6.
                        Section 9.8 of RFC 3810: Multicast Listener Discovery
                        Version 2 (MLDv2) for IPv6.";
    
                    }
    
                    leaf query-interval {
                      type uint16 {
                        range "1..31744";
                      }
                      units "seconds";
                      description
                        "The Query Interval is the interval between General Queries
    sent by the Querier.  In RFC 3376, the Querier's Query
    Interval (QQI) is represented from the Querier's Query
    Interval Code (QQIC) in query message as follows:
    If QQIC < 128, QQI = QQIC.
    If QQIC >= 128, QQIC represents a floating-point value as
    follows:
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |1| exp | mant  |
    +-+-+-+-+-+-+-+-+
    QQI = (mant | 0x10) << (exp + 3).
    The maximum value of QQI is 31744.
    The default value is 125.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf query-max-response-time {
                      type uint16 {
                        range "1..1023";
                      }
                      units "seconds";
                      description
                        "Query maximum response time specifies the maximum time
    allowed before sending a responding report.
    The default value is 10.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf require-router-alert {
                      if-feature intf-require-router-alert;
                      type boolean;
                      description
                        "Protocol packets should contain the router alert IP option.
    When this leaf is not configured, the server uses the
    following rules to determine the operational value of this
    leaf:
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 1, the value 'false' is operationally used
    by the server;
    if this grouping is used in IGMP schema and the value of the
    leaf 'version' is 2 or 3, the value 'true' is operationally
    used by the server;
    if this grouping is used in MLD schema, the value 'true' is
    operationally used by the server.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                    }
    
                    leaf robustness-variable {
                      type uint8 {
                        range "1..7";
                      }
                      description
                        "The Querier's Robustness Variable allows tuning for the
    expected packet loss on a network.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group
                        Management Protocol, Version 3";
    
                    }
    
                    leaf version {
                      type uint8 {
                        range "1..2";
                      }
                      description
                        "MLD version.
    The default value is 2.
    This leaf may be configured at the interface level or the
    interface-global level, with precedence given to the value
    at the interface level.  If the leaf is not configured at
    either level, the default value is used.";
                      reference
                        "RFC 2710: Multicast Listener Discovery (MLD) for IPv6,
                         RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                        for IPv6.";
    
                    }
    
                    leaf enabled {
                      if-feature intf-admin-enable;
                      type boolean;
                      default "true";
                      description
                        "When this grouping is used for IGMP, this leaf indicates
    whether IGMP is enabled ('true') or disabled ('false')
    on the interface.
    When this grouping is used for MLD, this leaf indicates
    whether MLD is enabled ('true') or disabled ('false')
    on the interface.";
                    }
    
                    leaf group-policy {
                      type leafref {
                        path "/acl:acls/acl:acl/acl:name";
                      }
                      description
                        "When this grouping is used for IGMP, this leaf specifies
    the name of the access policy used to filter the
    IGMP membership.
    When this grouping is used for MLD, this leaf specifies
    the name of the access policy used to filter the
    MLD membership.
    The value space of this leaf is restricted to the existing
    policy instances defined by the referenced schema in
    RFC 8519.
    As specified by RFC 8519, the length of the name is between
    1 and 64; a device MAY further restrict the length of this
    name; space and special characters are not allowed.
    If this leaf is not specified, no policy is applied, and
    all packets received from this interface are accepted.";
                      reference
                        "RFC 8519: YANG Data Model for Network Access Control Lists
                        (ACLs)";
    
                    }
    
                    leaf immediate-leave {
                      if-feature intf-immediate-leave;
                      type empty;
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf requests IGMP to perform an immediate leave upon
    receiving an IGMPv2 leave message.
    If the router is IGMP-enabled, it sends an IGMP last member
    query with a last member query response time.  However, the
    router does not wait for the response time before it prunes
    the group.
    When this grouping is used for MLD, the presence of this
    leaf requests MLD to perform an immediate leave upon
    receiving an MLDv1 leave message.
    If the router is MLD-enabled, it sends an MLD last member
    query with a last member query response time.  However, the
    router does not wait for the response time before it prunes
    the group.";
                    }
    
                    leaf max-groups {
                      if-feature intf-max-groups;
                      type uint32;
                      description
                        "When this grouping is used for IGMP, this leaf indicates
    the maximum number of groups associated with the IGMP
    interface.
    When this grouping is used for MLD, this leaf indicates
    the maximum number of groups associated with the MLD
    interface.
    If this leaf is not specified, the number of groups is not
    limited.";
                    }
    
                    leaf max-group-sources {
                      if-feature intf-max-group-sources;
                      type uint32;
                      must
                        "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" {
                        error-message
                          "The version of MLD must be 2 to support the source-specific parameters.";
                      }
                      description
                        "The maximum number of group sources.
    If this leaf is not specified, the number of group sources
    is not limited.";
                    }
    
                    leaf source-policy {
                      if-feature intf-source-policy;
                      type leafref {
                        path "/acl:acls/acl:acl/acl:name";
                      }
                      must
                        "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" {
                        error-message
                          "The version of MLD must be 2 to support the source-specific parameters.";
                      }
                      description
                        "Name of the access policy used to filter sources.
    The value space of this leaf is restricted to the existing
    policy instances defined by the referenced schema in
    RFC 8519.
    As specified by RFC 8519, the length of the name is between
    1 and 64; a device MAY further restrict the length of this
    name; space and special characters are not allowed.
    If this leaf is not specified, no policy is applied, and
    all packets received from this interface are accepted.";
                    }
    
                    leaf verify-source-subnet {
                      if-feature intf-verify-source-subnet;
                      type empty;
                      description
                        "If present, the interface accepts packets with matching
    source IP subnet only.";
                    }
    
                    leaf explicit-tracking {
                      if-feature intf-explicit-tracking;
                      type empty;
                      must
                        "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" {
                        error-message
                          "The version of MLD must be 2 to support the explicit tracking function.";
                      }
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf enables an IGMP-based explicit membership tracking
    function for multicast routers and IGMP proxy devices
    supporting IGMPv3.
    When this grouping is used for MLD, the presence of this
    leaf enables an MLD-based explicit membership tracking
    function for multicast routers and MLD proxy devices
    supporting MLDv2.
    The explicit membership tracking function contributes to
    saving network resources and shortening leave latency.";
                      reference
                        "Section 3 of RFC 6636: Tuning the Behavior of the Internet
                        Group Management Protocol (IGMP) and Multicast Listener
                        Discovery (MLD) for Routers in Mobile and Wireless
                        Networks";
    
                    }
    
                    leaf lite-exclude-filter {
                      if-feature intf-lite-exclude-filter;
                      type empty;
                      must
                        "../version = 2 or (not(../version) and (../../version = 2 or not(../../version)))" {
                        error-message
                          "The version of MLD must be 2 to support the simplified EXCLUDE filter in the Lightweight MLDv2 protocol.";
                      }
                      description
                        "When this grouping is used for IGMP, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight IGMPv3 protocol, which simplifies the
    standard versions of IGMPv3.
    When this grouping is used for MLD, the presence of this
    leaf enables the support of the simplified EXCLUDE filter
    in the Lightweight MLDv2 protocol, which simplifies the
    standard versions of MLDv2.";
                      reference
                        "RFC 5790: Lightweight Internet Group Management Protocol
                        Version 3 (IGMPv3) and Multicast Listener Discovery
                        Version 2 (MLDv2) Protocols";
    
                    }
    
                    leaf-list join-group {
                      if-feature intf-join-group;
                      type rt-types:ipv6-multicast-group-address;
                      description
                        "The router joins this multicast group on the interface.";
                    }
    
                    list ssm-map {
                      if-feature intf-ssm-map;
                      key "ssm-map-source-addr ssm-map-group-policy";
                      description
                        "The policy for (*,G) mapping to (S,G).";
                      leaf ssm-map-source-addr {
                        type ssm-map-ipv6-addr-type;
                        description
                          "Multicast source IPv6 address.";
                      }
    
                      leaf ssm-map-group-policy {
                        type string;
                        description
                          "Name of the policy used to define ssm-map rules.
    A device can restrict the length
    and value of this name, possibly space and special
    characters are not allowed.";
                      }
                    }  // list ssm-map
    
                    list static-group {
                      if-feature intf-static-group;
                      key "group-addr source-addr";
                      description
                        "A static multicast route, (*,G) or (S,G).
    The version of MLD must be 2 to support (S,G).";
                      leaf group-addr {
                        type rt-types:ipv6-multicast-group-address;
                        description
                          "Multicast group IPv6 address.";
                      }
    
                      leaf source-addr {
                        type rt-types:ipv6-multicast-source-address;
                        description
                          "Multicast source IPv6 address.";
                      }
                    }  // list static-group
    
                    leaf oper-status {
                      type enumeration {
                        enum "up" {
                          value 0;
                          description
                            "Ready to pass packets.";
                        }
                        enum "down" {
                          value 1;
                          description
                            "The interface does not pass any packets.";
                        }
                      }
                      config false;
                      mandatory true;
                      description
                        "Indicates whether the operational state of the interface
    is up or down.";
                    }
    
                    leaf querier {
                      type inet:ipv6-address;
                      config false;
                      mandatory true;
                      description
                        "The querier address in the subnet.";
                    }
    
                    leaf-list joined-group {
                      if-feature intf-join-group;
                      type rt-types:ipv6-multicast-group-address;
                      config false;
                      description
                        "The routers that joined this multicast group.";
                    }
    
                    list group {
                      key "group-address";
                      config false;
                      description
                        "Multicast group membership information
    that joined on the interface.";
                      leaf group-address {
                        type rt-types:ipv6-multicast-group-address;
                        description
                          "Multicast group address.";
                      }
    
                      leaf expire {
                        type uint32;
                        units "seconds";
                        mandatory true;
                        description
                          "The time left before the multicast group state expires.";
                      }
    
                      leaf filter-mode {
                        type enumeration {
                          enum "include" {
                            value 0;
                            description
                              "In include mode, reception of packets sent
    to the specified multicast address is requested
    only from those IP source addresses listed in the
    source-list parameter";
                          }
                          enum "exclude" {
                            value 1;
                            description
                              "In exclude mode, reception of packets sent
    to the given multicast address is requested
    from all IP source addresses except those
    listed in the source-list parameter.";
                          }
                        }
                        mandatory true;
                        description
                          "Filter mode for a multicast group,
    may be either include or exclude.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        mandatory true;
                        description
                          "The elapsed time since the device created multicast group
    record.";
                      }
    
                      leaf last-reporter {
                        type inet:ipv6-address;
                        description
                          "The IPv6 address of the last host that has sent the
    report to join the multicast group.";
                      }
    
                      list source {
                        key "source-address";
                        description
                          "List of multicast sources of the multicast group.";
                        leaf source-address {
                          type inet:ipv6-address;
                          description
                            "Multicast source address in group record.";
                        }
    
                        leaf expire {
                          type uint32;
                          units "seconds";
                          mandatory true;
                          description
                            "The time left before multicast source-group state expires.";
                        }
    
                        leaf up-time {
                          type uint32;
                          units "seconds";
                          mandatory true;
                          description
                            "The elapsed time since the device created multicast
    source-group record.";
                        }
    
                        leaf host-count {
                          if-feature intf-explicit-tracking;
                          type uint32;
                          description
                            "The number of host addresses.";
                        }
    
                        leaf last-reporter {
                          type inet:ipv6-address;
                          description
                            "The IPv6 address of the last host that has sent the
    report to join the multicast source and group.";
                        }
    
                        list host {
                          if-feature intf-explicit-tracking;
                          key "host-address";
                          description
                            "List of hosts with the membership for the specific
    multicast source-group.";
                          leaf host-address {
                            type inet:ipv6-address;
                            description
                              "The IPv6 address of the host.";
                          }
    
                          leaf host-filter-mode {
                            type enumeration {
                              enum "include" {
                                value 0;
                                description
                                  "In include mode.";
                              }
                              enum "exclude" {
                                value 1;
                                description
                                  "In exclude mode.";
                              }
                            }
                            mandatory true;
                            description
                              "Filter mode for a multicast membership
    host may be either include or exclude.";
                          }
                        }  // list host
                      }  // list source
                    }  // list group
                  }  // list interface
                }  // container interfaces
    
                action clear-groups {
                  if-feature action-clear-groups;
                  description
                    "Clears the specified MLD cache entries.";
                  input {
                    choice interface {
                      mandatory true;
                      description
                        "Indicates the interface(s) from which the cache
    entries are cleared.";
                      leaf interface-name {
                        type leafref {
                          path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/igmp-mld:mld/igmp-mld:interfaces/igmp-mld:interface/igmp-mld:interface-name";
                        }
                        description
                          "Name of the MLD interface.";
                      }
                      leaf all-interfaces {
                        type empty;
                        description
                          "MLD groups from all interfaces are cleared.";
                      }
                    }  // choice interface
    
                    leaf group-address {
                      type union {
                        type enumeration {
                          enum "*" {
                            value 0;
                            description
                              "Any group address.";
                          }
                        }
                        type rt-types:ipv6-multicast-group-address;
                      }
                      description
                        "Multicast group IPv6 address.
    If the value '*' is specified, all MLD group entries
    are cleared.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv6-multicast-source-address;
                      description
                        "Multicast source IPv6 address.
    If the value '*' is specified, all MLD source-group
    entries are cleared.";
                    }
                  }
                }  // rpc clear-groups
              }  // container mld
    
              container msdp {
                description
                  "MSDP configuration and operational state data.";
                container global {
                  description
                    "Global attributes.";
                  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.";
                  }
    
                  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
    
                  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
    
                  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.";
                  }
    
                  leaf ttl-threshold {
                    type uint8 {
                      range "1..255";
                    }
                    description
                      "The maximum number of hops data packets can traverse
    before being dropped.";
                  }
                }  // 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
    
                    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
    
                    leaf enabled {
                      type boolean;
                      description
                        "'true' if the peer is enabled;
    'false' if the peer is disabled.";
                    }
    
                    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.";
                    }
    
                    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)";
    
                    }
    
                    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
    
                    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
    
                    leaf ttl-threshold {
                      type uint8 {
                        range "1..255";
                      }
                      description
                        "The maximum number of hops data packets can traverse
    before being dropped.";
                    }
    
                    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.";
                        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.";
                        }
                      }  // container received
    
                      container sent {
                        description
                          "Sent message counters.";
                        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.";
                        }
                      }  // container sent
                    }  // container statistics
                  }  // 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
            }  // list control-plane-protocol
    
            container pim {
              presence
                "Enables the PIM protocol.";
              description
                "PIM configuration data and operational state data.";
              container graceful-restart {
                description
                  "Container of graceful restart attributes.";
                leaf enabled {
                  type boolean;
                  default "false";
                  description
                    "Enables or disables graceful restart.";
                }
    
                leaf duration {
                  type uint16;
                  units "seconds";
                  default "60";
                  description
                    "Maximum time for graceful restart to finish.";
                }
              }  // container graceful-restart
    
              list address-family {
                key "address-family";
                description
                  "Each list entry for one address family.";
                leaf address-family {
                  type identityref {
                    base address-family;
                  }
                  mandatory true;
                  description "Address family.";
                }
    
                container graceful-restart {
                  description
                    "Container of graceful restart attributes.";
                  leaf enabled {
                    type boolean;
                    default "false";
                    description
                      "Enables or disables graceful restart.";
                  }
    
                  leaf duration {
                    type uint16;
                    units "seconds";
                    default "60";
                    description
                      "Maximum time for graceful restart to finish.";
                  }
                }  // container graceful-restart
    
                container statistics {
                  config false;
                  description
                    "A container defining statistics attributes.";
                  leaf discontinuity-time {
                    type yang:date-and-time;
                    description
                      "The time of 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 reinitialization of the local
    management subsystem, then this node contains the time
    the local management subsystem reinitialized
    itself.";
                  }
    
                  container error {
                    description
                      "Contains error statistics.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of Assert messages, with the message Type
    of 5 (RFCs 3973 and 7761).";
                      reference
                        "RFC 3973: Protocol Independent Multicast - Dense Mode
                        (PIM-DM): Protocol Specification (Revised)
                         RFC 7761: Protocol Independent Multicast - Sparse Mode
                        (PIM-SM): Protocol Specification (Revised)";
    
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of Bootstrap messages, with the message Type
    of 4 (RFCs 3973 and 7761).";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate RP Advertisement messages, with the
    message Type of 8 (RFCs 3973 and 7761).";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages,
    with the message Type of 10 (RFC 5015).";
                      reference
                        "RFC 5015: Bidirectional Protocol Independent Multicast
                        (BIDIR-PIM)";
    
                    }
    
                    leaf graft {
                      type yang:counter64;
                      description
                        "The number of Graft messages, with the message Type
    of 6 (RFCs 3973 and 7761).";
                    }
    
                    leaf graft-ack {
                      type yang:counter64;
                      description
                        "The number of Graft-Ack messages, with the message Type
    of 7 (RFCs 3973 and 7761).";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of Hello messages, with the message Type
    of 0 (RFCs 3973 and 7761).";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of Join/Prune messages, with the message Type
    of 3 (RFCs 3973 and 7761).";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of Register messages, with the message Type
    of 1 (RFCs 3973 and 7761).";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of Register-Stop messages, with the message Type
    of 2 (RFCs 3973 and 7761).";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of State Refresh messages, with the message Type
    of 9 (RFC 3973).";
                    }
    
                    leaf checksum {
                      type yang:counter64;
                      description
                        "The number of PIM messages that were passed to PIM
    and contained checksum errors.";
                    }
    
                    leaf format {
                      type yang:counter64;
                      description
                        "The number of PIM messages that passed checksum
    validation but contained format errors, including
    errors related to PIM Version, Type, and message
    length.";
                    }
                  }  // container error
    
                  container queue {
                    description
                      "Contains queue statistics.";
                    leaf size {
                      type uint32;
                      description
                        "The size of the input queue.";
                    }
    
                    leaf overflow {
                      type yang:counter32;
                      description
                        "The number of input queue overflows.";
                    }
                  }  // container queue
    
                  container received {
                    description
                      "Contains statistics of received messages.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of Assert messages, with the message Type
    of 5 (RFCs 3973 and 7761).";
                      reference
                        "RFC 3973: Protocol Independent Multicast - Dense Mode
                        (PIM-DM): Protocol Specification (Revised)
                         RFC 7761: Protocol Independent Multicast - Sparse Mode
                        (PIM-SM): Protocol Specification (Revised)";
    
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of Bootstrap messages, with the message Type
    of 4 (RFCs 3973 and 7761).";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate RP Advertisement messages, with the
    message Type of 8 (RFCs 3973 and 7761).";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages,
    with the message Type of 10 (RFC 5015).";
                      reference
                        "RFC 5015: Bidirectional Protocol Independent Multicast
                        (BIDIR-PIM)";
    
                    }
    
                    leaf graft {
                      type yang:counter64;
                      description
                        "The number of Graft messages, with the message Type
    of 6 (RFCs 3973 and 7761).";
                    }
    
                    leaf graft-ack {
                      type yang:counter64;
                      description
                        "The number of Graft-Ack messages, with the message Type
    of 7 (RFCs 3973 and 7761).";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of Hello messages, with the message Type
    of 0 (RFCs 3973 and 7761).";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of Join/Prune messages, with the message Type
    of 3 (RFCs 3973 and 7761).";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of Register messages, with the message Type
    of 1 (RFCs 3973 and 7761).";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of Register-Stop messages, with the message Type
    of 2 (RFCs 3973 and 7761).";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of State Refresh messages, with the message Type
    of 9 (RFC 3973).";
                    }
                  }  // container received
    
                  container sent {
                    description
                      "Contains statistics of sent messages.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of Assert messages, with the message Type
    of 5 (RFCs 3973 and 7761).";
                      reference
                        "RFC 3973: Protocol Independent Multicast - Dense Mode
                        (PIM-DM): Protocol Specification (Revised)
                         RFC 7761: Protocol Independent Multicast - Sparse Mode
                        (PIM-SM): Protocol Specification (Revised)";
    
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of Bootstrap messages, with the message Type
    of 4 (RFCs 3973 and 7761).";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate RP Advertisement messages, with the
    message Type of 8 (RFCs 3973 and 7761).";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages,
    with the message Type of 10 (RFC 5015).";
                      reference
                        "RFC 5015: Bidirectional Protocol Independent Multicast
                        (BIDIR-PIM)";
    
                    }
    
                    leaf graft {
                      type yang:counter64;
                      description
                        "The number of Graft messages, with the message Type
    of 6 (RFCs 3973 and 7761).";
                    }
    
                    leaf graft-ack {
                      type yang:counter64;
                      description
                        "The number of Graft-Ack messages, with the message Type
    of 7 (RFCs 3973 and 7761).";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of Hello messages, with the message Type
    of 0 (RFCs 3973 and 7761).";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of Join/Prune messages, with the message Type
    of 3 (RFCs 3973 and 7761).";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of Register messages, with the message Type
    of 1 (RFCs 3973 and 7761).";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of Register-Stop messages, with the message Type
    of 2 (RFCs 3973 and 7761).";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of State Refresh messages, with the message Type
    of 9 (RFC 3973).";
                    }
                  }  // container sent
                }  // container statistics
    
                container topology-tree-info {
                  config false;
                  description
                    "Contains topology tree information.";
                  list ipv4-route {
                    when
                      "../../address-family = 'rt:ipv4'" {
                      description
                        "Only applicable to an IPv4 address family.";
                    }
                    key "group source-address is-rpt";
                    description
                      "A list of IPv4 routes.";
                    leaf group {
                      type rt-types:ipv4-multicast-group-address;
                      description
                        "Group address.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv4-multicast-source-address;
                      description
                        "Source address.";
                    }
    
                    leaf is-rpt {
                      type boolean;
                      description
                        "'true' if the tree is an RPT
    (Rendezvous Point Tree).";
                    }
    
                    leaf expiration {
                      type rt-types:timer-value-seconds16;
                      description
                        "When the route will expire.";
                    }
    
                    leaf incoming-interface {
                      type if:interface-ref;
                      description
                        "Reference to an entry in the global interface list.";
                    }
    
                    leaf is-spt {
                      type boolean;
                      description
                        "'true' if the SPTbit (Shortest Path Tree bit) is set to
    indicate that forwarding is taking place on the
    (S,G) SPT.";
                      reference
                        "RFC 7761: Protocol Independent Multicast - Sparse Mode
                        (PIM-SM): Protocol Specification (Revised), Section 4.1.3";
    
                    }
    
                    leaf mode {
                      type identityref {
                        base pim-mode;
                      }
                      description "PIM mode.";
                    }
    
                    leaf msdp-learned {
                      type boolean;
                      description
                        "'true' if the route is learned from MSDP (the Multicast
    Source Discovery Protocol).";
                    }
    
                    leaf rp-address {
                      type inet:ip-address;
                      description
                        "RP (Rendezvous Point) address.";
                    }
    
                    leaf rpf-neighbor {
                      type inet:ip-address;
                      description
                        "RPF (Reverse Path Forwarding) neighbor address.";
                    }
    
                    leaf up-time {
                      type rt-types:timeticks64;
                      description
                        "The number of time ticks (hundredths of a second) since the
    route last transitioned into the active state.";
                    }
    
                    list outgoing-interface {
                      key "name";
                      description
                        "A list of outgoing interfaces.";
                      leaf name {
                        type if:interface-ref;
                        description
                          "Interface name.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the 'oper-status' setting of the interface was last
    changed to 'up'.";
                      }
    
                      leaf jp-state {
                        type enumeration {
                          enum "no-info" {
                            value 0;
                            description
                              "The interface has no (*,G) Join state and no timers
    running.";
                          }
                          enum "join" {
                            value 1;
                            description
                              "The interface has Join state.";
                          }
                          enum "prune-pending" {
                            value 2;
                            description
                              "The router has received a Prune on this interface from
    a downstream neighbor and is waiting to see whether
    the Prune will be overridden by another downstream
    router.  For forwarding purposes, the Prune-Pending
    state functions exactly like the Join state.";
                          }
                        }
                        description
                          "Join/Prune state.";
                      }
                    }  // list outgoing-interface
                  }  // list ipv4-route
    
                  list ipv6-route {
                    when
                      "../../address-family = 'rt:ipv6'" {
                      description
                        "Only applicable to an IPv6 address family.";
                    }
                    key "group source-address is-rpt";
                    description
                      "A list of IPv6 routes.";
                    leaf group {
                      type rt-types:ipv6-multicast-group-address;
                      description
                        "Group address.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv6-multicast-source-address;
                      description
                        "Source address.";
                    }
    
                    leaf is-rpt {
                      type boolean;
                      description
                        "'true' if the tree is an RPT.";
                    }
    
                    leaf expiration {
                      type rt-types:timer-value-seconds16;
                      description
                        "When the route will expire.";
                    }
    
                    leaf incoming-interface {
                      type if:interface-ref;
                      description
                        "Reference to an entry in the global interface list.";
                    }
    
                    leaf is-spt {
                      type boolean;
                      description
                        "'true' if the SPTbit (Shortest Path Tree bit) is set to
    indicate that forwarding is taking place on the
    (S,G) SPT.";
                      reference
                        "RFC 7761: Protocol Independent Multicast - Sparse Mode
                        (PIM-SM): Protocol Specification (Revised), Section 4.1.3";
    
                    }
    
                    leaf mode {
                      type identityref {
                        base pim-mode;
                      }
                      description "PIM mode.";
                    }
    
                    leaf msdp-learned {
                      type boolean;
                      description
                        "'true' if the route is learned from MSDP (the Multicast
    Source Discovery Protocol).";
                    }
    
                    leaf rp-address {
                      type inet:ip-address;
                      description
                        "RP (Rendezvous Point) address.";
                    }
    
                    leaf rpf-neighbor {
                      type inet:ip-address;
                      description
                        "RPF (Reverse Path Forwarding) neighbor address.";
                    }
    
                    leaf up-time {
                      type rt-types:timeticks64;
                      description
                        "The number of time ticks (hundredths of a second) since the
    route last transitioned into the active state.";
                    }
    
                    list outgoing-interface {
                      key "name";
                      description
                        "A list of outgoing interfaces.";
                      leaf name {
                        type if:interface-ref;
                        description
                          "Interface name.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the 'oper-status' setting of the interface was last
    changed to 'up'.";
                      }
    
                      leaf jp-state {
                        type enumeration {
                          enum "no-info" {
                            value 0;
                            description
                              "The interface has no (*,G) Join state and no timers
    running.";
                          }
                          enum "join" {
                            value 1;
                            description
                              "The interface has Join state.";
                          }
                          enum "prune-pending" {
                            value 2;
                            description
                              "The router has received a Prune on this interface from
    a downstream neighbor and is waiting to see whether
    the Prune will be overridden by another downstream
    router.  For forwarding purposes, the Prune-Pending
    state functions exactly like the Join state.";
                          }
                        }
                        description
                          "Join/Prune state.";
                      }
                    }  // list outgoing-interface
                  }  // list ipv6-route
                }  // container topology-tree-info
    
                container rp {
                  description
                    "PIM RP configuration data.";
                  container static-rp {
                    description
                      "Contains static RP attributes.";
                    list ipv4-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to an IPv4 address family.";
                      }
                      key "rp-address";
                      description
                        "A list of IPv4 RP addresses.";
                      leaf rp-address {
                        type inet:ipv4-address;
                        description
                          "Specifies a static RP address.";
                      }
    
                      container bidir {
                        presence
                          "Indicate the support of BIDIR mode.";
                        description
                          "PIM BIDIR configuration data.";
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    determine which multicast group addresses are mapped
    to this statically configured RP address.
    If a policy is not specified, the entire multicast address
    space is mapped.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf override {
                          if-feature static-rp-override;
                          type boolean;
                          default "false";
                          description
                            "When there is a conflict between static RPs and dynamic RPs,
    setting this attribute to 'true' will ask the system to use
    static RPs.";
                        }
                      }  // container bidir
    
                      container sm {
                        presence
                          "Indicate the support of sparse mode.";
                        description
                          "PIM SM configuration data.";
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    determine which multicast group addresses are mapped
    to this statically configured RP address.
    If a policy is not specified, the entire multicast address
    space is mapped.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf override {
                          if-feature static-rp-override;
                          type boolean;
                          default "false";
                          description
                            "When there is a conflict between static RPs and dynamic RPs,
    setting this attribute to 'true' will ask the system to use
    static RPs.";
                        }
                      }  // container sm
                    }  // list ipv4-rp
    
                    list ipv6-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to an IPv6 address family.";
                      }
                      key "rp-address";
                      description
                        "A list of IPv6 RP addresses.";
                      leaf rp-address {
                        type inet:ipv6-address;
                        description
                          "Specifies a static RP address.";
                      }
    
                      container bidir {
                        presence
                          "Indicate the support of BIDIR mode.";
                        description
                          "PIM BIDIR configuration data.";
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    determine which multicast group addresses are mapped
    to this statically configured RP address.
    If a policy is not specified, the entire multicast address
    space is mapped.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf override {
                          if-feature static-rp-override;
                          type boolean;
                          default "false";
                          description
                            "When there is a conflict between static RPs and dynamic RPs,
    setting this attribute to 'true' will ask the system to use
    static RPs.";
                        }
                      }  // container bidir
    
                      container sm {
                        presence
                          "Indicate the support of sparse mode.";
                        description
                          "PIM SM configuration data.";
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    determine which multicast group addresses are mapped
    to this statically configured RP address.
    If a policy is not specified, the entire multicast address
    space is mapped.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf override {
                          if-feature static-rp-override;
                          type boolean;
                          default "false";
                          description
                            "When there is a conflict between static RPs and dynamic RPs,
    setting this attribute to 'true' will ask the system to use
    static RPs.";
                        }
                      }  // container sm
                    }  // list ipv6-rp
                  }  // container static-rp
    
                  container bsr {
                    if-feature bsr;
                    description
                      "Contains BSR (Bootstrap Router) attributes.";
                    container bsr-candidate {
                      presence
                        "Present to serve as a BSR candidate.";
                      description
                        "BSR candidate attributes.";
                      choice interface-or-address {
                        description
                          "Use either an interface or an IP address.";
                        case interface {
                          if-feature candidate-interface;
                          leaf interface {
                            type if:interface-ref;
                            mandatory true;
                            description
                              "Interface to be used by a BSR.";
                          }
                        }  // case interface
    
                        case ipv4-address {
                          when
                            "../../../pim-base:address-family = 'rt:ipv4'" {
                            description
                              "Only applicable to an IPv4 address family.";
                          }
                          if-feature candidate-ipv4;
                          leaf ipv4-address {
                            type inet:ipv4-address;
                            mandatory true;
                            description
                              "IP address to be used by a BSR.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          when
                            "../../../pim-base:address-family = 'rt:ipv6'" {
                            description
                              "Only applicable to an IPv6 address family.";
                          }
                          if-feature candidate-ipv6;
                          leaf ipv6-address {
                            type inet:ipv6-address;
                            mandatory true;
                            description
                              "IP address to be used by a BSR.";
                          }
                        }  // case ipv6-address
                      }  // choice interface-or-address
    
                      leaf hash-mask-length {
                        type uint8 {
                          range "0..128";
                        }
                        mandatory true;
                        description
                          "Value contained in BSR messages used by all routers to
    hash (map) to an RP.";
                      }
    
                      leaf priority {
                        type uint8 {
                          range "0..255";
                        }
                        default "64";
                        description
                          "BSR election priority among different candidate BSRs.
    A larger value has a higher priority over a smaller
    value.";
                      }
                    }  // container bsr-candidate
    
                    container rp-candidate {
                      description
                        "Contains RP candidate attributes.";
                      list interface {
                        if-feature candidate-interface;
                        key "name";
                        description
                          "A list of RP candidates.";
                        leaf name {
                          type if:interface-ref;
                          description
                            "Interface that the RP candidate uses.";
                        }
    
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    accept or reject certain multicast groups.
    If a policy is not specified, the entire multicast address
    space is accepted.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf mode {
                          type identityref {
                            base rp-mode;
                          }
                          description
                            "The mode of an RP, which can be SM (Sparse Mode) or BIDIR
    (Bidirectional).  Each of these modes is defined in a
    separate YANG module.  If a system supports an RP mode,
    the corresponding YANG module is implemented.
    When the value of this leaf is not specified, the default
    value is the supported mode if only one mode is implemented,
    or the default value is SM if both SM and BIDIR are
    implemented.";
                        }
                      }  // list interface
    
                      list ipv4-address {
                        when
                          "../../../../pim-base:address-family = 'rt:ipv4'" {
                          description
                            "Only applicable to an IPv4 address family.";
                        }
                        if-feature candidate-ipv4;
                        key "address";
                        description
                          "A list of RP candidate addresses.";
                        leaf address {
                          type inet:ipv4-address;
                          description
                            "IPv4 address that the RP candidate uses.";
                        }
    
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    accept or reject certain multicast groups.
    If a policy is not specified, the entire multicast address
    space is accepted.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf mode {
                          type identityref {
                            base rp-mode;
                          }
                          description
                            "The mode of an RP, which can be SM (Sparse Mode) or BIDIR
    (Bidirectional).  Each of these modes is defined in a
    separate YANG module.  If a system supports an RP mode,
    the corresponding YANG module is implemented.
    When the value of this leaf is not specified, the default
    value is the supported mode if only one mode is implemented,
    or the default value is SM if both SM and BIDIR are
    implemented.";
                        }
                      }  // list ipv4-address
    
                      list ipv6-address {
                        when
                          "../../../../pim-base:address-family = 'rt:ipv6'" {
                          description
                            "Only applicable to an IPv6 address family.";
                        }
                        if-feature candidate-ipv6;
                        key "address";
                        description
                          "A list of RP candidate addresses.";
                        leaf address {
                          type inet:ipv6-address;
                          description
                            "IPv6 address that the RP candidate uses.";
                        }
    
                        leaf policy-name {
                          type string;
                          description
                            "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    accept or reject certain multicast groups.
    If a policy is not specified, the entire multicast address
    space is accepted.
    The definition of such a policy is outside the scope
    of this document.";
                        }
    
                        leaf mode {
                          type identityref {
                            base rp-mode;
                          }
                          description
                            "The mode of an RP, which can be SM (Sparse Mode) or BIDIR
    (Bidirectional).  Each of these modes is defined in a
    separate YANG module.  If a system supports an RP mode,
    the corresponding YANG module is implemented.
    When the value of this leaf is not specified, the default
    value is the supported mode if only one mode is implemented,
    or the default value is SM if both SM and BIDIR are
    implemented.";
                        }
                      }  // list ipv6-address
                    }  // container rp-candidate
    
                    container bsr {
                      config false;
                      description
                        "BSR information.";
                      leaf address {
                        type inet:ip-address;
                        description
                          "BSR address.";
                      }
    
                      leaf hash-mask-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Hash mask length.";
                      }
    
                      leaf priority {
                        type uint8 {
                          range "0..255";
                        }
                        description "Priority.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second)
    since the BSR came up.";
                      }
                    }  // container bsr
    
                    choice election-state {
                      if-feature bsr-election-state;
                      description
                        "BSR election state.";
                      leaf candidate-bsr-state {
                        type enumeration {
                          enum "candidate" {
                            value 0;
                            description
                              "The router is a candidate to be the BSR for the
    scope zone, but currently another router is the
    preferred BSR.";
                          }
                          enum "pending" {
                            value 1;
                            description
                              "The router is a candidate to be the BSR for the
    scope zone.  Currently, no other router is the
    preferred BSR, but this router is not yet the
    elected BSR.  This is a temporary state that
    prevents rapid thrashing of the choice of BSR
    during BSR election.";
                          }
                          enum "elected" {
                            value 2;
                            description
                              "The router is the elected BSR for the
    scope zone, and it must perform all of the
    BSR functions.";
                          }
                        }
                        description
                          "Candidate-BSR (C-BSR) state.";
                        reference
                          "RFC 5059: Bootstrap Router (BSR) Mechanism for
                          Protocol Independent Multicast (PIM),
                          Section 3.1.1";
    
                      }
                      leaf non-candidate-bsr-state {
                        type enumeration {
                          enum "no-info" {
                            value 0;
                            description
                              "The router has no information about this scope
    zone.";
                          }
                          enum "accept-any" {
                            value 1;
                            description
                              "The router does not know of an active BSR and
    will accept the first Bootstrap message it sees
    that provides the new BSR's identity and the
    RP-Set.";
                          }
                          enum "accept" {
                            value 2;
                            description
                              "The router knows the identity of the current
    BSR and is using the RP-Set provided by that
    BSR.  Only Bootstrap messages from that BSR or
    from a Candidate-BSR (C-BSR) with higher weight
    than the current BSR will be accepted.";
                          }
                        }
                        description
                          "Non-Candidate-BSR state.";
                        reference
                          "RFC 5059: Bootstrap Router (BSR) Mechanism for
                          Protocol Independent Multicast (PIM),
                          Section 3.1.2";
    
                      }
                    }  // choice election-state
    
                    leaf bsr-next-bootstrap {
                      type uint16;
                      units "seconds";
                      config false;
                      description
                        "The remaining time interval in seconds until the next
    Bootstrap will be sent.";
                    }
    
                    container rp {
                      config false;
                      description
                        "State information of the RP.";
                      leaf rp-address {
                        type inet:ip-address;
                        description
                          "RP address.";
                      }
    
                      leaf policy-name {
                        type string;
                        description
                          "The string value is the name to uniquely identify a
    policy that contains one or more policy rules used to
    accept or reject certain multicast groups.
    If a policy is not specified, the entire multicast
    address space is accepted.
    The definition of such a policy is outside the scope
    of this document.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second)
    since the RP became actively available.";
                      }
                    }  // container rp
    
                    leaf rp-candidate-next-advertisement {
                      type uint16;
                      units "seconds";
                      config false;
                      description
                        "The remaining time interval in seconds until the next
    RP candidate advertisement will be sent.";
                    }
                  }  // container bsr
    
                  container rp-list {
                    config false;
                    description
                      "Contains a list of RPs.";
                    list ipv4-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to an IPv4 address family.";
                      }
                      key "rp-address mode";
                      description
                        "A list of IPv4 RP addresses.";
                      leaf rp-address {
                        type inet:ipv4-address;
                        description
                          "RP address.";
                      }
    
                      leaf mode {
                        type identityref {
                          base rp-mode;
                        }
                        description "RP mode.";
                      }
    
                      leaf info-source-address {
                        type inet:ipv4-address;
                        description
                          "The address where RP information is learned.";
                      }
    
                      leaf info-source-type {
                        type identityref {
                          base rp-info-source-type;
                        }
                        description
                          "The information source of an RP.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the RP became actively available.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
                    }  // list ipv4-rp
    
                    list ipv6-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to an IPv6 address family.";
                      }
                      key "rp-address mode";
                      description
                        "A list of IPv6 RP addresses.";
                      leaf rp-address {
                        type inet:ipv6-address;
                        description
                          "RP address.";
                      }
    
                      leaf mode {
                        type identityref {
                          base rp-mode;
                        }
                        description "RP mode.";
                      }
    
                      leaf info-source-address {
                        type inet:ipv6-address;
                        description
                          "The address where RP information is learned.";
                      }
    
                      leaf info-source-type {
                        type identityref {
                          base rp-info-source-type;
                        }
                        description
                          "The information source of an RP.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the RP became actively available.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
                    }  // list ipv6-rp
                  }  // container rp-list
    
                  container rp-mappings {
                    config false;
                    description
                      "Contains a list of group-to-RP mappings.";
                    list ipv4-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to an IPv4 address family.";
                      }
                      key "group-range rp-address";
                      description
                        "A list of group-to-RP mappings.";
                      leaf group-range {
                        type inet:ipv4-prefix;
                        description
                          "Group range presented in the format of a prefix.";
                      }
    
                      leaf rp-address {
                        type inet:ipv4-address;
                        description
                          "RP address.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the RP mapping or the RP became actively available.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
                    }  // list ipv4-rp
    
                    list ipv6-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to an IPv6 address family.";
                      }
                      key "group-range rp-address";
                      description
                        "A list of IPv6 RP addresses.";
                      leaf group-range {
                        type inet:ipv6-prefix;
                        description
                          "Group range presented in the format of a prefix.";
                      }
    
                      leaf rp-address {
                        type inet:ipv6-address;
                        description
                          "RP address.";
                      }
    
                      leaf up-time {
                        type rt-types:timeticks64;
                        description
                          "The number of time ticks (hundredths of a second) since
    the RP mapping or the RP became actively available.";
                      }
    
                      leaf expiration {
                        type rt-types:timer-value-seconds16;
                        description
                          "Expiration time.";
                      }
                    }  // list ipv6-rp
                  }  // container rp-mappings
                }  // container rp
    
                container bidir {
                  presence
                    "Present to enable BIDIR mode.";
                  description
                    "PIM BIDIR configuration data.";
                }  // container bidir
    
                container sm {
                  description
                    "PIM SM configuration data.";
                  container asm {
                    description
                      "ASM (Any Source Multicast) attributes.";
                    container anycast-rp {
                      presence
                        "Present to enable anycast RP (Rendezvous Point).";
                      description
                        "Anycast RP attributes.";
                      container ipv4 {
                        when
                          "../../../../pim-base:address-family = 'rt:ipv4'" {
                          description
                            "Only applicable to IPv4 address family.";
                        }
                        description
                          "IPv4 attributes. Only applicable when
    pim-base:address-family is IPv4.";
                        list ipv4-anycast-rp {
                          key "anycast-address rp-address";
                          description
                            "A list of anycast RP settings.";
                          leaf anycast-address {
                            type inet:ipv4-address;
                            description
                              "IP address of the anycast RP set. This IP address
    is used by the multicast groups or sources to join
    or register.";
                          }
    
                          leaf rp-address {
                            type inet:ipv4-address;
                            description
                              "IP address of the router configured with anycast
    RP. This is the IP address where the Register
    messages are forwarded.";
                          }
                        }  // list ipv4-anycast-rp
                      }  // container ipv4
    
                      container ipv6 {
                        when
                          "../../../../pim-base:address-family = 'rt:ipv6'" {
                          description
                            "Only applicable to IPv6 address family.";
                        }
                        description
                          "IPv6 attributes. Only applicable when
    pim-base:address-family is IPv6.";
                        list ipv6-anycast-rp {
                          key "anycast-address rp-address";
                          description
                            "A list of anycast RP settings.";
                          leaf anycast-address {
                            type inet:ipv6-address;
                            description
                              "IP address of the anycast RP set. This IP address
    is used by the multicast groups or sources to join
    or register.";
                          }
    
                          leaf rp-address {
                            type inet:ipv6-address;
                            description
                              "IP address of the router configured with anycast
    RP. This is the IP address where the Register
    messages are forwarded.";
                          }
                        }  // list ipv6-anycast-rp
                      }  // container ipv6
                    }  // container anycast-rp
    
                    container spt-switch {
                      description
                        "SPT (Shortest Path Tree) switching attributes.";
                      container infinity {
                        if-feature spt-switch-infinity;
                        presence
                          "Present if SPT switchover threshold is set to
    infinity, according to the policy specified below.";
                        description
                          "The receiver's DR (Designated Router) never triggers
    the switchover from the RPT to the SPT.";
                        leaf policy-name {
                          if-feature spt-switch-policy;
                          type string;
                          description
                            "Switch policy.";
                        }
                      }  // container infinity
                    }  // container spt-switch
                  }  // container asm
    
                  container ssm {
                    presence
                      "Present to enable SSM (Source-Specific Multicast).";
                    description
                      "SSM (Source-Specific Multicast) attributes.";
                    leaf range-policy {
                      type string;
                      description
                        "Policy used to define SSM address range.";
                    }
                  }  // container ssm
                }  // container sm
    
                container rp {
                  description
                    "PIM RP configuration data.";
                  container static-rp {
                    description
                      "Containing static RP attributes.";
                    list ipv4-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to IPv4 address family.";
                      }
                      key "ipv4-address";
                      description
                        "A list of IPv4 RP addresses.";
                      leaf ipv4-address {
                        type inet:ipv4-address;
                        description
                          "Specifies a static RP address.";
                      }
                    }  // list ipv4-rp
    
                    list ipv6-rp {
                      when
                        "../../../pim-base:address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to IPv6 address family.";
                      }
                      key "ipv6-address";
                      description
                        "A list of IPv6 RP addresses.";
                      leaf ipv6-address {
                        type inet:ipv6-address;
                        description
                          "Specifies a static RP address.";
                      }
                    }  // list ipv6-rp
                  }  // container static-rp
    
                  container bsr {
                    if-feature bsr;
                    description
                      "Containing BSR (BootStrap Router) attributes.";
                    container bsr-candidate {
                      presence
                        "Present to serve as a BSR candidate";
                      description
                        "BSR candidate attributes.";
                      choice interface-or-address {
                        description
                          "Use either interface or ip-address.";
                        case interface {
                          if-feature candidate-interface;
                          leaf interface {
                            type if:interface-ref;
                            mandatory true;
                            description
                              "Interface to be used by BSR.";
                          }
                        }  // case interface
    
                        case ipv4-address {
                          when
                            "../../../pim-base:address-family = 'rt:ipv4'" {
                            description
                              "Only applicable to IPv4 address family.";
                          }
                          if-feature candidate-ipv4;
                          leaf ipv4-address {
                            type inet:ipv4-address;
                            mandatory true;
                            description
                              "IP address to be used by BSR.";
                          }
                        }  // case ipv4-address
    
                        case ipv6-address {
                          when
                            "../../../pim-base:address-family = 'rt:ipv6'" {
                            description
                              "Only applicable to IPv6 address family.";
                          }
                          if-feature candidate-ipv6;
                          leaf ipv6-address {
                            type inet:ipv6-address;
                            mandatory true;
                            description
                              "IP address to be used by BSR.";
                          }
                        }  // case ipv6-address
                      }  // choice interface-or-address
    
                      leaf hash-mask-length {
                        type uint8 {
                          range "0..128";
                        }
                        mandatory true;
                        description
                          "Value contained in BSR messages used by all routers to
    hash (map) to an RP.";
                      }
    
                      leaf priority {
                        type uint8 {
                          range "0..255";
                        }
                        mandatory true;
                        description
                          "BSR election priority among different candidate BSRs.
    A larger value has a higher priority over a smaller
    value.";
                      }
                    }  // container bsr-candidate
    
                    list rp-candidate-interface {
                      if-feature candidate-interface;
                      key "interface";
                      description
                        "A list of RP candidates";
                      leaf interface {
                        type if:interface-ref;
                        description
                          "Interface that the RP candidate uses.";
                      }
    
                      leaf policy {
                        type string;
                        description
                          "ACL (Access Control List) policy used to filter group
    addresses.";
                      }
    
                      leaf mode {
                        type identityref {
                          base rp-mode;
                        }
                        description "RP mode.";
                      }
                    }  // list rp-candidate-interface
    
                    list rp-candidate-ipv4-address {
                      when
                        "../../../pim-base:address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to IPv4 address family.";
                      }
                      if-feature candidate-ipv4;
                      key "ipv4-address";
                      description
                        "A list of RP candidates";
                      leaf ipv4-address {
                        type inet:ipv4-address;
                        description
                          "IPv4 address that the RP candidate uses.";
                      }
    
                      leaf policy {
                        type string;
                        description
                          "ACL (Access Control List) policy used to filter group
    addresses.";
                      }
    
                      leaf mode {
                        type identityref {
                          base rp-mode;
                        }
                        description "RP mode.";
                      }
                    }  // list rp-candidate-ipv4-address
    
                    list rp-candidate-ipv6-address {
                      when
                        "../../../pim-base:address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to IPv6 address family.";
                      }
                      if-feature candidate-ipv6;
                      key "ipv6-address";
                      description
                        "A list of RP candidates";
                      leaf ipv6-address {
                        type inet:ipv6-address;
                        description
                          "IPv6 address that the RP candidate uses.";
                      }
    
                      leaf policy {
                        type string;
                        description
                          "ACL (Access Control List) policy used to filter group
    addresses.";
                      }
    
                      leaf mode {
                        type identityref {
                          base rp-mode;
                        }
                        description "RP mode.";
                      }
                    }  // list rp-candidate-ipv6-address
                  }  // container bsr
                }  // container rp
    
                container dm {
                  presence
                    "Present to enable dense-mode.";
                  description
                    "PIM DM configuration data.";
                }  // container dm
              }  // list address-family
    
              container interfaces {
                description
                  "Contains a list of interfaces.";
                list interface {
                  key "name";
                  description
                    "List of PIM interfaces.";
                  leaf name {
                    type if:interface-ref;
                    description
                      "Reference to an entry in the global interface list.";
                  }
    
                  list address-family {
                    key "address-family";
                    description
                      "Each list entry for one address family.";
                    leaf address-family {
                      type identityref {
                        base address-family;
                      }
                      mandatory true;
                      description
                        "Address family.";
                    }
    
                    container bfd {
                      if-feature bfd;
                      description
                        "BFD (Bidirectional Forwarding Detection)
    operation.";
                      leaf enabled {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether BFD is enabled.";
                      }
    
                      leaf local-multiplier {
                        type multiplier;
                        default "3";
                        description
                          "Multiplier transmitted by the local system.";
                      }
    
                      choice interval-config-type {
                        default
                          "tx-rx-intervals";
                        description
                          "Two interval values or one value used for both transmit and
    receive.";
                        case tx-rx-intervals {
                          leaf desired-min-tx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval of control packets.";
                          }
    
                          leaf required-min-rx-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Required minimum receive interval of control packets.";
                          }
                        }  // case tx-rx-intervals
    
                        case single-interval {
                          if-feature single-minimum-interval;
                          leaf min-interval {
                            type uint32;
                            units "microseconds";
                            default "1000000";
                            description
                              "Desired minimum transmit interval and required
    minimum receive interval of control packets.";
                          }
                        }  // case single-interval
                      }  // choice interval-config-type
                    }  // container bfd
    
                    leaf dr-priority {
                      if-feature intf-dr-priority;
                      type uint32;
                      default "1";
                      description
                        "DR (Designated Router) priority as the preference in
    the DR election process.";
                    }
    
                    leaf hello-interval {
                      if-feature intf-hello-interval;
                      type rt-types:timer-value-seconds16;
                      default "30";
                      description
                        "Periodic interval for Hello messages.
    If 'infinity' or 'not-set' is used, no periodic
    Hello messages are sent.";
                      reference
                        "RFC 3973: Protocol Independent Multicast -
                        Dense Mode (PIM-DM): Protocol Specification
                        (Revised), Section 4.8
                         RFC 7761: Protocol Independent Multicast - Sparse
                        Mode (PIM-SM): Protocol Specification (Revised),
                        Section 4.11";
    
                    }
    
                    choice hello-holdtime-or-multiplier {
                      description
                        "The Holdtime is the timer value to time out the
    neighbor state when the timer expires.
    The Holdtime value can be specified by either
    (1) the given Holdtime value or (2) the calculation
    of the Hello interval multiplied by the given value
    of the multiplier.";
                      case holdtime {
                        if-feature intf-hello-holdtime;
                        leaf hello-holdtime {
                          type rt-types:timer-value-seconds16;
                          default "105";
                          description
                            "The Hello Holdtime is the amount of time to
    keep the neighbor reachable until a new
    Hello message is received.";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-hello-multiplier;
                        leaf hello-multiplier {
                          type rt-types:timer-multiplier;
                          default "3";
                          description
                            "The Hello multiplier is the number by which the
    Hello interval is multiplied to obtain the
    Hello Holdtime.
    The value of the Hello Holdtime is calculated
    as:
    hello-holdtime =
    (multiplier + 0.5) * (hello-interval).";
                        }
                      }  // case multiplier
                    }  // choice hello-holdtime-or-multiplier
    
                    leaf jp-interval {
                      if-feature intf-jp-interval;
                      type rt-types:timer-value-seconds16;
                      default "60";
                      description
                        "Periodic interval between Join/Prune messages.
    If 'infinity' or 'not-set' is used, no periodic
    Join/Prune messages are sent.";
                    }
    
                    choice jp-holdtime-or-multiplier {
                      description
                        "The Join/Prune Holdtime is the amount of time a
    receiver must keep the Join/Prune state alive.
    The Holdtime value can be specified by either
    (1) the given Holdtime value or (2) the calculation
    of 'jp-interval' multiplied by the given value of
    the multiplier.";
                      case holdtime {
                        if-feature intf-jp-holdtime;
                        leaf jp-holdtime {
                          type rt-types:timer-value-seconds16;
                          default "210";
                          description
                            "The Join/Prune Holdtime is the amount of time a
    receiver must keep the Join/Prune state alive.";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-jp-multiplier;
                        leaf jp-multiplier {
                          type rt-types:timer-multiplier;
                          default "3";
                          description
                            "The Join/Prune multiplier is the number
    by which the Join/Prune interval is multiplied
    to obtain the Join/Prune Holdtime.
    The value of the Join/Prune Holdtime is
    calculated as:
    jp-holdtime =
    (multiplier + 0.5) * (jp-interval).";
                        }
                      }  // case multiplier
                    }  // choice jp-holdtime-or-multiplier
    
                    leaf override-interval {
                      if-feature intf-override-interval;
                      type uint16;
                      units "milliseconds";
                      default "2500";
                      description
                        "A short period after a Join or Prune to allow other
    routers on the LAN to override the Join or Prune.";
                    }
    
                    leaf propagation-delay {
                      if-feature intf-propagation-delay;
                      type uint16;
                      units "milliseconds";
                      default "500";
                      description
                        "Expected propagation delay over the local link.";
                    }
    
                    leaf oper-status {
                      type enumeration {
                        enum "up" {
                          value 0;
                          description
                            "The interface is ready to pass PIM messages.";
                        }
                        enum "down" {
                          value 1;
                          description
                            "The interface does not pass PIM messages.";
                        }
                      }
                      config false;
                      description
                        "PIM operational status on the interface.
    This status is PIM specific and separate from the
    operational status of the underlying interface.";
                    }
    
                    leaf gen-id {
                      type uint32;
                      config false;
                      description
                        "The value of the Generation ID this router uses to
    insert into the PIM Hello message sent on this
    interface.";
                    }
    
                    leaf hello-expiration {
                      type rt-types:timer-value-seconds16;
                      config false;
                      description
                        "Hello interval expiration time.";
                    }
    
                    container ipv4 {
                      when
                        "../address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to an IPv4 address family.";
                      }
                      config false;
                      description
                        "Interface state attributes for IPv4.";
                      leaf-list address {
                        type inet:ipv4-address;
                        description
                          "List of addresses on which PIM is operating.";
                      }
    
                      leaf dr-address {
                        type inet:ipv4-address;
                        description
                          "DR (Designated Router) address.";
                      }
                    }  // container ipv4
    
                    container ipv6 {
                      when
                        "../address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to an IPv6 address family.";
                      }
                      config false;
                      description
                        "Interface state attributes for IPv6.";
                      leaf-list address {
                        type inet:ipv6-address;
                        description
                          "List of addresses on which PIM is operating.";
                      }
    
                      leaf dr-address {
                        type inet:ipv6-address;
                        description
                          "DR address.";
                      }
                    }  // container ipv6
    
                    container neighbors {
                      config false;
                      description
                        "Information learned from neighbors through this
    interface.";
                      list ipv4-neighbor {
                        when
                          "../../address-family = 'rt:ipv4'" {
                          description
                            "Only applicable to an IPv4 address family.";
                        }
                        key "address";
                        description
                          "Neighbor state information.";
                        leaf address {
                          type inet:ipv4-address;
                          description
                            "Neighbor address.";
                        }
    
                        leaf bfd-state {
                          type bfd-types:state;
                          description
                            "BFD (Bidirectional Forwarding Detection) status.";
                        }
    
                        leaf expiration {
                          type rt-types:timer-value-seconds16;
                          description
                            "Neighbor expiration time.";
                        }
    
                        leaf dr-priority {
                          type uint32;
                          description
                            "DR (Designated Router) priority as the preference in the DR
    election process.";
                        }
    
                        leaf gen-id {
                          type uint32;
                          description
                            "The value of the Generation ID in the last Hello message
    from the neighbor.";
                        }
    
                        container lan-prune-delay {
                          description
                            "The information of the LAN Prune Delay option in the Hello
    message from the neighbor.";
                          leaf present {
                            type boolean;
                            description
                              "'true' if the LAN Prune Delay option is present in the
    last Hello message from the neighbor.";
                          }
    
                          leaf override-interval {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type uint16;
                            units "milliseconds";
                            description
                              "The value of the Override_Interval field of the LAN Prune
    Delay option in the last Hello message from the neighbor.
    The neighbor uses this value to indicate a short period
    after a Join or Prune to allow other routers on the LAN
    to override the Join or Prune.";
                          }
    
                          leaf propagation-delay {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type uint16;
                            units "milliseconds";
                            description
                              "The value of the Propagation_Delay field of the LAN Prune
    Delay option in the last Hello message from the neighbor.
    The value is the propagation delay over the local link
    expected by the neighbor.";
                          }
    
                          leaf t-bit {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type boolean;
                            description
                              "'true' if the T bit is set in the LAN Prune Delay option
    in the last Hello message from the neighbor.  This flag
    indicates the neighbor's ability to disable Join
    message suppression.";
                          }
                        }  // container lan-prune-delay
    
                        leaf up-time {
                          type rt-types:timeticks64;
                          description
                            "The number of time ticks (hundredths of a second) since
    the neighbor relationship has been formed as reachable
    without being timed out.";
                        }
                      }  // list ipv4-neighbor
    
                      list ipv6-neighbor {
                        when
                          "../../address-family = 'rt:ipv6'" {
                          description
                            "Only applicable to an IPv6 address family.";
                        }
                        key "address";
                        description
                          "Neighbor state information.";
                        leaf address {
                          type inet:ipv6-address;
                          description
                            "Neighbor address.";
                        }
    
                        leaf bfd-state {
                          type bfd-types:state;
                          description
                            "BFD (Bidirectional Forwarding Detection) status.";
                        }
    
                        leaf expiration {
                          type rt-types:timer-value-seconds16;
                          description
                            "Neighbor expiration time.";
                        }
    
                        leaf dr-priority {
                          type uint32;
                          description
                            "DR (Designated Router) priority as the preference in the DR
    election process.";
                        }
    
                        leaf gen-id {
                          type uint32;
                          description
                            "The value of the Generation ID in the last Hello message
    from the neighbor.";
                        }
    
                        container lan-prune-delay {
                          description
                            "The information of the LAN Prune Delay option in the Hello
    message from the neighbor.";
                          leaf present {
                            type boolean;
                            description
                              "'true' if the LAN Prune Delay option is present in the
    last Hello message from the neighbor.";
                          }
    
                          leaf override-interval {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type uint16;
                            units "milliseconds";
                            description
                              "The value of the Override_Interval field of the LAN Prune
    Delay option in the last Hello message from the neighbor.
    The neighbor uses this value to indicate a short period
    after a Join or Prune to allow other routers on the LAN
    to override the Join or Prune.";
                          }
    
                          leaf propagation-delay {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type uint16;
                            units "milliseconds";
                            description
                              "The value of the Propagation_Delay field of the LAN Prune
    Delay option in the last Hello message from the neighbor.
    The value is the propagation delay over the local link
    expected by the neighbor.";
                          }
    
                          leaf t-bit {
                            when
                              "../present = 'true'" {
                              description
                                "Available only when 'leaf present' is 'true'.";
                            }
                            type boolean;
                            description
                              "'true' if the T bit is set in the LAN Prune Delay option
    in the last Hello message from the neighbor.  This flag
    indicates the neighbor's ability to disable Join
    message suppression.";
                          }
                        }  // container lan-prune-delay
    
                        leaf up-time {
                          type rt-types:timeticks64;
                          description
                            "The number of time ticks (hundredths of a second) since
    the neighbor relationship has been formed as reachable
    without being timed out.";
                        }
                      }  // list ipv6-neighbor
                    }  // container neighbors
    
                    container bidir {
                      presence
                        "Present to enable BIDIR mode.";
                      description
                        "PIM BIDIR configuration data.";
                      container df-election {
                        if-feature intf-df-election;
                        description
                          "DF election attributes.";
                        leaf offer-multiplier {
                          type uint8;
                          description
                            "This is number of transmission attempts for DF election
    messages.
    When a DF election Offer or Winner message fails to be
    received, the message is retransmitted.
    The offer-multiplier sets the minimum number of DF
    election messages that MUST fail to be received for DF
    election to fail.
    If a router receives from a neighbor a better offer than
    its own, the router stops participating in the election
    for a period of offer-multiplier * offer-interval.
    Eventually, all routers except the best candidate stop
    sending Offer messages.";
                        }
                      }  // container df-election
                    }  // container bidir
    
                    container sm {
                      presence
                        "Present to enable sparse-mode.";
                      description
                        "PIM SM configuration data.";
                      leaf passive {
                        type empty;
                        description
                          "Specifies that no PIM messages are sent or accepted on
    this PIM interface, but the interface can be included in a
    multicast forwarding entry.";
                      }
                    }  // container sm
    
                    container dm {
                      presence
                        "Present to enable dense-mode.";
                      description
                        "PIM DM configuration data.";
                    }  // container dm
                  }  // list address-family
                }  // list interface
              }  // container interfaces
            }  // container pim
    
            container pim {
              presence
                "Container for PIM protocol.";
              description
                "PIM configuration data.";
              container graceful-restart {
                description
                  "Container of graceful restart attributes.";
                leaf enabled {
                  type boolean;
                  description
                    "Enable or disable graceful restart.";
                }
    
                leaf duration {
                  type uint16;
                  units "seconds";
                  description
                    "Maximum time for graceful restart to finish.";
                }
              }  // container graceful-restart
    
              list address-family {
                key "address-family";
                description
                  "Each list entry for one address family.";
                leaf address-family {
                  type identityref {
                    base address-family;
                  }
                  mandatory true;
                  description "Address family.";
                }
    
                container graceful-restart {
                  description
                    "Container of graceful restart attributes.";
                  leaf enabled {
                    type boolean;
                    description
                      "Enable or disable graceful restart.";
                  }
    
                  leaf duration {
                    type uint16;
                    units "seconds";
                    description
                      "Maximum time for graceful restart to finish.";
                  }
                }  // container graceful-restart
              }  // list address-family
    
              container interfaces {
                description
                  "Containing a list of interfaces.";
                list interface {
                  key "interface";
                  description
                    "List of pim interfaces.";
                  leaf interface {
                    type if:interface-ref;
                    description
                      "Reference to an entry in the global interface
    list.";
                  }
    
                  list address-family {
                    key "address-family";
                    description
                      "Each list entry for one address family.";
                    leaf address-family {
                      type identityref {
                        base address-family;
                      }
                      mandatory true;
                      description
                        "Address family.";
                    }
    
                    container bfd {
                      if-feature bfd;
                      description
                        "BFD (Bidirectional Forwarding Detection) operation.";
                      leaf enable {
                        type boolean;
                        description
                          "'true' to suppport BFD for the interface.";
                      }
                    }  // container bfd
    
                    leaf dr-priority {
                      if-feature intf-dr-priority;
                      type uint32;
                      description
                        "DR (Designated Router) priority";
                    }
    
                    leaf hello-interval {
                      if-feature intf-hello-interval;
                      type timer-value;
                      description
                        "Hello interval";
                    }
    
                    choice hello-holdtime-or-multiplier {
                      description
                        "Use holdtime or multiplier";
                      case holdtime {
                        if-feature intf-hello-holdtime;
                        leaf hello-holdtime {
                          type timer-value;
                          description
                            "Hello holdtime";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-hello-multiplier;
                        leaf hello-multiplier {
                          type rt-types:timer-multiplier;
                          description
                            "Hello multiplier is the number by which the hello
    interval is multplied to obtain the hold time";
                        }
                      }  // case multiplier
                    }  // choice hello-holdtime-or-multiplier
    
                    leaf jp-interval {
                      if-feature intf-jp-interval;
                      type timer-value;
                      description
                        "Join prune interval";
                    }
    
                    choice jp-holdtime-or-multiplier {
                      description
                        "Use holdtime or multiplier";
                      case holdtime {
                        if-feature intf-jp-holdtime;
                        leaf jp-holdtime {
                          type timer-value;
                          description
                            "Join prune holdtime";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-jp-multiplier;
                        leaf jp-multiplier {
                          type rt-types:timer-multiplier;
                          description
                            "Join prune multiplier is the number by which the join
    prune interval is multplied to obtain the hold time";
                        }
                      }  // case multiplier
                    }  // choice jp-holdtime-or-multiplier
    
                    leaf propagation-delay {
                      if-feature intf-propagation-delay;
                      type uint16;
                      units "milliseconds";
                      description
                        "Propagation description";
                    }
    
                    leaf override-interval {
                      if-feature intf-override-interval;
                      type uint16;
                      units "milliseconds";
                      description
                        "Override interval";
                    }
                  }  // list address-family
                }  // list interface
              }  // container interfaces
            }  // container pim
          }  // container control-plane-protocols
    
          container ribs {
            description "Support for RIBs.";
            list rib {
              key "name";
              description
                "Each entry contains a configuration for a RIB identified
    by the 'name' key.
    
    Entries having the same key as a system-controlled entry
    in the list '/routing/ribs/rib' are used for
    configuring parameters of that entry.  Other entries
    define additional user-controlled RIBs.";
              leaf name {
                type string;
                description
                  "The name of the RIB.
    
    For system-controlled entries, the value of this leaf
    must be the same as the name of the corresponding entry
    in the operational state.
    
    For user-controlled entries, an arbitrary name can be
    used.";
              }
    
              leaf address-family {
                type identityref {
                  base address-family;
                }
                mandatory true;
                description "Address family.";
              }
    
              leaf default-rib {
                if-feature multiple-ribs;
                type boolean;
                default "true";
                config false;
                description
                  "This flag has the value of 'true' if and only if the RIB
    is the default RIB for the given address family.
    
    By default, control-plane protocols place their routes
    in the default RIBs.";
              }
    
              container routes {
                config false;
                description
                  "Current contents of the RIB.";
                list route {
                  description
                    "A RIB route entry.  This data node MUST be augmented
    with information specific to routes of each address
    family.";
                  leaf route-preference {
                    type route-preference;
                    description
                      "This route attribute, also known as 'administrative
    distance', allows for selecting the preferred route
    among routes with the same destination prefix.  A
    smaller value indicates a route that is
    more preferred.";
                  }
    
                  container next-hop {
                    description
                      "Route's next-hop attribute.";
                    choice next-hop-options {
                      mandatory true;
                      description
                        "Options for next hops.
    
    It is expected that further cases will be added through
    augments from other modules, e.g., for recursive
    next hops.";
                      case simple-next-hop {
                        description
                          "This case represents a simple next hop consisting of the
    next-hop address and/or outgoing interface.
    
    Modules for address families MUST augment this case with a
    leaf containing a next-hop address of that address
    family.";
                        leaf outgoing-interface {
                          type if:interface-ref;
                          description
                            "Name of the outgoing interface.";
                        }
                      }  // case simple-next-hop
                      leaf special-next-hop {
                        type enumeration {
                          enum "blackhole" {
                            value 0;
                            description
                              "Silently discard the packet.";
                          }
                          enum "unreachable" {
                            value 1;
                            description
                              "Discard the packet and notify the sender with an error
    message indicating that the destination host is
    unreachable.";
                          }
                          enum "prohibit" {
                            value 2;
                            description
                              "Discard the packet and notify the sender with an error
    message indicating that the communication is
    administratively prohibited.";
                          }
                          enum "receive" {
                            value 3;
                            description
                              "The packet will be received by the local system.";
                          }
                        }
                        description
                          "Options for special next hops.";
                      }
                      container next-hop-list {
                        description
                          "Container for multiple next hops.";
                        list next-hop {
                          description
                            "An entry in a next-hop list.
    
    Modules for address families MUST augment this list
    with a leaf containing a next-hop address of that
    address family.";
                          leaf outgoing-interface {
                            type if:interface-ref;
                            description
                              "Name of the outgoing interface.";
                          }
                        }  // list next-hop
                      }  // container next-hop-list
                    }  // choice next-hop-options
                  }  // container next-hop
    
                  leaf source-protocol {
                    type identityref {
                      base routing-protocol;
                    }
                    mandatory true;
                    description
                      "Type of the routing protocol from which the route
    originated.";
                  }
    
                  leaf active {
                    type empty;
                    description
                      "The presence of this leaf indicates that the route is
    preferred among all routes in the same RIB that have the
    same destination prefix.";
                  }
    
                  leaf last-updated {
                    type yang:date-and-time;
                    description
                      "Timestamp of the last modification of the route.  If the
    route was never modified, it is the time when the route was
    inserted into the RIB.";
                  }
    
                  leaf metric {
                    type uint32;
                    description
                      "OSPF route metric.";
                  }
    
                  leaf tag {
                    type uint32;
                    default "0";
                    description
                      "OSPF route tag.";
                  }
    
                  leaf route-type {
                    type route-type;
                    description
                      "OSPF route type.";
                  }
                }  // list route
              }  // container routes
    
              action active-route {
                description
                  "Return the active RIB route that is used for the
    destination address.
    
    Address-family-specific modules MUST augment input
    parameters with a leaf named 'destination-address'.";
                output {
                  container route {
                    description
                      "The active RIB route for the specified destination.
    
    If no route exists in the RIB for the destination
    address, no output is returned.
    
    Address-family-specific modules MUST augment this
    container with appropriate route contents.";
                    container next-hop {
                      description
                        "Route's next-hop attribute.";
                      choice next-hop-options {
                        mandatory true;
                        description
                          "Options for next hops.
    
    It is expected that further cases will be added through
    augments from other modules, e.g., for recursive
    next hops.";
                        case simple-next-hop {
                          description
                            "This case represents a simple next hop consisting of the
    next-hop address and/or outgoing interface.
    
    Modules for address families MUST augment this case with a
    leaf containing a next-hop address of that address
    family.";
                          leaf outgoing-interface {
                            type if:interface-ref;
                            description
                              "Name of the outgoing interface.";
                          }
                        }  // case simple-next-hop
                        leaf special-next-hop {
                          type enumeration {
                            enum "blackhole" {
                              value 0;
                              description
                                "Silently discard the packet.";
                            }
                            enum "unreachable" {
                              value 1;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the destination host is
    unreachable.";
                            }
                            enum "prohibit" {
                              value 2;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the communication is
    administratively prohibited.";
                            }
                            enum "receive" {
                              value 3;
                              description
                                "The packet will be received by the local system.";
                            }
                          }
                          description
                            "Options for special next hops.";
                        }
                        container next-hop-list {
                          description
                            "Container for multiple next hops.";
                          list next-hop {
                            description
                              "An entry in a next-hop list.
    
    Modules for address families MUST augment this list
    with a leaf containing a next-hop address of that
    address family.";
                            leaf outgoing-interface {
                              type if:interface-ref;
                              description
                                "Name of the outgoing interface.";
                            }
                          }  // list next-hop
                        }  // container next-hop-list
                      }  // choice next-hop-options
                    }  // container next-hop
    
                    leaf source-protocol {
                      type identityref {
                        base routing-protocol;
                      }
                      mandatory true;
                      description
                        "Type of the routing protocol from which the route
    originated.";
                    }
    
                    leaf active {
                      type empty;
                      description
                        "The presence of this leaf indicates that the route is
    preferred among all routes in the same RIB that have the
    same destination prefix.";
                    }
    
                    leaf last-updated {
                      type yang:date-and-time;
                      description
                        "Timestamp of the last modification of the route.  If the
    route was never modified, it is the time when the route was
    inserted into the RIB.";
                    }
                  }  // container route
                }
              }  // rpc active-route
    
              leaf description {
                type string;
                description
                  "Textual description of the RIB.";
              }
            }  // list rib
          }  // container ribs
    
          container segment-routing {
            description
              "Segment Routing configuration.  This container
    is to be augmented by models for different SR
    data planes.";
            reference
              "RFC 8402: Segment Routing Architecture.";
    
            container sr-mpls {
              description
                "Segment Routing global configuration and
    operational state.";
              container bindings {
                description "List of bindings.";
                container mapping-server {
                  if-feature mapping-server;
                  description
                    "Configuration of mapping-server local entries.";
                  list policy {
                    key "name";
                    description
                      "List mapping-server policies.";
                    leaf name {
                      type string;
                      description
                        "Name of the mapping policy.";
                    }
    
                    container entries {
                      description
                        "IPv4/IPv6 mapping entries.";
                      list mapping-entry {
                        key "prefix algorithm";
                        description
                          "Mapping entries.";
                        leaf prefix {
                          type inet:ip-prefix;
                          description
                            "Connected Prefix-SID.";
                        }
    
                        leaf value-type {
                          type enumeration {
                            enum "index" {
                              value 0;
                              description
                                "The value will be interpreted as an index.";
                            }
                            enum "absolute" {
                              value 1;
                              description
                                "The value will become interpreted as an absolute
    value.";
                            }
                          }
                          default "index";
                          description
                            "This leaf defines how the value must be interpreted.";
                        }
    
                        leaf start-sid {
                          type uint32;
                          mandatory true;
                          description
                            "Value associated with prefix.  The value must be
    interpreted in the context of sid-value-type.";
                        }
    
                        leaf range {
                          type uint32;
                          description
                            "Indicates how many SIDs can be allocated.";
                        }
    
                        leaf algorithm {
                          type identityref {
                            base prefix-sid-algorithm;
                          }
                          description
                            "Prefix-SID algorithm.";
                        }
                      }  // list mapping-entry
                    }  // container entries
                  }  // list policy
                }  // container mapping-server
    
                container connected-prefix-sid-map {
                  description
                    "Prefix-SID configuration.";
                  list connected-prefix-sid {
                    key "prefix algorithm";
                    description
                      "List of mappings of Prefix-SIDs to IPv4/IPv6
    local prefixes.";
                    leaf prefix {
                      type inet:ip-prefix;
                      description
                        "Connected Prefix-SID.";
                    }
    
                    leaf value-type {
                      type enumeration {
                        enum "index" {
                          value 0;
                          description
                            "The value will be interpreted as an index.";
                        }
                        enum "absolute" {
                          value 1;
                          description
                            "The value will become interpreted as an absolute
    value.";
                        }
                      }
                      default "index";
                      description
                        "This leaf defines how the value must be interpreted.";
                    }
    
                    leaf start-sid {
                      type uint32;
                      mandatory true;
                      description
                        "Value associated with prefix.  The value must be
    interpreted in the context of sid-value-type.";
                    }
    
                    leaf range {
                      type uint32;
                      description
                        "Indicates how many SIDs can be allocated.";
                    }
    
                    leaf algorithm {
                      type identityref {
                        base prefix-sid-algorithm;
                      }
                      description
                        "Prefix-SID algorithm.";
                    }
    
                    leaf last-hop-behavior {
                      if-feature sid-last-hop-behavior;
                      type enumeration {
                        enum "explicit-null" {
                          value 0;
                          description
                            "Use explicit-null for the SID.";
                        }
                        enum "no-php" {
                          value 1;
                          description
                            "Do not use MPLS Penultimate Hop Popping (PHP)
    for the SID.";
                        }
                        enum "php" {
                          value 2;
                          description
                            "Use MPLS PHP for the SID.";
                        }
                      }
                      description
                        "Configure last-hop behavior.";
                    }
                  }  // list connected-prefix-sid
                }  // container connected-prefix-sid-map
    
                container local-prefix-sid {
                  description
                    "Local SID configuration.";
                  list local-prefix-sid {
                    key "prefix algorithm";
                    description
                      "List of local IPv4/IPv6 Prefix-SIDs.";
                    leaf prefix {
                      type inet:ip-prefix;
                      description
                        "Connected Prefix-SID.";
                    }
    
                    leaf value-type {
                      type enumeration {
                        enum "index" {
                          value 0;
                          description
                            "The value will be interpreted as an index.";
                        }
                        enum "absolute" {
                          value 1;
                          description
                            "The value will become interpreted as an absolute
    value.";
                        }
                      }
                      default "index";
                      description
                        "This leaf defines how the value must be interpreted.";
                    }
    
                    leaf start-sid {
                      type uint32;
                      mandatory true;
                      description
                        "Value associated with prefix.  The value must be
    interpreted in the context of sid-value-type.";
                    }
    
                    leaf range {
                      type uint32;
                      description
                        "Indicates how many SIDs can be allocated.";
                    }
    
                    leaf algorithm {
                      type identityref {
                        base prefix-sid-algorithm;
                      }
                      description
                        "Prefix-SID algorithm.";
                    }
                  }  // list local-prefix-sid
                }  // container local-prefix-sid
              }  // container bindings
    
              container srgb {
                description
                  "Global SRGB configuration.";
                list srgb {
                  key "lower-bound upper-bound";
                  ordered-by user;
                  description
                    "List of global blocks to be advertised.";
                  leaf lower-bound {
                    type uint32;
                    description
                      "Lower value in the label range.";
                  }
    
                  leaf upper-bound {
                    type uint32;
                    must
                      "../lower-bound < ../upper-bound" {
                      error-message
                        "The upper-bound must be greater than the lower-bound.";
                      description
                        "The value must be greater than lower-bound.";
                    }
                    description
                      "Upper value in the label range.";
                  }
                }  // list srgb
              }  // container srgb
    
              container srlb {
                description
                  "Segment Routing Local Block (SRLB) configuration.";
                list srlb {
                  key "lower-bound upper-bound";
                  ordered-by user;
                  description "List of SRLBs.";
                  leaf lower-bound {
                    type uint32;
                    description
                      "Lower value in the label range.";
                  }
    
                  leaf upper-bound {
                    type uint32;
                    must
                      "../lower-bound < ../upper-bound" {
                      error-message
                        "The upper-bound must be greater than the lower-bound.";
                      description
                        "The value must be greater than lower-bound.";
                    }
                    description
                      "Upper value in the label range.";
                  }
                }  // list srlb
              }  // container srlb
    
              list label-blocks {
                config false;
                description
                  "List of label blocks currently in use.";
                leaf lower-bound {
                  type uint32;
                  description
                    "Lower bound of the label block.";
                }
    
                leaf upper-bound {
                  type uint32;
                  description
                    "Upper bound of the label block.";
                }
    
                leaf size {
                  type uint32;
                  description
                    "Number of indexes in the block.";
                }
    
                leaf free {
                  type uint32;
                  description
                    "Number of free indexes in the block.";
                }
    
                leaf used {
                  type uint32;
                  description
                    "Number of indexes in use in the block.";
                }
    
                leaf scope {
                  type enumeration {
                    enum "global" {
                      value 0;
                      description "Global SID.";
                    }
                    enum "local" {
                      value 1;
                      description "Local SID.";
                    }
                  }
                  description
                    "Scope of this label block.";
                }
              }  // list label-blocks
    
              container sid-db {
                config false;
                description
                  "List of prefix and SID associations.";
                list sid {
                  key "target sid source source-protocol binding-type";
                  description "SID binding.";
                  leaf target {
                    type string;
                    description
                      "Defines the target of the binding.  It can be a
    prefix or something else.";
                  }
    
                  leaf sid {
                    type uint32;
                    description
                      "Index associated with the prefix.";
                  }
    
                  leaf algorithm {
                    type uint8;
                    description
                      "Algorithm to be used for the Prefix-SID.";
                    reference
                      "RFC 8665: OSPF Extensions for Segment Routing
                       RFC 8667: IS-IS Extensions for Segment
                      	  Routing
                       RFC 8669: Segment Routing Prefix Segment
                      	  Identifier Extensions to BGP";
    
                  }
    
                  leaf source {
                    type inet:ip-address;
                    description
                      "IP address of the router that owns the binding.";
                  }
    
                  leaf used {
                    type boolean;
                    description
                      "Indicates if the binding is installed in the
    forwarding plane.";
                  }
    
                  leaf source-protocol {
                    type leafref {
                      path "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/rt:name";
                    }
                    description
                      "Routing protocol that owns the binding.";
                  }
    
                  leaf binding-type {
                    type enumeration {
                      enum "prefix-sid" {
                        value 0;
                        description
                          "Binding is learned from a Prefix-SID.";
                      }
                      enum "binding-tlv" {
                        value 1;
                        description
                          "Binding is learned from a binding TLV.";
                      }
                    }
                    description
                      "Type of binding.";
                  }
    
                  leaf scope {
                    type enumeration {
                      enum "global" {
                        value 0;
                        description
                          "Global SID.";
                      }
                      enum "local" {
                        value 1;
                        description "Local SID.";
                      }
                    }
                    description "SID scoping.";
                  }
                }  // list sid
              }  // container sid-db
            }  // container sr-mpls
          }  // container segment-routing
        }  // container routing
    
        container routing-state {
          config false;
          status obsolete;
          description
            "State data of the routing subsystem.";
          leaf router-id {
            type yang:dotted-quad;
            description
              "A 32-bit number in the form of a dotted quad that is used by
    some routing protocols identifying a router.";
            reference
              "RFC 2328: OSPF Version 2";
    
          }
    
          container interfaces {
            status obsolete;
            description
              "Network-layer interfaces used for routing.";
            leaf-list interface {
              type if:interface-state-ref;
              status obsolete;
              description
                "Each entry is a reference to the name of a configured
    network-layer interface.";
            }
          }  // container interfaces
    
          container control-plane-protocols {
            status obsolete;
            description
              "Container for the list of routing protocol instances.";
            list control-plane-protocol {
              key "type name";
              status obsolete;
              description
                "State data of a control-plane protocol instance.
    
    An implementation MUST provide exactly one
    system-controlled instance of the 'direct'
    pseudo-protocol.  Instances of other control-plane
    protocols MAY be created by configuration.";
              leaf type {
                type identityref {
                  base control-plane-protocol;
                }
                status obsolete;
                description
                  "Type of the control-plane protocol.";
              }
    
              leaf name {
                type string;
                status obsolete;
                description
                  "The name of the control-plane protocol instance.
    
    For system-controlled instances, this name is
    persistent, i.e., it SHOULD NOT change across
    reboots.";
              }
            }  // list control-plane-protocol
    
            container pim {
              description "PIM state data.";
              list address-family {
                key "address-family";
                description
                  "Each list entry for one address family.";
                leaf address-family {
                  type identityref {
                    base address-family;
                  }
                  mandatory true;
                  description "Address family.";
                }
    
                container statistics {
                  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 statistic 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
                      "Containing error statistics.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of assert messages.";
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of BSR (Bootstrap Router) messages.";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate-RP-advertisement messages.";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages.";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of hello messages.";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of join/prune messages.";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of register messages.";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of register stop messages.";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of state refresh messages.";
                    }
                  }  // container error
    
                  container queue {
                    description
                      "Containing queue statistics.";
                    leaf size {
                      type uint32;
                      description
                        "The size of the input queue.";
                    }
    
                    leaf overflow {
                      type yang:counter32;
                      description
                        "The number of the input queue overflows.";
                    }
                  }  // container queue
    
                  container received {
                    description
                      "Containing statistics of received messages.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of assert messages.";
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of BSR (Bootstrap Router) messages.";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate-RP-advertisement messages.";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages.";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of hello messages.";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of join/prune messages.";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of register messages.";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of register stop messages.";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of state refresh messages.";
                    }
                  }  // container received
    
                  container sent {
                    description
                      "Containing statistics of sent messages.";
                    leaf assert {
                      type yang:counter64;
                      description
                        "The number of assert messages.";
                    }
    
                    leaf bsr {
                      type yang:counter64;
                      description
                        "The number of BSR (Bootstrap Router) messages.";
                    }
    
                    leaf candidate-rp-advertisement {
                      type yang:counter64;
                      description
                        "The number of Candidate-RP-advertisement messages.";
                    }
    
                    leaf df-election {
                      type yang:counter64;
                      description
                        "The number of DF (Designated Forwarder) election messages.";
                    }
    
                    leaf hello {
                      type yang:counter64;
                      description
                        "The number of hello messages.";
                    }
    
                    leaf join-prune {
                      type yang:counter64;
                      description
                        "The number of join/prune messages.";
                    }
    
                    leaf register {
                      type yang:counter64;
                      description
                        "The number of register messages.";
                    }
    
                    leaf register-stop {
                      type yang:counter64;
                      description
                        "The number of register stop messages.";
                    }
    
                    leaf state-refresh {
                      type yang:counter64;
                      description
                        "The number of state refresh messages.";
                    }
                  }  // container sent
                }  // container statistics
    
                container topology-tree-info {
                  description
                    "Containing topology tree information.";
                  list ipv4-route {
                    when
                      "../../../address-family = 'rt:ipv4'" {
                      description
                        "Only applicable to IPv4 address family.";
                    }
                    key "group source-address is-rpt";
                    description
                      "A list of IPv4 routes.";
                    leaf group {
                      type rt-types:ipv4-multicast-group-address;
                      description
                        "Group address.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv4-multicast-source-address;
                      description
                        "Source address.";
                    }
    
                    leaf is-rpt {
                      type boolean;
                      description
                        "'true' if the tree is RPT (Rendezvous-Point Tree).";
                    }
    
                    leaf expiration {
                      type timer-value;
                      description
                        "When the route will expire.";
                    }
    
                    leaf incoming-interface {
                      type if:interface-ref;
                      description
                        "Reference to an entry in the global interface
    list.";
                    }
    
                    leaf mode {
                      type pim-mode;
                      description "PIM mode.";
                    }
    
                    leaf msdp-learned {
                      type boolean;
                      description
                        "'true' if route is learned from MSDP (Multicast Source
     Discovery Protocol).";
                    }
    
                    leaf rp-address {
                      type inet:ip-address;
                      description
                        "RP (Rendezvous Point) address.";
                    }
    
                    leaf rpf-neighbor {
                      type inet:ip-address;
                      description
                        "RPF (Reverse Path Forwarding) neighbor address.";
                    }
    
                    leaf spt-bit {
                      type boolean;
                      description
                        "'true' if SPT (Shortest Path Tree) bit is set.";
                    }
    
                    leaf up-time {
                      type uint32;
                      units "seconds";
                      description
                        "Up time duration.";
                    }
    
                    list outgoing-interface {
                      key "name";
                      description
                        "A list of outgoing interfaces.";
                      leaf name {
                        type if:interface-ref;
                        description
                          "Interface name.";
                      }
    
                      leaf expiration {
                        type timer-value;
                        description
                          "Expiring information.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        description
                          "Up time duration.";
                      }
    
                      leaf jp-state {
                        type enumeration {
                          enum "no-info" {
                            value 0;
                            description
                              "The interface has Join state and no timers running";
                          }
                          enum "join" {
                            value 1;
                            description
                              "The interface has Join state.";
                          }
                          enum "prune-pending" {
                            value 2;
                            description
                              "The router has received a Prune on this interface from
    a downstream neighbor and is waiting to see whether
    the prune will be overridden by another downstream
    router.  For forwarding purposes, the Prune-Pending
    state functions exactly like the Join state.";
                          }
                        }
                        description
                          "Join-prune state.";
                      }
                    }  // list outgoing-interface
                  }  // list ipv4-route
    
                  list ipv6-route {
                    when
                      "../../../address-family = 'rt:ipv6'" {
                      description
                        "Only applicable to IPv6 address family.";
                    }
                    key "group source-address is-rpt";
                    description
                      "A list of IPv6 routes.";
                    leaf group {
                      type rt-types:ipv6-multicast-group-address;
                      description
                        "Group address.";
                    }
    
                    leaf source-address {
                      type rt-types:ipv6-multicast-source-address;
                      description
                        "Source address.";
                    }
    
                    leaf is-rpt {
                      type boolean;
                      description
                        "'true' if the tree is RPT (Rendezvous-Point Tree).";
                    }
    
                    leaf expiration {
                      type timer-value;
                      description
                        "When the route will expire.";
                    }
    
                    leaf incoming-interface {
                      type if:interface-ref;
                      description
                        "Reference to an entry in the global interface
    list.";
                    }
    
                    leaf mode {
                      type pim-mode;
                      description "PIM mode.";
                    }
    
                    leaf msdp-learned {
                      type boolean;
                      description
                        "'true' if route is learned from MSDP (Multicast Source
     Discovery Protocol).";
                    }
    
                    leaf rp-address {
                      type inet:ip-address;
                      description
                        "RP (Rendezvous Point) address.";
                    }
    
                    leaf rpf-neighbor {
                      type inet:ip-address;
                      description
                        "RPF (Reverse Path Forwarding) neighbor address.";
                    }
    
                    leaf spt-bit {
                      type boolean;
                      description
                        "'true' if SPT (Shortest Path Tree) bit is set.";
                    }
    
                    leaf up-time {
                      type uint32;
                      units "seconds";
                      description
                        "Up time duration.";
                    }
    
                    list outgoing-interface {
                      key "name";
                      description
                        "A list of outgoing interfaces.";
                      leaf name {
                        type if:interface-ref;
                        description
                          "Interface name.";
                      }
    
                      leaf expiration {
                        type timer-value;
                        description
                          "Expiring information.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        description
                          "Up time duration.";
                      }
    
                      leaf jp-state {
                        type enumeration {
                          enum "no-info" {
                            value 0;
                            description
                              "The interface has Join state and no timers running";
                          }
                          enum "join" {
                            value 1;
                            description
                              "The interface has Join state.";
                          }
                          enum "prune-pending" {
                            value 2;
                            description
                              "The router has received a Prune on this interface from
    a downstream neighbor and is waiting to see whether
    the prune will be overridden by another downstream
    router.  For forwarding purposes, the Prune-Pending
    state functions exactly like the Join state.";
                          }
                        }
                        description
                          "Join-prune state.";
                      }
                    }  // list outgoing-interface
                  }  // list ipv6-route
                }  // container topology-tree-info
    
                container dm {
                  presence
                    "Present to enable dense-mode.";
                  description
                    "PIM DM state data.";
                }  // container dm
              }  // list address-family
    
              container interfaces {
                description
                  "Containing a list of interfaces.";
                list interface {
                  key "interface";
                  description
                    "List of pim interfaces.";
                  leaf interface {
                    type if:interface-ref;
                    description
                      "Reference to an entry in the global interface
    list.";
                  }
    
                  list address-family {
                    key "address-family";
                    description
                      "Each list entry for one address family.";
                    leaf address-family {
                      type identityref {
                        base address-family;
                      }
                      mandatory true;
                      description
                        "Address family.";
                    }
    
                    container bfd {
                      if-feature bfd;
                      description
                        "BFD (Bidirectional Forwarding Detection) operation.";
                      leaf enable {
                        type boolean;
                        description
                          "'true' to suppport BFD for the interface.";
                      }
                    }  // container bfd
    
                    leaf dr-priority {
                      if-feature intf-dr-priority;
                      type uint32;
                      description
                        "DR (Designated Router) priority";
                    }
    
                    leaf hello-interval {
                      if-feature intf-hello-interval;
                      type timer-value;
                      description
                        "Hello interval";
                    }
    
                    choice hello-holdtime-or-multiplier {
                      description
                        "Use holdtime or multiplier";
                      case holdtime {
                        if-feature intf-hello-holdtime;
                        leaf hello-holdtime {
                          type timer-value;
                          description
                            "Hello holdtime";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-hello-multiplier;
                        leaf hello-multiplier {
                          type rt-types:timer-multiplier;
                          description
                            "Hello multiplier is the number by which the hello
    interval is multplied to obtain the hold time";
                        }
                      }  // case multiplier
                    }  // choice hello-holdtime-or-multiplier
    
                    leaf jp-interval {
                      if-feature intf-jp-interval;
                      type timer-value;
                      description
                        "Join prune interval";
                    }
    
                    choice jp-holdtime-or-multiplier {
                      description
                        "Use holdtime or multiplier";
                      case holdtime {
                        if-feature intf-jp-holdtime;
                        leaf jp-holdtime {
                          type timer-value;
                          description
                            "Join prune holdtime";
                        }
                      }  // case holdtime
    
                      case multiplier {
                        if-feature intf-jp-multiplier;
                        leaf jp-multiplier {
                          type rt-types:timer-multiplier;
                          description
                            "Join prune multiplier is the number by which the join
    prune interval is multplied to obtain the hold time";
                        }
                      }  // case multiplier
                    }  // choice jp-holdtime-or-multiplier
    
                    leaf propagation-delay {
                      if-feature intf-propagation-delay;
                      type uint16;
                      units "milliseconds";
                      description
                        "Propagation description";
                    }
    
                    leaf override-interval {
                      if-feature intf-override-interval;
                      type uint16;
                      units "milliseconds";
                      description
                        "Override interval";
                    }
    
                    container ipv4 {
                      when
                        "../address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to IPv4 address family.";
                      }
                      description
                        "Interface state attributes for IPv4.";
                      leaf-list address {
                        type inet:ipv4-address;
                        description
                          "List of addresses.";
                      }
    
                      leaf dr-address {
                        type inet:ipv4-address;
                        description
                          "DR (Designated Router) address.";
                      }
                    }  // container ipv4
    
                    container ipv6 {
                      when
                        "../address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to IPv6 address family.";
                      }
                      description
                        "Interface state attributes for IPv6.";
                      leaf-list address {
                        type inet:ipv6-address;
                        description
                          "List of addresses.";
                      }
    
                      leaf dr-address {
                        type inet:ipv6-address;
                        description
                          "DR (Designated Router) address.";
                      }
                    }  // container ipv6
    
                    leaf oper-status {
                      type enumeration {
                        enum "up" {
                          value 0;
                          description
                            "Ready to pass packets.";
                        }
                        enum "down" {
                          value 1;
                          description
                            "The interface does not pass any packets.";
                        }
                      }
                      description
                        "Operational status.";
                    }
    
                    leaf hello-expiration {
                      type timer-value;
                      description
                        "Hello interval expiration time.";
                    }
    
                    list neighbor-ipv4 {
                      when
                        "../address-family = 'rt:ipv4'" {
                        description
                          "Only applicable to IPv4 address family.";
                      }
                      key "address";
                      description
                        "Neighbor state information.";
                      leaf address {
                        type inet:ipv4-address;
                        description
                          "Neighbor address.";
                      }
    
                      leaf bfd-status {
                        type enumeration {
                          enum "up" {
                            value 0;
                            description
                              "BFD (Bidirectional Forwarding Detection) is up.";
                          }
                          enum "down" {
                            value 1;
                            description
                              "BFD (Bidirectional Forwarding Detection) is down.";
                          }
                        }
                        description
                          "BFD (Bidirectional Forwarding Detection) status.";
                      }
    
                      leaf expiration {
                        type timer-value;
                        description
                          "Neighbor expiring information.";
                      }
    
                      leaf dr-priority {
                        type uint32;
                        description
                          "DR (Designated Router) priority";
                      }
    
                      leaf gen-id {
                        type uint32;
                        description
                          "Generation ID.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        description
                          "Up time duration.";
                      }
                    }  // list neighbor-ipv4
    
                    list neighbor-ipv6 {
                      when
                        "../address-family = 'rt:ipv6'" {
                        description
                          "Only applicable to IPv6 address family.";
                      }
                      key "address";
                      description
                        "Neighbor state information.";
                      leaf address {
                        type inet:ipv6-address;
                        description
                          "Neighbor address.";
                      }
    
                      leaf bfd-status {
                        type enumeration {
                          enum "up" {
                            value 0;
                            description
                              "BFD (Bidirectional Forwarding Detection) is up.";
                          }
                          enum "down" {
                            value 1;
                            description
                              "BFD (Bidirectional Forwarding Detection) is down.";
                          }
                        }
                        description
                          "BFD (Bidirectional Forwarding Detection) status.";
                      }
    
                      leaf expiration {
                        type timer-value;
                        description
                          "Neighbor expiring information.";
                      }
    
                      leaf dr-priority {
                        type uint32;
                        description
                          "DR (Designated Router) priority";
                      }
    
                      leaf gen-id {
                        type uint32;
                        description
                          "Generation ID.";
                      }
    
                      leaf up-time {
                        type uint32;
                        units "seconds";
                        description
                          "Up time duration.";
                      }
                    }  // list neighbor-ipv6
    
                    container dm {
                      presence
                        "Present to enable dense-mode.";
                      description
                        "PIM DM state data.";
                    }  // container dm
                  }  // list address-family
                }  // list interface
              }  // container interfaces
            }  // container pim
          }  // container control-plane-protocols
    
          container ribs {
            status obsolete;
            description "Container for RIBs.";
            list rib {
              key "name";
              min-elements 1;
              status obsolete;
              description
                "Each entry represents a RIB identified by the 'name'
    key.  All routes in a RIB MUST belong to the same address
    family.
    
    An implementation SHOULD provide one system-controlled
    default RIB for each supported address family.";
              leaf name {
                type string;
                status obsolete;
                description
                  "The name of the RIB.";
              }
    
              leaf address-family {
                type identityref {
                  base address-family;
                }
                mandatory true;
                description "Address family.";
              }
    
              leaf default-rib {
                if-feature multiple-ribs;
                type boolean;
                default "true";
                status obsolete;
                description
                  "This flag has the value of 'true' if and only if the
    RIB is the default RIB for the given address family.
    
    By default, control-plane protocols place their routes
    in the default RIBs.";
              }
    
              container routes {
                status obsolete;
                description
                  "Current contents of the RIB.";
                list route {
                  status obsolete;
                  description
                    "A RIB route entry.  This data node MUST be augmented
    with information specific to routes of each address
    family.";
                  leaf route-preference {
                    type route-preference;
                    status obsolete;
                    description
                      "This route attribute, also known as 'administrative
    distance', allows for selecting the preferred route
    among routes with the same destination prefix.  A
    smaller value indicates a route that is
    more preferred.";
                  }
    
                  container next-hop {
                    status obsolete;
                    description
                      "Route's next-hop attribute.";
                    choice next-hop-options {
                      mandatory true;
                      description
                        "Options for next hops.
    
    It is expected that further cases will be added through
    augments from other modules, e.g., for recursive
    next hops.";
                      case simple-next-hop {
                        description
                          "This case represents a simple next hop consisting of the
    next-hop address and/or outgoing interface.
    
    Modules for address families MUST augment this case with a
    leaf containing a next-hop address of that address
    family.";
                        leaf outgoing-interface {
                          type if:interface-ref;
                          description
                            "Name of the outgoing interface.";
                        }
    
                        leaf next-hop-address {
                          type inet:ipv6-address;
                          description
                            "IPv6 address of the next hop.";
                        }
                      }  // case simple-next-hop
                      leaf special-next-hop {
                        type enumeration {
                          enum "blackhole" {
                            value 0;
                            description
                              "Silently discard the packet.";
                          }
                          enum "unreachable" {
                            value 1;
                            description
                              "Discard the packet and notify the sender with an error
    message indicating that the destination host is
    unreachable.";
                          }
                          enum "prohibit" {
                            value 2;
                            description
                              "Discard the packet and notify the sender with an error
    message indicating that the communication is
    administratively prohibited.";
                          }
                          enum "receive" {
                            value 3;
                            description
                              "The packet will be received by the local system.";
                          }
                        }
                        description
                          "Options for special next hops.";
                      }
                      container next-hop-list {
                        description
                          "Container for multiple next hops.";
                        list next-hop {
                          description
                            "An entry in a next-hop list.
    
    Modules for address families MUST augment this list
    with a leaf containing a next-hop address of that
    address family.";
                          leaf outgoing-interface {
                            type if:interface-ref;
                            description
                              "Name of the outgoing interface.";
                          }
    
                          leaf address {
                            type inet:ipv6-address;
                            description
                              "IPv6 address of the next hop.";
                          }
                        }  // list next-hop
                      }  // container next-hop-list
                    }  // choice next-hop-options
                  }  // container next-hop
    
                  leaf source-protocol {
                    type identityref {
                      base routing-protocol;
                    }
                    mandatory true;
                    description
                      "Type of the routing protocol from which the route
    originated.";
                  }
    
                  leaf active {
                    type empty;
                    description
                      "The presence of this leaf indicates that the route is
    preferred among all routes in the same RIB that have the
    same destination prefix.";
                  }
    
                  leaf last-updated {
                    type yang:date-and-time;
                    description
                      "Timestamp of the last modification of the route.  If the
    route was never modified, it is the time when the route was
    inserted into the RIB.";
                  }
    
                  leaf metric {
                    type uint32;
                    description
                      "This leaf describes isis metric of a route.";
                  }
    
                  leaf-list tag {
                    type uint32;
                    description
                      "This leaf describes list of tags associated
    with the route.";
                  }
    
                  leaf route-type {
                    type enumeration {
                      enum "l2-up-internal" {
                        value 0;
                        description
                          "Level 2 internal route
    and not leaked to a lower level";
                      }
                      enum "l1-up-internal" {
                        value 1;
                        description
                          "Level 1 internal route
    and not leaked to a lower level";
                      }
                      enum "l2-up-external" {
                        value 2;
                        description
                          "Level 2 external route
    and not leaked to a lower level";
                      }
                      enum "l1-up-external" {
                        value 3;
                        description
                          "Level 1 external route
    and not leaked to a lower level";
                      }
                      enum "l2-down-internal" {
                        value 4;
                        description
                          "Level 2 internal route
    and leaked to a lower level";
                      }
                      enum "l1-down-internal" {
                        value 5;
                        description
                          "Level 1 internal route
    and leaked to a lower level";
                      }
                      enum "l2-down-external" {
                        value 6;
                        description
                          "Level 2 external route
    and leaked to a lower level";
                      }
                      enum "l1-down-external" {
                        value 7;
                        description
                          "Level 1 external route
    and leaked to a lower level";
                      }
                    }
                    description
                      "This leaf describes the type of isis route.";
                  }
    
                  leaf destination-prefix {
                    type inet:ipv6-prefix;
                    description
                      "IPv6 destination prefix.";
                  }
                }  // list route
              }  // container routes
    
              action active-route {
                status obsolete;
                description
                  "Return the active RIB route that is used for the
    destination address.
    
    Address-family-specific modules MUST augment input
    parameters with a leaf named 'destination-address'.";
                output {
                  container route {
                    status obsolete;
                    description
                      "The active RIB route for the specified
    destination.
    
    If no route exists in the RIB for the destination
    address, no output is returned.
    
    Address-family-specific modules MUST augment this
    container with appropriate route contents.";
                    container next-hop {
                      status obsolete;
                      description
                        "Route's next-hop attribute.";
                      choice next-hop-options {
                        mandatory true;
                        description
                          "Options for next hops.
    
    It is expected that further cases will be added through
    augments from other modules, e.g., for recursive
    next hops.";
                        case simple-next-hop {
                          description
                            "This case represents a simple next hop consisting of the
    next-hop address and/or outgoing interface.
    
    Modules for address families MUST augment this case with a
    leaf containing a next-hop address of that address
    family.";
                          leaf outgoing-interface {
                            type if:interface-ref;
                            description
                              "Name of the outgoing interface.";
                          }
    
                          leaf next-hop-address {
                            type inet:ipv6-address;
                            description
                              "IPv6 address of the next hop.";
                          }
                        }  // case simple-next-hop
                        leaf special-next-hop {
                          type enumeration {
                            enum "blackhole" {
                              value 0;
                              description
                                "Silently discard the packet.";
                            }
                            enum "unreachable" {
                              value 1;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the destination host is
    unreachable.";
                            }
                            enum "prohibit" {
                              value 2;
                              description
                                "Discard the packet and notify the sender with an error
    message indicating that the communication is
    administratively prohibited.";
                            }
                            enum "receive" {
                              value 3;
                              description
                                "The packet will be received by the local system.";
                            }
                          }
                          description
                            "Options for special next hops.";
                        }
                        container next-hop-list {
                          description
                            "Container for multiple next hops.";
                          list next-hop {
                            description
                              "An entry in a next-hop list.
    
    Modules for address families MUST augment this list
    with a leaf containing a next-hop address of that
    address family.";
                            leaf outgoing-interface {
                              type if:interface-ref;
                              description
                                "Name of the outgoing interface.";
                            }
    
                            leaf next-hop-address {
                              type inet:ipv6-address;
                              description
                                "IPv6 address of the next hop.";
                            }
                          }  // list next-hop
                        }  // container next-hop-list
                      }  // choice next-hop-options
                    }  // container next-hop
    
                    leaf source-protocol {
                      type identityref {
                        base routing-protocol;
                      }
                      mandatory true;
                      description
                        "Type of the routing protocol from which the route
    originated.";
                    }
    
                    leaf active {
                      type empty;
                      description
                        "The presence of this leaf indicates that the route is
    preferred among all routes in the same RIB that have the
    same destination prefix.";
                    }
    
                    leaf last-updated {
                      type yang:date-and-time;
                      description
                        "Timestamp of the last modification of the route.  If the
    route was never modified, it is the time when the route was
    inserted into the RIB.";
                    }
    
                    leaf destination-prefix {
                      type inet:ipv6-prefix;
                      description
                        "IPv6 destination prefix.";
                    }
                  }  // container route
                }
    
                input {
                  leaf destination-address {
                    type inet:ipv6-address;
                    description
                      "IPv6 destination address.";
                  }
                }
              }  // rpc active-route
            }  // list rib
          }  // container ribs
        }  // container routing-state
      }  // module ietf-routing
    

© 2023 YumaWorks, Inc. All rights reserved.