Internet-Draft ND YANG model September 2026
Zhang, et al. Expires 5 March 2027 [Page]
Workgroup:
6MAN
Published:
Intended Status:
Standards Track
Expires:
Authors:
F. Zhang
China Telecom
Y. Zhu
China Telecom
B. Wu
Huawei
J. Hu
China Telecom

YANG Data Model for IPv6 Neighbor Discovery

Abstract

This document defines a YANG data model to configure and manage IPv6 Neighbor Discovery (ND) and related functions, including IPv6 address resolution, redirect function, proxy Neighbor Advertisement, Neighbor Unreachability Detection (NUD), Duplicate Address Detection (DAD), and Enhanced Duplicate Address Detection.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 5 March 2027.

Table of Contents

1. Introduction

This document defines a YANG [RFC7950] data model "ietf-ipv6-nd" to configure and manage IPv6 Neighbor Discovery (ND) and related functions, including IPv6 address resolution [RFC4861], redirect function [RFC4861], proxy Neighbor Advertisement [RFC4861], Neighbor Unreachability Detection (NUD) [RFC4861], Duplicate Address Detection (DAD) [RFC4862], and Enhanced Duplicate Address Detection [RFC7527].

Basic neighbor management functionality is supported by the "ietf-ip" YANG data model [RFC8344], and there is already a draft [I-D.ietf-intarea-arp-yang-model] extending the basic ARP YANG functionality to cover optional ARP features and related statistics, which applies only to IPv4. Thus, an extension for IPv6 is required to maintain the IPv6 Neighbor Cache entries.

[RFC4861] specifies the Neighbor Discovery protocol for IPv6, and [RFC4862] specifies related functions. This document covers IPv6 address resolution [RFC4861], redirect function [RFC4861], proxy Neighbor Advertisement [RFC4861], NUD [RFC4861], DAD [RFC4862], and Enhanced DAD [RFC7527]. Other functions, such as Router and Prefix Discovery [RFC4861] are covered by submodule "ietf-ipv6-router-advertisements" in [RFC8349], and static neighbor cache entries and Stateless Address Autoconfiguration [RFC4862] are covered by module "ietf-ip" in [RFC8344].

Neighbor Discovery Optimization for 6LoWPANs [RFC6775] and other related extensions, such as those specified in [RFC8505], [RFC8928], and [RFC9010], are out of scope of this document.

1.1. Terminology

The following terms are defined in [RFC8342]:

  • configuration
  • system state
  • operational state

The following terms are defined in [RFC7950]:

  • augment
  • container
  • data model
  • data node
  • leaf
  • list
  • module
  • schema tree

The following terms are defined in [RFC4861]:

  • Neighbor Discovery
  • Neighbor Advertisement
  • proxy Neighbor Advertisement
  • Neighbor Unreachability Detection

The following term is defined in [RFC4862]:

  • Duplicate Address Detection
  • Stateless Address Autoconfiguration

The following term is defined in [RFC7527]:

  • Enhanced Duplicate Address Detection

1.2. Tree Diagrams

Tree diagrams used in this document follow the notation defined in [RFC8340].

2. Design of the Data Model

The YANG data model for IPv6 ND augments the "ietf-ip" [RFC8344] to provide per-interface configuration and management of IPv6 address resolution and redirect functions based on the IPv6 ND protocol, as well as other related functions, including proxy Neighbor Advertisement, NUD, DAD, and Enhanced DAD.

Note that the features related to ICMP Router and Prefix Discovery are outside the scope of this module, since they have already been defined in the submodule "ietf-ipv6-router-advertisements" [RFC8349]. Static neighbor cache entries and stateless address autoconfiguration [RFC4862] are also out of scope, as they are covered by "ietf-ip"[RFC8344].

2.1. IPv6 Address Resolution and Redirect Function

The data model augments the "/if:interfaces/if:interface/ip:ipv6" path defined in the "ietf-ip" module [RFC8344] for IPv6 ND protocol [RFC4861].

The "retrans-timer" leaf defines the interval of retransmitting Neighbor Solicitation messages when a node tries to learn the link-layer address of another node.

The "redirect" leaf enables the sending of Redirect messages.

