Internet-Draft IPv6 Address Resolution YANG model June 2024
Zhang, et al. Expires 30 December 2024 [Page]
Workgroup:
RTGWG
Internet-Draft:
draft-zhang-rtgwg-ipv6-address-resolution-yang-00
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 Address Resolution

Abstract

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

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 30 December 2024.

Table of Contents

1. Introduction

This document defines a YANG data model "ietf-nd" to configure and manage IPv6 address resolution based on IPv6 Neighbor Discovery (ND) protocol in correspondence to ARP for IPv4 and other related functions, including proxy Neighbor Advertisement [RFC4861], Neighbor Unreachability Detection (NUD) [RFC4861], and Duplicate Address Detection [RFC4862].

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

The model is based on YANG 1.1 as defined in [RFC7950] and conforms to Network Management Datastore Architecture (NMDA) as defined in [RFC8342].

1.1. Terminology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

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

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 address resolution defines global configurations and augments the "ietf-ip" [RFC8344] for per-interface configuration, which configures and manages IPv6 address resolution based on IPv6 ND protocol and other related functions, including proxy Neighbor Advertisement, NUD, and DAD.

Note that the features related to ICMP Router Discovery are outside the scope of this module since they have already been defined in the submodule "ietf-ipv6-router-advertisements" [RFC8349].

2.1. IPv6 Address Resolution

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

The "dynamic-discovery" leaf enables the dynamic IPv6 address resolution based on ND protocol.

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

As for the management of Neighbor Cache entries, the "stale-timeout" leaves define the timeout for STALE entries, while the "age" leaf augments the "/if:interfaces/if:interface/ip:ipv6/ip:neighbor" path to indicate the time that has passed since the last time the Neighbor Cache entry is confirmed reachable.

The "statistics" container defines a collection of interface-related statistics about IPv6 ND messages.

2.2. Proxy Neighbor Advertisement

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

The "inter-vlan-proxy" leaf enables the router to proxy for hosts in the same subnet with different VLANs to enable the communication between them.

The "all-proxy" leaf enables the router to proxy for all hosts, that is, responds unconditionally to Neighbor Solicitation messages no matter whether the sources and destinations are in the same subnet or not with its own Neighbor Advertisement messages,which can attract the traffic to the router itself for centralized control or hidding the topology of the network.

2.3. Neighbor Unreachability Detection

The "nud" leaf augmenting "ietf-ip"[RFC8344] enables Neighbor Unreachability Detection (NUD) [RFC4861], which is used for a node to track the reachability of the neighbors to which it is sending packets and update the state of the related Neighbor Cache entry.

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

The "ns-interval" leaf also indicates the interval of retransmitting Neighbor Solicitation messages for NUD.

2.4. Duplicate Address Detection

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

The "ns-interval" leaf also indicates the interval of retransmitting Neighbor Solicitation messages for DAD.

2.5. IPv6 Address Resolution Data Model

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

module: ietf-nd
+--rw nd
   +--rw stale-timeout?   uint32

augment /if:interfaces/if:interface/ip:ipv6:
  +--rw nd
     +--rw dynamic-discovery?   boolean
     +--rw nud?                 boolean
     +--rw reachable-time?      uint32
     +--rw ns-interval?         uint32
     +--rw stale-timeout?       uint32
     +--rw proxy-na
     |  +--rw inter-vlan-proxy?   boolean
     |  +--rw all-proxy?          boolean
     +--ro statistics
        +--ro in-ns-pkts?    yang:counter32
        +--ro in-na-pkts?    yang:counter32
        +--ro in-rs-pkts?    yang:counter32
        +--ro in-ra-pkts?    yang:counter32
        +--ro out-ns-pkts?   yang:counter32
        +--ro out-na-pkts?   yang:counter32
        +--ro out-rs-pkts?   yang:counter32
        +--ro out-ra-pkts?   yang:counter32
augment /if:interfaces/if:interface/ip:ipv6/ip:neighbor:
  +--ro age?   uint32

3. IPv6 Address Resolution YANG Module

This section presents the YANG module of IPv6 address resolution defined in this document.

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

