<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-softwire-iftunnel-07"
     ipr="trust200902">
  <front>
    <title abbrev="Tunnel Interface Types">Tunnel Interface Types YANG
    Module</title>

    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization>Orange</organization>

      <address>
        <postal>
          <street></street>

          <city>Rennes</city>

          <code>35000</code>

          <country>France</country>
        </postal>

        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <author fullname="Ian Farrer" initials="I." surname="Farrer">
      <organization>Deutsche Telekom AG</organization>

      <address>
        <postal>
          <street>CTO-ATI,Landgrabenweg 151</street>

          <city>Bonn</city>

          <region>NRW</region>

          <code>53227</code>

          <country>Germany</country>
        </postal>

        <email>ian.farrer@telekom.de</email>
      </address>
    </author>

    <author fullname="Rajiv Asati" initials="R." surname="Asati">
      <organization>Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street>7025 Kit Creek Rd.</street>

          <city>RTP</city>

          <region>NC</region>

          <code>27709</code>

          <country>USA</country>
        </postal>

        <email>Rajiva@cisco.com</email>
      </address>
    </author>

    <date />

    <workgroup>Softwire Working Group</workgroup>

    <keyword>softwire</keyword>

    <keyword>Augment tunnel</keyword>

    <keyword>tunnel management</keyword>

    <keyword>tunnel provisioning</keyword>

    <keyword>tunnel activation</keyword>

    <keyword>tunnel automation</keyword>

    <abstract>
      <t>This document specifies the initial version of a YANG module
      containing a collection of IANA maintained YANG identities, used as
      interface types for tunnel interfaces. The module reflects the
      "tunnelType" registry maintained by IANA. The latest revision of this
      YANG module can be obtained from the IANA web site.</t>

      <t>Tunnel type values are not directly added to the Tunnel Interface
      Types YANG module; they must instead be added to the "tunnelType" IANA
      registry. Once a new tunnel type registration is made by IANA for a new
      tunneling scheme or even an existing one that is not already listed in
      the current registry (e.g., LISP, NSH), IANA will update the Tunnel
      Interface Types YANG module accordingly.</t>

      <t>Some of the IETF-defined tunneling techniques are not listed in the
      current IANA registry. It is not the intent of this document to update
      the existing IANA registry with a comprehensive list of tunnel
      technologies. Registrants must follow the IETF registration procedure
      for interface types whenever a new tunnel type is needed.</t>
    </abstract>

    <note title="Editorial Note (To be removed by RFC Editor)">
      <t>Please update these statements in the document with the RFC number to
      be assigned to this document:<list style="symbols">
          <t>"This version of this YANG module is part of RFC XXXX;"</t>

          <t>"RFC XXXX: Tunnel Interface Types YANG Module";</t>

          <t>"reference: RFC XXXX"</t>

          <t>"...must be updated as defined in RFCXXXX."</t>
        </list>Please update the "revision" date of the YANG modules.<!--   o  CAPWAP (Control And Provisioning of Wireless Access Points)
      [RFC5415];

   o  LISP (Locator/Identifier Separation Protocol) [RFC6830];

   o  AMT (Automatic Multicast Tunneling) [RFC7450];

   o  VXLAN (Virtual eXtensible Local Area Network) [RFC7348] and VXLAN-
      GPE [I-D.ietf-nvo3-vxlan-gpe];

   o  The Network Service Header (NSH [RFC8300]) for Service Function
      Chaining (SFC);

   o  Geneve [I-D.ietf-nvo3-geneve];

   o  GUE (Generic UDP Encapsulation) [I-D.ietf-intarea-gue];

   o  TCP Encapsulation of IKE and IPsec Packets (see Section 12.5 of
      [RFC8229]).--></t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document specifies the initial version of the iana-tunnel-type
      YANG module containing a collection of IANA maintained YANG identities
      identifying tunnel interface types. The module reflects IANA's registry
      maintained at <xref target="TUNNELTYPE-IANA-REGISTRY"></xref>. The
      latest revision of this module can be obtained from the IANA web
      site.</t>

      <t>Tunnel-specific extensions may be added to the Interface module <xref
      target="RFC8343"></xref> as a function of the tunnel type. An example of
      this is provided in <xref target="sample"></xref>. It is not the
      intention of this document to define tunnel-specific extensions for
      every tunnel encapsulation technology; those are discussed in dedicated
      documents such as <xref target="I-D.ietf-softwire-yang"></xref>.
      Likewise, it is out of the scope of this document to update the existing
      IANA registry <xref target="TUNNELTYPE-IANA-REGISTRY"></xref> with a
      comprehensive list of tunnel technologies. Guidelines and registration
      procedures for interface types and sub-types are discussed in <xref
      target="I-D.thaler-iftype-reg"></xref>.</t>

      <t>This document uses the common YANG types defined in <xref
      target="RFC6991"></xref> and adopts the Network Management Datastore
      Architecture (NMDA <xref target="RFC8342"></xref>).</t>

      <t>The terminology for describing YANG modules is defined in <xref
      target="RFC7950"></xref>. The meanings of the symbols used in the tree
      diagram are defined in <xref target="RFC8340"></xref>.</t>
    </section>

    <section anchor="itt" title="IANA Tunnel Type YANG Module">
      <t>The iana-tunnel-type module imports the 'iana-if-type' module defined
      in <xref target="RFC7224"></xref>.</t>

      <t>The initial version of the module includes tunnel types defined in
      <xref target="RFC4087"></xref>, <xref target="RFC7856"></xref>, <xref
      target="RFC7870"></xref>, and <xref target="RFC6346"></xref>.</t>

      <t><figure>
          <artwork><![CDATA[<CODE BEGINS> file "iana-tunnel-type@2019-04-04.yang"

module iana-tunnel-type {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-tunnel-type";
  prefix iana-tunnel-type;

  import iana-if-type  {
    prefix ift;
    reference
      "RFC 7224: IANA Interface Type YANG Module";
  }

  organization
    "IANA";
  contact
    "Internet Assigned Numbers Authority

  Postal: ICANN
          12025 Waterfront Drive, Suite 300
          Los Angeles, CA  90094-2536
          United States of America
  Tel:    +1 310 301 5800
  <mailto:iana@iana.org>";

  description
    "This module contains a collection of YANG identities defined
    by IANA and used as interface types for tunnel interfaces.
     
    Copyright (c) 2019 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
    (http://trustee.ietf.org/license-info).
    
    This version of this YANG module is part of RFC XXXX; see
    the RFC itself for full legal notices.";

  revision 2019-04-04 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Tunnel Interface Types YANG Module";
  }
  identity other {
    base ift:tunnel;
    description
      "None of the following values.";
    reference
     "RFC 4087: IP Tunnel MIB"; 
  }
  identity direct {
    base ift:tunnel;
    description
      "No intermediate header.";
    reference
      "RFC 2003: IP Encapsulation within IP
       RFC 4213: Basic Transition Mechanisms for IPv6 Hosts 
                 and Routers"; 
   }
   identity gre {
     base ift:tunnel;
     description
       "GRE encapsulation.";
     reference
      "RFC 1701: Generic Routing Encapsulation (GRE)
       RFC 1702: Generic Routing Encapsulation over IPv4 networks
       RFC 7676: IPv6 Support for Generic Routing Encapsulation 
                 (GRE)"; 
  }
  identity minimal {
    base ift:tunnel;
    description
      "Minimal encapsulation.";
    reference
      "RFC 2004: Minimal Encapsulation within IP"; 
  }
  identity l2tp {
    base ift:tunnel;
    description
      "L2TP encapsulation.";
   reference
     "RFC 2661: Layer Two Tunneling Protocol (L2TP)"; 
  }
  identity pptp {
    base ift:tunnel;
    description
      "PPTP encapsulation.";
    reference
      "RFC 2637: Point-to-Point Tunneling Protocol (PPTP)"; 
  }
  identity l2f {
    base ift:tunnel;
    description
      "L2F encapsulation.";
    reference
      "RFC 2341: Cisco Layer Two Forwarding (Protocol) (L2F)"; 
  }
  identity udp {
    base ift:tunnel;
    description
      "UDP encapsulation.";
    reference
      "Section 3.1.11 of RFC 8085"; 
  }
  identity atmp {
    base ift:tunnel;
    description
     "ATMP encapsulation.";
    reference
      "RFC 2107: Ascend Tunnel Management Protocol - ATMP"; 
  }   
  identity msdp {
    base ift:tunnel;
    description
      "MSDP encapsulation.";
    reference
      "RFC 3618: Multicast Source Discovery Protocol (MSDP)"; 
  }  
  identity sixtofour {
    base ift:tunnel;
    description
      "6to4 encapsulation.";
    reference
      "RFC 3056: Connection of IPv6 Domains via IPv4 Clouds"; 
  }  
  identity sixoverfour {
    base ift:tunnel;
    description
      "6over4 encapsulation.";
    reference
      "RFC 2529: Transmission of IPv6 over IPv4 Domains without
                 Explicit Tunnels"; 
  }  
  identity isatap {
    base ift:tunnel;
    description
      "ISATAP encapsulation.";
    reference
      "RFC 5214:  Intra-Site Automatic Tunnel Addressing Protocol
                 (ISATAP)"; 
  }  
  identity teredo {
    base ift:tunnel;
    description
      "Teredo encapsulation.";
    reference
      "RFC 4380: Teredo- Tunneling IPv6 over UDP through
                 Network Address Translations (NATs)"; 
  }
  identity iphttps {
    base ift:tunnel;
    description
      "IP over HTTPS (IP-HTTPS) Tunneling Protocol.";
    reference
      "Microsoft Corporation, IP over HTTPS (IP-HTTPS) Tunneling
       Protocol Specification, 
       https://msdn.microsoft.com/en-us/library/dd358571.aspx";   
  }  
  identity softwiremesh {
    base ift:tunnel;
    description
      "softwire mesh tunnel.";
    reference
      "RFC 5565: Softwire Mesh Framework";
  }    
  identity dslite {
    base ift:tunnel;
    description
      "DS-Lite tunnel.";
    reference
      "RFC 6333: Dual-Stack Lite Broadband Deployments Following
                 IPv4 Exhaustion";
  }
  identity aplusp {
    base ift:tunnel;
    description
      "A+P encapsulation.";
    reference
      "RFC 6346: The Address plus Port (A+P) Approach to the IPv4
                 Address Shortage";
  }  
}
<CODE ENDS>]]></artwork>
        </figure></t>
    </section>

    <section title="Security Considerations">
      <t>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 <xref target="RFC6241"></xref> or RESTCONF <xref
      target="RFC8040"></xref>. The lowest NETCONF layer is the secure
      transport layer, and the mandatory-to-implement secure transport is
      Secure Shell (SSH) <xref target="RFC6242"></xref>. The lowest RESTCONF
      layer is HTTPS, and the mandatory-to-implement secure transport is TLS
      <xref target="RFC8446"></xref>.</t>

      <t>The Network Configuration Access Control Model (NACM) <xref
      target="RFC8341"></xref> 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.</t>

      <t>The module defined in this document defines YANG identities for the
      iana-tunnel-types registry. These identities are intended to be
      referenced by other YANG modules, and by themselves do not expose any
      nodes which are writable, contain read-only state, or RPCs. As such,
      there are no additional security issues to be considered relating to the
      module defined in this document.</t>
    </section>

    <section anchor="yang" title="IANA Considerations">
      <section title="YANG Module">
        <t>This document requests IANA to register the following URI in the
        "ns" subregistry within the "IETF XML Registry" <xref
        target="RFC3688"></xref>: <figure>
            <artwork><![CDATA[         URI: urn:ietf:params:xml:ns:yang:iana-tunnel-type
         Registrant Contact: IANA.
         XML: N/A; the requested URI is an XML namespace.
]]></artwork>
          </figure>This document requests IANA to register the following
        following YANG module in the "YANG Module Names" subregistry <xref
        target="RFC7950"></xref> within the "YANG Parameters" registry.<figure>
            <artwork><![CDATA[         Name: iana-tunnel-type
         Namespace: urn:ietf:params:xml:ns:yang:iana-tunnel-type
         Prefix: iana-tunnel-type
         Reference: RFC XXXX
]]></artwork>
          </figure></t>

        <t>This document defines the initial version of the IANA-maintained
        iana-tunnel-type YANG module. IANA is requested to add this note:<list
            style="empty">
            <t>Tunnel type values must not be directly added to the
            iana-tunnel-type YANG module. They must instead be respectively
            added to the "tunnelType" sub-registry (under the "ifType
            definitions" registry).</t>
          </list></t>

        <t>When a tunnel type is added to the "tunnelType" sub-registry, a new
        "identity" statement must be added to the iana-tunnel-type YANG
        module. The name of the "identity" is the lower-case of the
        corresponding enumeration in the IANAifType-MIB (i.e.,
        IANAtunnelType). The "identity" statement should have the following
        sub-statements defined:</t>

        <t><list hangIndent="15" style="hanging">
            <t hangText="&quot;base&quot;:">Contains 'ift:tunnel'.</t>

            <t hangText="&quot;description&quot;:">Replicates the description
            from the registry.</t>

            <t hangText="&quot;reference&quot;:">Replicates the reference from
            the registry and add the title of the document.</t>
          </list></t>

        <t>Unassigned or reserved values are not present in the module.</t>

        <t>When the iana-tunnel-type YANG module is updated, a new "revision"
        statement must be added in front of the existing revision
        statements.</t>

        <t>IANA is requested to add this note to "tunnelType"
        sub-registry:</t>

        <t><list style="empty">
            <t>When this registry is modified, the YANG module
            iana-tunnel-type must be updated as defined in RFCXXXX.</t>
          </list></t>
      </section>

      <section title="Updates to the IANA tunnelType Table">
        <t>This document requests IANA to update the following entries
        available at
        https://www.iana.org/assignments/smi-numbers/smi-numbers.xhtml#smi-numbers-6:
        <figure>
            <artwork><![CDATA[OLD: 

Decimal Name         Description            References
2       direct       no intermediate header [RFC4087] 
3       gre          GRE encapsulation      [RFC4087] 
4       minimal      Minimal encapsulation  [RFC4087] 
5       l2tp         L2TP encapsulation     [RFC4087] 
6       pptp         PPTP encapsulation     [RFC4087] 
7       l2f          L2F encapsulation      [RFC4087] 
8       udp          UDP encapsulation      [RFC4087]
9       atmp         ATMP encapsulation     [RFC4087]   
10      msdp         MSDP encapsulation     [RFC4087]   
11      sixToFour    6to4 encapsulation     [RFC4087]   
12      sixOverFour  6over4 encapsulation   [RFC4087]   
13      isatap       ISATAP encapsulation   [RFC4087]   
14      teredo       Teredo encapsulation   [RFC4087]   
16      softwireMesh softwire mesh tunnel   [RFC7856]   
17      dsLite       DS-Lite tunnel         [RFC7870]   ]]></artwork>
          </figure></t>

        <t></t>

        <t><figure>
            <artwork><![CDATA[NEW:

Decimal Name         Description            References
2       direct       no intermediate header [RFC2003]
                                            [RFC4213]
3       gre          GRE encapsulation      [RFC1701]
                                            [RFC1702]
                                            [RFC7676]
4       minimal      Minimal encapsulation  [RFC2004]
5       l2tp         L2TP encapsulation     [RFC2661]
6       pptp         PPTP encapsulation     [RFC2637]
7       l2f          L2F encapsulation      [RFC2341]
8       udp          UDP encapsulation      [RFC8085]
9       atmp         ATMP encapsulation     [RFC2107]
10      msdp         MSDP encapsulation     [RFC3618]
11      sixToFour    6to4 encapsulation     [RFC3056]
12      sixOverFour  6over4 encapsulation   [RFC2529]
13      isatap       ISATAP encapsulation   [RFC5214]
14      teredo       Teredo encapsulation   [RFC4380]
16      softwireMesh softwire mesh tunnel   [RFC5565]
17      dsLite       DS-Lite tunnel         [RFC6333]]]></artwork>
          </figure></t>

        <t></t>
      </section>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>Special thanks to Tom Petch and Martin Bjorklund for the detailed
      review and suggestions.</t>

      <t>Thanks to Andy Bierman for the Yangdoctors review.</t>

      <t>Thanks to Dale Worley, David Black, and Yaron Sheffer for the
      review.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.7950'?>

      <?rfc include='reference.RFC.3688'?>

      <?rfc include='reference.RFC.6991'?>

      <?rfc include='reference.RFC.7224'?>

      <?rfc include='reference.RFC.6241'?>

      <?rfc include='reference.RFC.6242'?>

      <?rfc include='reference.RFC.8341'?>

      <?rfc include='reference.RFC.8342'?>

      <?rfc include='reference.RFC.8040'?>

      <?rfc include='reference.RFC.8446'?>

      <reference anchor="TUNNELTYPE-IANA-REGISTRY"
                 target="https://www.iana.org/assignments/smi-numbers/smi-numbers.xhtml#smi-numbers-6">
        <front>
          <title>ifType definitions: tunnelType</title>

          <author>
            <organization abbrev="IANA">Internet Assigned Numbers
            Authority</organization>
          </author>

          <date />
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.8340'?>

      <?rfc include='reference.I-D.ietf-softwire-yang'?>

      <?rfc include='reference.I-D.thaler-iftype-reg'?>

      <?rfc include='reference.RFC.8343'?>

      <?rfc include='reference.RFC.4087'?>

      <?rfc include='reference.RFC.4380'?>

      <?rfc include='reference.RFC.2003'?>

      <?rfc include='reference.RFC.4213'?>

      <?rfc include='reference.RFC.7856'?>

      <?rfc include='reference.RFC.7870'?>

      <?rfc include='reference.RFC.6346'?>

      <?rfc include='reference.RFC.6333'?>

      <?rfc include='reference.RFC.1701'?>

      <?rfc include='reference.RFC.1702'?>

      <?rfc include='reference.RFC.7676'?>

      <?rfc include='reference.RFC.2004'?>

      <?rfc include='reference.RFC.2661'?>

      <?rfc include='reference.RFC.2637'?>

      <?rfc include='reference.RFC.2341'?>

      <?rfc include='reference.RFC.2107'?>

      <?rfc include='reference.RFC.3618'?>

      <?rfc include='reference.RFC.3056'?>

      <?rfc include='reference.RFC.2529'?>

      <?rfc include='reference.RFC.5214'?>

      <?rfc include='reference.RFC.5565'?>

      <?rfc include='reference.RFC.8085'?>
    </references>

    <section anchor="sample" title="Example Usage">
      <t>The following example illustrates how the Interface YANG module can
      be augmented with tunnel-specific parameters. In this example, the
      module is augmented with a 'remote-endpoint' for the tunnel. A tree
      structure is provided below:</t>

      <t><figure>
          <artwork><![CDATA[module: example-iftunnel-extension
  augment /if:interfaces/if:interface:
    +--rw remote-endpoint?   inet:ipv6-address]]></artwork>
        </figure></t>

      <t>The 'example-iftunnel-extension' module imports the modules defined
      in <xref target="RFC6991"></xref> and <xref target="RFC8343"></xref> in
      addition to the "iana-tunnel-type" module defined in this document.</t>

      <t><figure>
          <artwork><![CDATA[module example-iftunnel-extension {
  yang-version 1.1;

  namespace "urn:ietf:params:xml:ns:yang:example-iftunnel-extension";
  prefix example;

  import ietf-inet-types {
    prefix inet;
    reference
      "Section 4 of RFC 6991";
  }

  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }

  import iana-tunnel-type  {
    prefix iana-tunnel-type;
    reference
      "RFC XXXX:  A Tunnel Extension to the Interface Management
                  YANG Module";
  }
   
  organization "IETF Softwire Working Group";

  contact

    "WG Web:   <https://datatracker.ietf.org/wg/softwire/>
     WG List:  <mailto:softwire@ietf.org>

     Author:  Mohamed Boucadair 
              <mailto:mohamed.boucadair@orange.com>";
     
   description
      "This is an example YANG module to extend the Interface YANG 
       module with tunnel-specific parameters.

      Copyright (c) 2019 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
      (http://trustee.ietf.org/license-info).

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

  revision 2019-04-04 {
    description
      "Initial revision.";
    reference
      "RFC XXXX:  Tunnel Interface Types YANG Module";
  }

  augment "/if:interfaces/if:interface" {
    when "derived-from(if:type, 'iana-tunnel-type:gre')";
    description 
      "Augments Interface module with specific tunnel parameters."; 
        
    leaf remote-endpoint {
      type inet:ipv6-address;
      description 
        "IPv6 address of the remote GRE endpoint.";
    }   
  }
}
]]></artwork>
        </figure></t>
    </section>
  </back>
</rfc>