The "statistics" container defines a collection of per-interface operational statistics for each type of IPv6 ND messages.

2.2. Neighbor Unreachability Detection

The "reachable-time" leaf defines the time to confirm a neighbor's reachability for NUD. A neighbor's state changes from REACHABLE to STALE when there is no other reachability confirmation from the neighbor within the "reachable-time".

The "retrans-timer" leaf also indicates the interval for retransmitting Neighbor Solicitation messages used by NUD.

2.3. Proxy Neighbor Advertisement

The "proxy-na" leaf augmenting "ietf-ip" [RFC8344] defines the configurations of proxy Neighbor Advertisements [RFC4861], which indicate that a router is willing to accept packets not explicitly addressed to itself. After receiving a Neighbor Solicitation message whose destination address is not its own IPv6 address, a proxy router replies to the source with a Neighbor Advertisement message carrying its own link-layer address and the IPv6 address of the original destination.

2.4. Duplicate Address Detection

The "dup-addr-detect-transmits" leaf, as defined in "ietf-ip" [RFC8344], indicates the number of consecutive Neighbor Solicitation messages sent while performing Duplicate Address Detection (DAD) [RFC4862]. The value of "dup-addr-detect-transmits" can be set to 0 to disable DAD.

The "retrans-timer" leaf also indicates the interval for retransmitting Neighbor Solicitation messages during DAD.

The "enhanced-dad" container augmenting "ietf-ip" [RFC8344] defines the configurations for enhanced DAD [RFC7527], which is used to automatically detect the looped-back IPv6 ND messages used in DAD.

The "auto-resolve" leaf enables automated action when a duplicate is detected. When enabled, a trusted router may log a system management message, drop the received ND message, and block the untrusted IPv6 host nodes from which the duplicate NS (DAD) or NA message was received.

2.5. IPv6 Neighbor Discovery Data Model

This document defines the YANG module "ietf-ipv6-nd", which has the following structure.