<CODE BEGINS> file "ietf-nd@2024-06-27.yang"

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

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: 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 Routing Area Working Group (rtgwg)";
  contact
    "WG Web:  <https://datatracker.ietf.org/wg/rtgwg/>
     WG List: <mailto: rtgwg@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 address resolution based on IPv6 Neighbor
     Discovery (ND) protocol and other related functions, including
     proxy Neighbor Advertisement, Neighbor Unreachability
     Detection (NUD), and Duplicate Address Detection (DAD).

     The model is based on YANG 1.1 as defined in RFC 7950 and
     conforms to Network Management Datastore Architecture (NMDA)
     as defined in RFC 8342.

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";
  reference
    "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
     RFC4862: IPv6 Stateless Address Autoconfiguration";

  revision 2024-06-27 {
    description
      "Init revision";
    reference
      "RFC XXXX: YANG Data Model for IPv6 Address Resolution";
  }

  /* Data nodes */
  container nd {
    description
      "Global parameters for IPv6 address resolution based on IPv6
       ND";
    leaf stale-timeout {
      type uint32;
      units "second";
      description
        "The global timeout for Neighbor Cache entry in the STALE
         state.";
      reference
        "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                  Section 5.3";
    }
  }

  augment "/if:interfaces/if:interface/ip:ipv6" {
    description
      "Augments interface configuration and state data with
       parameters of IPv6 address resolution.";
    container nd {
      description
        "Parameters of IPv6 address resolution.";
      leaf dynamic-discovery {
        type boolean;
        default "true";
        description
          "Controls whether dynamic link-layer address resolution
           for IPv6 on the interface is enabled or disabled.
            true -  dynamic link-layer address resolution based on
                    IPv6 ND is enabled,
            false - dynamic link-layer address resolution based on
                    IPv6 ND is disabled.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 7.2";
      }
      leaf nud {
        type boolean;
        default "true";
        description
          "Controls whether Neighbor Unreachability Detection (NUD)
           on the interface is enabled or disabled.
            true -  NUD is enabled,
            false - NUD is disabled.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 7.3";
      }
      leaf reachable-time {
        type uint32 {
          range "0..3600000";
        }
        units "millisecond";
        description
          "The time to confirm a neighbor's reachability for NUD.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    - ReachableTime";
      }
      leaf ns-interval {
        type uint32;
        units "milliseconds";
        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 7.3.3";
      }
      leaf stale-timeout {
        type uint32;
        units "second";
        description
          "The timeout for Neighbor Cache entry in the STALE state on
           the interface.";
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 5.3";
      }

      container proxy-na {
        description
          "Parameters of proxy Neighbor Advertisements.";
        leaf inter-vlan-proxy {
          type boolean;
          default "false";
          description
            "Controls whether the router proxies for hosts in the
             same subnet with different VLANs";
        }
        leaf all-proxy {
          type boolean;
          default "false";
          description
            "Controls whether the router proxies for all hosts,
             that is, responds unconditionally to Neighbor
             Solicitation with its own Neighbor Advertisement.";
        }
        reference
          "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                    Section 7.2.8";
      }

      container statistics {
        config false;
        description
          "A collection of interface-related statistics about IPv6
           ND messages.";

        leaf in-ns-pkts {
          type yang:counter32;
          description
            "The number of received Neighbor Solicitation packets.";
        }
        leaf in-na-pkts {
          type yang:counter32;
          description
            "The number of received Neighbor Advertisement packets.";
        }
        leaf in-rs-pkts {
          type yang:counter32;
          description
            "The number of received Router Solicitation packets.";
        }
        leaf in-ra-pkts {
          type yang:counter32;
          description
            "The number of received Router Advertisement packets.";
        }
        leaf out-ns-pkts {
          type yang:counter32;
          description
            "The number of sent Neighbor Solicitation packets.";
        }
        leaf out-na-pkts {
          type yang:counter32;
          description
            "The number of sent Neighbor Advertisement packets.";
        }
        leaf out-rs-pkts {
          type yang:counter32;
          description
            "The number of sent Router Solicitation packets.";
        }
        leaf out-ra-pkts {
          type yang:counter32;
          description
            "The number of sent Router Advertisement packets.";
        }
      }
    }
  }

  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 {
      type uint32;
      units "milliseconds";
      config false;
      description
        "The time that has passed since receipt of the last
         reachability confirmation for the neighbor.";
      reference
        "RFC4861: Neighbor Discovery for IP version 6 (IPv6)
                  Section 5.1";
    }
  }
}