module: ietf-ipv6-nd

  augment /if:interfaces/if:interface/ip:ipv6:
    +--rw nd
       +--rw reachable-time?   uint32
       +--rw retrans-timer?    uint32
       +--rw redirect?         boolean
       +--rw proxy-na?         boolean
       +--rw enhanced-dad
       |  +--rw enable?         boolean
       |  +--rw auto-resolve?   boolean
       +--ro statistics
          +--ro ns-stats
          |  +--ro in-pkts?                  yang:counter64
          |  +--ro out-pkts?                 yang:counter64
          |  +--ro drop-pkts?                yang:counter64
          |  +--ro in-unicast-pkts?          yang:counter64
          |  +--ro in-multicast-pkts?        yang:counter64
          |  +--ro out-unicast-pkts?         yang:counter64
          |  +--ro out-multicast-pkts?       yang:counter64
          |  +--ro drop-bad-code-pkts?       yang:counter64
          |  +--ro drop-bad-hoplimit-pkts?   yang:counter64
          |  +--ro drop-bad-len-pkts?        yang:counter64
          |  +--ro drop-bad-option-pkts?     yang:counter64
          |  +--ro drop-checksum-err-pkts?   yang:counter64
          |  +--ro drop-fragmented-pkts?     yang:counter64
          |  +--ro out-nud-pkts?             yang:counter64
          +--ro na-stats
          |  +--ro in-pkts?                  yang:counter64
          |  +--ro out-pkts?                 yang:counter64
          |  +--ro drop-pkts?                yang:counter64
          |  +--ro in-unicast-pkts?          yang:counter64
          |  +--ro in-multicast-pkts?        yang:counter64
          |  +--ro out-unicast-pkts?         yang:counter64
          |  +--ro out-multicast-pkts?       yang:counter64
          |  +--ro drop-bad-code-pkts?       yang:counter64
          |  +--ro drop-bad-hoplimit-pkts?   yang:counter64
          |  +--ro drop-bad-len-pkts?        yang:counter64
          |  +--ro drop-bad-option-pkts?     yang:counter64
          |  +--ro drop-checksum-err-pkts?   yang:counter64
          |  +--ro drop-fragmented-pkts?     yang:counter64
          |  +--ro in-solicited-pkts?        yang:counter64
          |  +--ro in-unsolicited-pkts?      yang:counter64
          |  +--ro in-override-pkts?         yang:counter64
          |  +--ro in-nonoverride-pkts?      yang:counter64
          |  +--ro out-solicited-pkts?       yang:counter64
          |  +--ro out-unsolicited-pkts?     yang:counter64
          |  +--ro out-override-pkts?        yang:counter64
          |  +--ro out-nonoverride-pkts?     yang:counter64
          +--ro rs-stats
          |  +--ro in-pkts?                  yang:counter64
          |  +--ro out-pkts?                 yang:counter64
          |  +--ro drop-pkts?                yang:counter64
          |  +--ro in-unicast-pkts?          yang:counter64
          |  +--ro in-multicast-pkts?        yang:counter64
          |  +--ro out-unicast-pkts?         yang:counter64
          |  +--ro out-multicast-pkts?       yang:counter64
          |  +--ro drop-bad-code-pkts?       yang:counter64
          |  +--ro drop-bad-hoplimit-pkts?   yang:counter64
          |  +--ro drop-bad-len-pkts?        yang:counter64
          |  +--ro drop-bad-option-pkts?     yang:counter64
          |  +--ro drop-checksum-err-pkts?   yang:counter64
          |  +--ro drop-fragmented-pkts?     yang:counter64
          +--ro ra-stats
          |  +--ro in-pkts?                  yang:counter64
          |  +--ro out-pkts?                 yang:counter64
          |  +--ro drop-pkts?                yang:counter64
          |  +--ro in-unicast-pkts?          yang:counter64
          |  +--ro in-multicast-pkts?        yang:counter64
          |  +--ro out-unicast-pkts?         yang:counter64
          |  +--ro out-multicast-pkts?       yang:counter64
          |  +--ro drop-bad-code-pkts?       yang:counter64
          |  +--ro drop-bad-hoplimit-pkts?   yang:counter64
          |  +--ro drop-bad-len-pkts?        yang:counter64
          |  +--ro drop-bad-option-pkts?     yang:counter64
          |  +--ro drop-checksum-err-pkts?   yang:counter64
          |  +--ro drop-fragmented-pkts?     yang:counter64
          +--ro redirect-stats
             +--ro in-pkts?                  yang:counter64
             +--ro out-pkts?                 yang:counter64
             +--ro drop-pkts?                yang:counter64
             +--ro drop-bad-code-pkts?       yang:counter64
             +--ro drop-bad-hoplimit-pkts?   yang:counter64
             +--ro drop-bad-len-pkts?        yang:counter64
             +--ro drop-bad-option-pkts?     yang:counter64
             +--ro drop-checksum-err-pkts?   yang:counter64
             +--ro drop-fragmented-pkts?     yang:counter64
  augment /if:interfaces/if:interface/ip:ipv6/ip:neighbor:
    +--ro age?   uint32

3. IPv6 Neighbor Discovery YANG Module

This section presents the YANG module of IPv6 Neighbor Discovery defined in this document.

This module imports modules from Common YANG Data Types [RFC9911], A YANG Data Model for Interface Management [RFC8343], and A YANG Data Model for IP Management [RFC8344].

<CODE BEGINS> file "ietf-ipv6-nd@2026-04-20.yang"


module ietf-ipv6-nd {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-nd";
  prefix v6nd;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 9911: Common YANG Data Types";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A Yang Data Model for Interface Management";
  }
  import ietf-ip {
    prefix ip;
    reference
      "RFC 8344: A Yang Data Model for IP Management";
  }

  organization
    "IETF 6MAN (IPv6 Maintenance) Working Group";

  contact
    "WG Web:  <https://datatracker.ietf.org/wg/6man/>
     WG List: 6MAN <mailto:ipv6@ietf.org>

     Author:  Fan Zhang
              <zhangf52@chinatelecom.cn>
     Author:  Yongqing Zhu
              <zhuyq8@chinatelecom.cn>
     Author:  Bo Wu
              <lana.wubo@huawei.com>
     Author:  Jiayuan Hu
              <hujy5@chinatelecom.cn>";

  description
    "This YANG module defines a YANG data model to configure and
     manage IPv6 Neighbor Discovery (ND) and related functions,
     including IPv6 address resolution, redirect, proxy Neighbor
     Advertisement, Neighbor Unreachability Detection (NUD),
     Duplicate Address Detection (DAD), and Enhanced DAD.

     Copyright (c) 2026 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 Revised 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).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry group
     (https://www.iana.org/assignments/yang-parameters).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  // RFC Ed: replace '2026-04-20' with the module publication date
  // the format is (YYYY-MM-DD)

  // replace XXXX with actual RFC number and remove
  // this note

  revision 2026-04-20 {
    description
      "Initial version.";
    reference
      "RFC XXXX: YANG Data Model for IPv6 Neighbor Discovery";
  }


  /* Groupings */

  grouping nd-basic-statistics {
    description
      "Grouping for basic statistics for IPv6 ND messages.";
    leaf in-pkts {
      type yang:counter64;
      description
        "The total number of packets received.";
    }
    leaf out-pkts {
      type yang:counter64;
      description
        "The total number of packets transmitted.";
    }
    leaf drop-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded.";
    }
  }

  grouping nd-unicast-multicast-statistics {
    description
      "Grouping for statistics for IPv6 ND messages categorized by
       unicast and multicast.";
    leaf in-unicast-pkts {
      type yang:counter64;
      description
        "The total number of packets received with the destination
         address as a unicast address.";
    }
    leaf in-multicast-pkts {
      type yang:counter64;
      description
        "The total number of packets received with the destination
         address as a multicast address.";
    }
    leaf out-unicast-pkts {
      type yang:counter64;
      description
        "The total number of packets transmitted with the destination
         address as a unicast address.";
    }
    leaf out-multicast-pkts {
      type yang:counter64;
      description
        "The total number of packets transmitted with the destination
         address as a multicast address.";
    }
  }

  grouping nd-drop-statistics {
    description
      "Grouping for statistics for IPv6 ND messages discarded by
       reason.";
    leaf drop-bad-code-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to invalid code.";
    }
    leaf drop-bad-hoplimit-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to invalid hop
         limits.";
    }
    leaf drop-bad-len-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to invalid length.";
    }
    leaf drop-bad-option-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to invalid option.";
    }
    leaf drop-checksum-err-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to checksum errors.";
    }
    leaf drop-fragmented-pkts {
      type yang:counter64;
      description
        "The total number of packets discarded due to fragmentation.";
    }
  }

  /* Data nodes */

  augment "/if:interfaces/if:interface/ip:ipv6" {
    description
      "Augments interface configuration and state data with
       parameters of IPv6 ND.";
    container nd {
      description
        "Parameters of IPv6 ND.";
      leaf reachable-time {
        type uint32 {
          range "1..3600000";
        }
        units "milliseconds";
        default "30000";
        description
          "The time to confirm a neighbor's reachability for NUD.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 6.3.2 - BaseReachableTime";
      }
      leaf retrans-timer {
        type uint32 {
          range "1..max";
        }
        units "milliseconds";
        default "1000";
        description
          "The interval of retransmitting Neighbor Solicitations to a
           neighbor for address resolution, NUD, or DAD.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 6.3.2 - RetransTimer";
      }
      leaf redirect {
        type boolean;
        default "false";
        description
          "Controls whether sending of ICMP Redirect messages
           on the interface is enabled or disabled.
            true -  Sending of ICMP Redirect messages is enabled,
            false - Sending of ICMP Redirect messages is disabled.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 8";
      }
      leaf proxy-na {
        type boolean;
        default "false";
        description
          "Controls whether proxies for one or more other nodes by
           sending proxy Neighbor Advertisement.
            true -  Proxy NA is enabled,
            false - Proxy NA is disabled.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 7.2.8";
      }
      container enhanced-dad {
        description
          "Parameters of Enhanced DAD algorithm.";
        leaf enable {
          type boolean;
          default "false";
          description
            "Controls whether Enhanced DAD algorithm is enabled or
             disabled.";
          reference
            "RFC7527: Enhanced Duplicate Address Detection
                      Section 4";
        }
        leaf auto-resolve {
          when "../enable = 'true'";
          type boolean;
          default "false";
          description
            "Controls whether the automated action is taken when
             detecting duplicates. A trusted router can log a system
             management message, drop the received ND message, and
             block the untrusted IPv6 host nodes from which the
             duplicate NS(DAD) or NA message was received.";
          reference
            "RFC7527: Enhanced Duplicate Address Detection
                      Section 5";
        }
        reference
          "RFC7527: Enhanced Duplicate Address Detection";
      }
      container statistics {
        config false;
        description
          "A collection of interface-related statistics about IPv6
           ND messages.";
        container ns-stats {
          description
            "Statistics for Neighbor Solicitation packets.";
          uses nd-basic-statistics;
          uses nd-unicast-multicast-statistics;
          uses nd-drop-statistics;
          leaf out-nud-pkts {
            type yang:counter64;
            description
              "The total number of NS packets transmitted for NUD.";
          }
        }
        container na-stats {
          description
            "Statistics for Neighbor Advertisement packets.";
          uses nd-basic-statistics;
          uses nd-unicast-multicast-statistics;
          uses nd-drop-statistics;
          leaf in-solicited-pkts {
            type yang:counter64;
            description
              "The total number of solicited NA packets received.";
          }
          leaf in-unsolicited-pkts {
            type yang:counter64;
            description
              "The total number of unsolicited NA packets received.";
          }
          leaf in-override-pkts {
            type yang:counter64;
            description
              "The total number of override NA packets received.";
          }
          leaf in-nonoverride-pkts {
            type yang:counter64;
            description
              "The total number of non-override NA packets received.";
          }
          leaf out-solicited-pkts {
            type yang:counter64;
            description
              "The total number of solicited NA packets transmitted.";
          }
          leaf out-unsolicited-pkts {
            type yang:counter64;
            description
              "The total number of unsolicited NA packets transmitted.";
          }
          leaf out-override-pkts {
            type yang:counter64;
            description
              "The total number of override NA packets transmitted.";
          }
          leaf out-nonoverride-pkts {
            type yang:counter64;
            description
              "The total number of non-override NA packets
               transmitted.";
          }
        }
        container rs-stats {
          description
            "Statistics for Router Solicitation packets.";
          uses nd-basic-statistics;
          uses nd-unicast-multicast-statistics;
          uses nd-drop-statistics;
        }
        container ra-stats {
          description
            "Statistics for Router Advertisement packets.";
          uses nd-basic-statistics;
          uses nd-unicast-multicast-statistics;
          uses nd-drop-statistics;
        }
        container redirect-stats {
          description
            "Statistics for Redirect packets.";
          uses nd-basic-statistics;
          uses nd-drop-statistics;
        }
      }
    }
  }

  augment "/if:interfaces/if:interface/ip:ipv6/ip:neighbor" {
    description
      "Augments IPv6 neighbor list with parameters of IPv6 address
       resolution based on IPv6 ND.";
    leaf age {
      when "../ip:origin = 'dynamic'";
      type uint32;
      units "seconds";
      config false;
      description
        "The time that has passed since receipt of the last
         reachability confirmation for the neighbor. Ignored when the
         neighbor entry is static.";
      reference
        "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                  Section 7.3.3";
    }
  }
}