<CODE ENDS>

4. IANA Considerations

This document registers a URI in the IETF XML registry [RFC3688]. Following the format in [RFC3688], the following registration is requested to be made:

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

This document registers a YANG module in the YANG Module Names registry [RFC6020].

    name: ietf-nd
    namespace: urn:ietf:params:xml:ns:yang:ietf-nd
    prefix: v6nd
    reference: RFC XXXX

5. Security Considerations

The YANG module specified in this document defines a schema for data that is designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040] . The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS [RFC8446].

The NETCONF 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). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability:

Some of the readable data nodes in the ietf-ipv6-nd 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.

6. Acknowledgments

The authors would like to thank Bin Han for the helpful comments and everyone who contributed to the draft.

7. References

7.1. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[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>.
[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>.
[RFC6242]
Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, , <https://www.rfc-editor.org/info/rfc6242>.
[RFC6991]
Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10.17487/RFC6991, , <https://www.rfc-editor.org/info/rfc6991>.
[RFC7950]
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, , <https://www.rfc-editor.org/info/rfc7950>.
[RFC8040]
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, , <https://www.rfc-editor.org/info/rfc8040>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[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>.
[RFC8446]
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, , <https://www.rfc-editor.org/info/rfc8446>.
[I-D.ietf-rtgwg-arp-yang-model]
Zheng, F., Wu, B., Wilton, R., and X. Ding, "YANG Data Model for ARP", Work in Progress, Internet-Draft, draft-ietf-rtgwg-arp-yang-model-03, , <https://datatracker.ietf.org/doc/html/draft-ietf-rtgwg-arp-yang-model-03>.

7.2. Informative References

[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>.
[RFC8792]
Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, "Handling Long Lines in Content of Internet-Drafts and RFCs", RFC 8792, DOI 10.17487/RFC8792, , <https://www.rfc-editor.org/info/rfc8792>.

Appendix A. Data Model Examples

A.1. Configured Static IPv6 Neighbor Cache Entry

This example illustrates the manual configuration for a Neighbor Cache entry of interface eth0 for peer 2001:db8::2 with link-layer address 00:00:5E:00:53:AB statically.

Note: '\' line wrapping per [RFC8792].

<?xml version="1.0" encoding="utf-8"?>
<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>
  <!-- other parameters from ietf-interfaces omitted -->

  <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
    <!-- ipv6 address configuration parameters omitted -->
    <neighbor>
    <ip>2001:db8::2</ip>
    <link-layer-address>00:00:5E:00:53:AB</link-layer-address>
    </neighbor>
  </ipv6>
  </interface>
</interfaces>

A.2. Configuration of Proxy Neighbor Advertisement, NUD, and DAD

This example illustrates the configuration of enabling proxy Neighbor Advertisement, NUD, and DAD with setting the "dup-addr-detect-transmits" leaf as 1, the "reachable-time" leaf as 30000 milliseconds, and the "ns-interval" leaf as 1000 milliseconds.

Note: '\' line wrapping per [RFC8792].

<?xml version="1.0" encoding="utf-8"?>
<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>
  <!-- other parameters from ietf-interfaces omitted -->

    <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
      <dup-addr-detect-transmits>1</dup-addr-detect-transmits>
      <!-- ipv6 address configuration parameters omitted -->

      <nd xmlns="urn:ietf:params:xml:ns:yang:ietf-ipv6-nd">
        <dynamic-discovery>true</dynamic-discovery>
        <nud>true</nud>
        <reachable-time>30000</reachable-time>
        <ns-interval>1000</ns-interval>
        <stale-timeout>1200</stale-timeout>
        <proxy-na>
          <inter-vlan-proxy>true</inter-vlan-proxy>
        </proxy-na>
      </nd>
    </ipv6>
  </interface>
</interfaces>

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