<CODE ENDS>

4. IANA Considerations

IANA is requested to register the following URI in the "ns" registry within the "IETF XML Registry" group [RFC3688]:

   URI: urn:ietf:params:xml:ns:yang:ietf-ipv6-nd
   Registrant Contact:  The IESG
   XML: N/A; the requested URI is an XML namespace.

IANA is requested to register the following YANG module in the "YANG Module Names" registry [RFC6020] within the "YANG Parameters" registry group.

   Name: ietf-ipv6-nd
   Maintained by IANA?  N
   Namespace: urn:ietf:params:xml:ns:yang:ietf-ipv6-nd
   Prefix: v6nd
   Reference: RFC XXXX

5. Security Considerations

This section is modeled after the template described in Section 3.7.1 of [RFC9907].

The "ietf-ipv6-nd" YANG module defines a data model that is designed to be accessed via YANG-based management protocols, such as the Network Configuration Protocol (NETCONF) [RFC6241] and RESTCONF [RFC8040]. These YANG-based management protocols (1) have to use a secure transport layer (e.g., Secure Shell (SSH) [RFC4252], TLS [RFC9846], and QUIC [RFC9000]) and (2) have to use mutual authentication.

The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.

There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., "config true", which is the default). All writable data nodes are likely to be sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) and delete operations to these data nodes without proper protection or authentication can have a negative effect on network operations. The following subtrees and data nodes have particular sensitivities/vulnerabilities:

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:reachable-time

This leaf is used to consider a neighbor reachable since the last confirmation of reachability, which could be set to big values to prolong the effect of spoofing Neighbor Cache entries or small values to cause unnecessary frequent NUDs.

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:retrans-timer

This leaf is used to set the interval of retransmitting Neighbor Solicitations, which could allow DoS attacks.

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:redirect

This leaf is used to enable the sending of Redirect messages on an interface, which could allow traffic to be misdirected, potentially resulting in traffic hijacking, man-in-the-middle attacks, or DoS attacks.

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:proxy-na

This leaf is used to enable proxy Neighbor Advertisement on an interface, which could allow spoofing traffic to be injected.

Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. Specifically, the following subtrees and data nodes have particular sensitivities/ vulnerabilities:

* /if:interfaces/if:interface/ip:ipv6/ip:neighbor/v6nd:age

Unauthorized access to this node may disclose information about IPv6 neighbor reachability and activity patterns on the network.

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:redirect

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:proxy-na

* /if:interfaces/if:interface/ip:ipv6/v6nd:nd/v6nd:enhanced-dad

Unauthorized access to these nodes may disclose device behavior and security-related configuration of IPv6 Neighbor Discovery functions.

6. Acknowledgments

The authors would like to thank Bin Han, Acee Lindem, Jen Linkova, Éric Vyncke, Changwang Lin, and many others for their helpful comments and suggestions.

Thanks to Ebben Aries for the review and comments.

7. References

7.1. Normative References

[RFC3688]
Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, , <https://www.rfc-editor.org/info/rfc3688>.
[RFC4861]
Narten, T., Nordmark, E., Simpson, W., and H. Soliman, "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, DOI 10.17487/RFC4861, , <https://www.rfc-editor.org/info/rfc4861>.
[RFC4862]
Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless Address Autoconfiguration", RFC 4862, DOI 10.17487/RFC4862, , <https://www.rfc-editor.org/info/rfc4862>.
[RFC6020]
Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, , <https://www.rfc-editor.org/info/rfc6020>.
[RFC7527]
Asati, R., Singh, H., Beebee, W., Pignataro, C., Dart, E., and W. George, "Enhanced Duplicate Address Detection", RFC 7527, DOI 10.17487/RFC7527, , <https://www.rfc-editor.org/info/rfc7527>.
[RFC7950]
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, , <https://www.rfc-editor.org/info/rfc7950>.
[RFC8341]
Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, , <https://www.rfc-editor.org/info/rfc8341>.
[RFC8342]
Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, , <https://www.rfc-editor.org/info/rfc8342>.
[RFC8343]
Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10.17487/RFC8343, , <https://www.rfc-editor.org/info/rfc8343>.
[RFC8344]
Bjorklund, M., "A YANG Data Model for IP Management", RFC 8344, DOI 10.17487/RFC8344, , <https://www.rfc-editor.org/info/rfc8344>.
[RFC8349]
Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for Routing Management (NMDA Version)", RFC 8349, DOI 10.17487/RFC8349, , <https://www.rfc-editor.org/info/rfc8349>.
[RFC9911]
Schönwälder, J., Ed., "Common YANG Data Types", RFC 9911, DOI 10.17487/RFC9911, , <https://www.rfc-editor.org/info/rfc9911>.

7.2. Informative References

[RFC4252]
Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, , <https://www.rfc-editor.org/info/rfc4252>.
[RFC6241]
Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, , <https://www.rfc-editor.org/info/rfc6241>.
[RFC6775]
Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C. Bormann, "Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)", RFC 6775, DOI 10.17487/RFC6775, , <https://www.rfc-editor.org/info/rfc6775>.
[RFC8040]
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, , <https://www.rfc-editor.org/info/rfc8040>.
[RFC8340]
Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, , <https://www.rfc-editor.org/info/rfc8340>.
[RFC8505]
Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C. Perkins, "Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery", RFC 8505, DOI 10.17487/RFC8505, , <https://www.rfc-editor.org/info/rfc8505>.
[RFC8928]
Thubert, P., Ed., Sarikaya, B., Sethi, M., and R. Struik, "Address-Protected Neighbor Discovery for Low-Power and Lossy Networks", RFC 8928, DOI 10.17487/RFC8928, , <https://www.rfc-editor.org/info/rfc8928>.
[RFC8981]
Gont, F., Krishnan, S., Narten, T., and R. Draves, "Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6", RFC 8981, DOI 10.17487/RFC8981, , <https://www.rfc-editor.org/info/rfc8981>.
[RFC9000]
Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Multiplexed and Secure Transport", RFC 9000, DOI 10.17487/RFC9000, , <https://www.rfc-editor.org/info/rfc9000>.
[RFC9010]
Thubert, P., Ed. and M. Richardson, "Routing for RPL (Routing Protocol for Low-Power and Lossy Networks) Leaves", RFC 9010, DOI 10.17487/RFC9010, , <https://www.rfc-editor.org/info/rfc9010>.
[RFC9846]
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 9846, DOI 10.17487/RFC9846, , <https://www.rfc-editor.org/info/rfc9846>.
[RFC9907]
Bierman, A., Boucadair, M., Ed., and Q. Wu, "Guidelines for Authors and Reviewers of Documents Containing YANG Data Models", BCP 216, RFC 9907, DOI 10.17487/RFC9907, , <https://www.rfc-editor.org/info/rfc9907>.
[I-D.ietf-intarea-arp-yang-model]
Zheng, F., Wu, B., Wilton, R., Zhang, F., Zhu, Y., and X. Ding, "A YANG Data Model for ARP Extensions", Work in Progress, Internet-Draft, draft-ietf-intarea-arp-yang-model-01, , <https://datatracker.ietf.org/doc/html/draft-ietf-intarea-arp-yang-model-01>.

Appendix A. Example Proxy Neighbor Advertisement, Redirect, NUD, and DAD Configuration

This example illustrates the configuration of enabling proxy Neighbor Advertisement, Redirect, NUD, DAD, and enhanced DAD on interface eth0 with setting the "dup-addr-detect-transmits" leaf as 2, the "reachable-time" leaf as 40000 milliseconds, and the "retrans-timer" leaf as 2000 milliseconds, using the ietf-interfaces module [RFC8343], the ietf-ip module [RFC8344], and the IPv6 ND module.

<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
  xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
  <interface>
    <name>eth0</name>
    <type>ianaift:ethernetCsmacd</type>
    <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
      <dup-addr-detect-transmits>2</dup-addr-detect-transmits>
      <nd xmlns="urn:ietf:params:xml:ns:yang:ietf-ipv6-nd">
        <reachable-time>40000</reachable-time>
        <retrans-timer>2000</retrans-timer>
        <redirect>true</redirect>
        <proxy-na>true</proxy-na>
        <enhanced-dad>
          <enable>true</enable>
          <auto-resolve>true</auto-resolve>
        </enhanced-dad>
      </nd>
    </ipv6>
  </interface>
</interfaces>

The following is the same example using JSON format.

{
  "ietf-interfaces:interfaces": {
    "interface": [
      {
        "name": "eth0",
        "type": "iana-if-type:ethernetCsmacd",
        "ietf-ip:ipv6": {
          "dup-addr-detect-transmits": 2,
          "ietf-ipv6-nd:nd": {
            "reachable-time": 40000,
            "retrans-timer": 2000,
            "redirect": true,
            "proxy-na": true,
            "enhanced-dad": {
              "enable": true,
              "auto-resolve": true
            }
          }
        }
      }
    ]
  }
}

Appendix B. Coverage of IPv6 ND Functions in YANG Modules

This appendix summarizes the functional elements related to the IPv6 ND protocol and identifies whether they are covered by existing IETF YANG modules or defined in this document.

The table below maps the relevant RFCs, functions or parameters, the corresponding YANG modules, and their specific data paths. The functions are defined in [RFC4861] (Neighbor Discovery for IP version 6 (IPv6)), [RFC4862] (IPv6 Stateless Address Autoconfiguration), and [RFC7527] (Enhanced Duplicate Address Detection). The parameters are defined in Section 6.2.1 and 6.3.2 of [RFC4861], Section 5.1 of [RFC4862], and Section 3.4 of [RFC8981].

Table 1: Coverage of IPv6 ND Functions in YANG Modules
RFC
(Section)
Function/Parameter Covered by Path
4861
s5.1
Neighbor Cache ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:neighbor
4862
s5.1
Prefix List
(AdvPrefixList)
ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:prefix-list
4861
s6.2.1
IsRouter ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:forwarding
4861
s6.2.1
AdvSendAdvertisements ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:ipv6-router
-advertisements
4861
s6.2.1
MaxRtrAdvInterval ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:max-rtr
-adv-interval
4861
s6.2.1
MinRtrAdvInterval ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:min-rtr
-adv-interval
4861
s6.2.1
AdvManagedFlag ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6/
v6ur:managed-flag
4861
s6.2.1
AdvOtherConfigFlag ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:other-
config-flag
4861
s6.2.1
AdvLinkMTU ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:link-mtu
4861
s6.2.1
AdvReachableTime ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:reachable-time
4861
s6.2.1
AdvRetransTimer ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:retrans-timer
4861
s6.2.1
AdvCurHopLimit ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:cur-hop-limit
4861
s6.2.1
AdvDefaultLifetime ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:default-lifetime
4861
s6.2.1
AdvPrefixList/
AdvValidLifetime
ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:prefix-list
/v6ur:prefix
/v6ur:control-adv
-prefixes
/v6ur:advertise
/v6ur:valid
-lifetime
4861
s6.2.1
AdvPrefixList/
AdvOnLinkFlag
ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:prefix-list
/v6ur:prefix
/v6ur:control-adv
-prefixes
/v6ur:advertise/
v6ur:on-link-flag
4861
s6.2.1
AdvPrefixList/
AdvPreferredLifetime
ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:prefix-list
/v6ur:prefix
/v6ur:control-adv
-prefixes
/v6ur:advertise
/v6ur:preferred
-lifetime
4861
s6.2.1
AdvPrefixList/
AdvAutonomousFlag
ietf-ipv6-
router-
advertisements
/if:interfaces
/if:interface
/ip:ipv6
/v6ur:prefix-list
/v6ur:prefix
/v6ur:control-adv
-prefixes
/v6ur:advertise
/v6ur:autonomous
-flag
4861
s6.3.2
LinkMTU - -
4861
s6.3.2
CurHopLimit - -
4861
s6.3.2
BaseReachableTime ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd
/v6nd:reachable
-time
4861
s6.3.2
ReachableTime - -
4861
s6.3.2 /4862
s5.1
RetransTimer ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd
/v6nd:retrans
-timer
4861
s7.2.8
Proxy Neighbor
Advertisements
ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd
/v6nd:proxy-na
4861
s8
Redirect ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd
/v6nd:redirect
4862
s5.1
DupAddrDetectTransmits ietf-ip /if:interfaces
/if:interface
/ip:ipv6/ip:dup
-addr-detect
-transmits
4862
s5.5
Creation of Global
Addresses
ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:autoconf
/ip:create-
global-
addresses
8981
s3.4
Creation of Temporary
Addresses
ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:autoconf
/ip:create-
temporary-
addresses
8981
s3.4
TEMP_VALID_LIFETIME ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:autoconf
/ip:temporary-
valid-lifetime
8981
s3.4
TEMP_PREFERRED_
LIFETIME
ietf-ip /if:interfaces
/if:interface
/ip:ipv6
/ip:autoconf
/ip:temporary-
preferred-
lifetime
7527
s4
Enhanced Duplicate
Address Detection
ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd/
v6nd:enhanced-dad
7527
s5
Automated Resolving
of Duplicates
ietf-ipv6-nd /if:interfaces
/if:interface
/ip:ipv6/v6nd:nd/
v6nd:auto-resolve

Contributors

Bin Han
Huawei
China

Authors' Addresses

Fan Zhang
China Telecom
Guangzhou
China
Yongqing Zhu
China Telecom
Guangzhou
China
Bo Wu
Huawei
China
Jiayuan Hu
China Telecom
Guangzhou
China