Internet Engineering Task Force                                 M. Smith
Internet-Draft                                             July 26, 2017
Intended status: Standards Track
Expires: January 27, 2018


                     Skinny IPv6 in IPv6 Tunnelling
             draft-smith-skinny-ipv6-in-ipv6-tunnelling-00

Abstract

   This memo proposes a method of tunnelling IPv6 packets inside IPv6
   packets with a reduced tunnelling overhead.

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 http://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 January 27, 2018.

Copyright Notice

   Copyright (c) 2017 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.






Smith                   Expires January 27, 2018                [Page 1]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   4
   3.  Skinny IPv6-in-IPv6 Virtual Link Characteristics  . . . . . .   4
   4.  Addressing Tunnel Endpoints . . . . . . . . . . . . . . . . .   4
   5.  Proxied Inner IPv6 Packet Header Fields . . . . . . . . . . .   6
   6.  Non-Proxied Inner IPv6 Packet Header Fields . . . . . . . . .   6
   7.  Hop Limit Handling  . . . . . . . . . . . . . . . . . . . . .   7
   8.  Skinny IPv6-in-IPv6 Tunnel Extension Header . . . . . . . . .   8
     8.1.  Extension Header rather than Destination Option . . . . .   8
     8.2.  Extension Header Format . . . . . . . . . . . . . . . . .   8
     8.3.  Extension Header Fields . . . . . . . . . . . . . . . . .   9
   9.  Encapsulation Procedure . . . . . . . . . . . . . . . . . . .   9
     9.1.  Skinny IPv6-in-IPv6 EH Construction . . . . . . . . . . .  10
     9.2.  Outer IPv6 Packet Construction  . . . . . . . . . . . . .  11
   10. Decapsulation Procedure . . . . . . . . . . . . . . . . . . .  12
   11. Reduction in Overhead . . . . . . . . . . . . . . . . . . . .  14
   12. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  14
   13. Security Considerations . . . . . . . . . . . . . . . . . . .  14
   14. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  14
   15. Change Log [RFC Editor please remove] . . . . . . . . . . . .  14
   16. Informative References  . . . . . . . . . . . . . . . . . . .  15
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  17

1.  Introduction

   There have been some recent proposals to insert additional
   information via Extension Headers (EHs) into IPv6 packets that are
   currently "in-flight", with in-flight meaning that they have left the
   source host that originated the packet and are on their way across
   the network towards the packet's destination host [I-D.voyer-6man-ext
   ension-header-insertion][I-D.francois-dots-ipv6-signal-option].

   The fundamental drawback of inserting EHs into existing packets is
   that while the inserted EH is present, the IPv6 header's Source
   Address field's semantics are incorrect, as the device with the
   recorded source address is not the source of the inserted EH.

   If the inserted EH causes the packet to trigger a mechanism that
   relies on IPv6 header Source Address semantics, such as Path MTU
   Discovery [RFC1981], the triggered mechanism may fail.  This is
   because the mechanism's messages will be sent to the source address
   indicated, rather than the device that inserted the EH.  The device
   inserting the EH is not identified in the packet so that messages can
   be sent to it if necessary.





Smith                   Expires January 27, 2018                [Page 2]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   Troubleshooting is also impacted, in particular when packets are
   received over long Autonomous System paths across the Internet.  If
   an inserted EH is received and causes failures, it isn't possible to
   identify which AS inserted the EH from the received packet.
   Significant time will need to be spent contacting each AS that may
   have inserted the EH, to then inform them that they aren't removing
   the EHs they're inserting.

   The alternative to inserting EHs is to add EHs using IPv6-in-IPv6
   tunnelling e.g., via [RFC2423].  A new IPv6 packet is created with
   the new EH, with the original packet then being the new IPv6 packet's
   payload.  As the source of the added EH is now identified in the
   outer IPv6 packet header, mechanisms such as PMTUD will work
   correctly if addition of the EH triggers the mechanism.

   The drawback of conventional IPv6-in-IPv6 tunnelling is the overhead
   of adding another IPv6 header to the original IPv6 packet, a minimum
   of an additional 40 octets.  It is likely that insertion of EHs into
   existing in-flight packets was motivated by trying to avoid this
   tunnelling encapsulation overhead.

   From the perspective of the original and inner IPv6 packet, IPv6-in-
   IPv6 tunnelling is treating the outer or underlying IPv6 network as
   though it was a link-layer.  The inner IPv6 packet is treated by the
   outer IPv6 packet as a link-layer opaque payload
   [I-D.ietf-intarea-tunnels].

   A property unique to IPv6-in-IPv6 tunnelling, unlike other link-layer
   encapsulations of IPv6 packets, is that all fixed header fields of
   the outer IPv6 "link-layer" packet have the same semantics as all
   fixed header fields of the inner and being carried IPv6 packet.

   If opaque treatment of the inner IPv6 packet by the outer IPv6 packet
   is compromised, matching inner and outer IPv6 packet field semantics
   provides the opportunity to reduce the IPv6-in-IPv6 tunnelling
   overhead.  This can be achieved by partially or fully using a number
   of the outer IPv6 packet's fields as proxies for the inner packet's
   fields while the inner packet is in-flight over the outer IPv6 "link-
   layer".  These inner IPv6 packet's fields are removed during link-
   layer encapsulation and then restored during link-layer
   decapsulation, using the values of the fields from the outer IPv6
   packet.

   This memo describes this method of IPv6-in-IPv6 tunnelling, giving it
   the name "Skinny IPv6-in-IPv6 Tunnelling".  It preserves source
   address semantics for both the inner and outer packet source
   addresses, allowing mechanisms such as PMTUD to function, while also
   reducing tunnelling overhead.



Smith                   Expires January 27, 2018                [Page 3]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   In essence, this memo is a specification for a method of using IPv6
   as a link-layer, adding to others in that set such as [RFC2423].

   A number of the techniques and concepts have been taken from or
   inspired by the previous draft [I-D.smith-enhance-vne-with-ipv6].

2.  Terminology

   Terminology used in this memo is from "IP Tunnels in the Internet
   Architecture" [I-D.ietf-intarea-tunnels].

3.  Skinny IPv6-in-IPv6 Virtual Link Characteristics

   A virtual link created using this method has the following
   characteristics:

   o  Limited to carrying IPv6 packets as link-layer payload.  As many
      IPv4 packet fields have similar if not the same semantics as IPv6
      packet fields, a similar method could be used for carrying IPv4 in
      IPv6, however this is out of scope for this memo.

   o  Point-to-multipoint transmission via IPv6 multicast.  A link node
      (tunnel endpoint) can send a single packet, have it duplicated by
      the link (the underlying IPv6 network) and then have the
      duplicates arrive at multiple destination link nodes.  The set of
      destination link nodes or tunnel endpoints are identified by an
      IPv6 multicast address.

   o  Can be used to create a single link-layer instance (e.g., a single
      point-to-point connection between two routers, hosts, or a host
      and a router, or a single multi-access link interconnecting a set
      of routers), or as one of a set of component links used to create
      a link-layer instance (i.e., a multi-link link-layer topology,
      where links are bridged together.).  In this latter case, a link-
      layer loop prevention mechanism may be needed.

4.  Addressing Tunnel Endpoints

   Initially suggested in [I-D.smith-enhance-vne-with-ipv6], Skinny
   IPv6-in-IPv6 tunnelling uses individual /64s to identify individual
   tunnel endpoints, rather than using individual IPv6 addresses (i.e.,
   /128s).

   For Skinny IPv6-in-IPv6 unicast tunnelling to a tunnel endpoint, this
   allows the lower 64 bits of the outer packet's source and destination
   addresses (the Interface Identifier or IID parts) to carry the
   corresponding lower 64 bits of the inner packet's source and
   destination addresses.  These two sets of 64 bits are removed from



Smith                   Expires January 27, 2018                [Page 4]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   the inner IPv6 packet's addresses, effectively lowering the
   tunnelling overhead by 16 octets.

   Multicast Skinny IPv6-in-IPv6 tunnel endpoints cannot be identified
   by /64s, as IPv6 multicast groups cannot be uniquely created at the
   /64 boundary.  When multicast tunnelling towards a multicast group of
   tunnel endpoints, only the inner packet source address lower 64 bits
   are carried in the outer packet's source address lower 64 bits, and
   removed from the inner source address.  The inner packet's full 128
   bit destination address is carried in the Skinny IPv6-in-IPv6 tunnel
   header.  The removal of the inner packet's source address lower 64
   bits reduces the tunnelling overhead by 8 octets.

   An emergent benefit of this technique of carrying inner packet IIDs
   in the outer packet's addresses between tunnel endpoints is that
   inner packet address entropy useful for load balancing is exposed to
   the network carrying the outer packets.

   Skinny IPv6-in-IPv6 tunnel endpoints are expected to be represented
   as virtual interfaces in routers or hosts, and therefore will have at
   least a Link-Local unicast /128 address per the [RFC4291] interface
   address requirements, and perhaps other individual IPv6 addresses.

   The use of /64s to identify tunnel endpoints means that for other
   non-Skinny IPv6-in-IPv6 traffic originated by or sent to the tunnel
   endpoint, any of the individual IPv6 addresses within the /64 are
   valid as local source or destination addresses for this traffic.
   Examples of other types of traffic originated by or sent to tunnel
   endpoints could be ICMPv6, TCP, or UDP.

   When receiving non-Skinny IPv6-in-IPv6 packets, a tunnel endpoint is
   to consider all destination addresses within its assigned /64 valid
   and local, passing the received packets' payload to the appropriate
   upper layer protocol if supported, or dropping if not and possibly
   emitting an appropriate ICMPv6 message.

   When originating non-Skinny IPv6-in-IPv6 packets from a source
   address within the assigned /64, a common individual address within
   the /64 should be used for all packets, to avoid confusing a receiver
   that does not expect a single device to be assigned an entire /64.
   Alternatively, per connection or per protocol common individual
   source address could be used if useful.  Consistent and expected
   source address usage by the sender is the requirement at the receiver
   that needs to be met.

   If the tunnel endpoint exists on a router (more specifically, is a
   forwarding interface), then the source address for tunnel endpoint




Smith                   Expires January 27, 2018                [Page 5]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   originated packets could be the Subnet-Router anycast address
   [RFC4291], the endpoint's /64 plus an IID of all zeros.

   Alternatively, if the tunnel endpoint exists on a host (more
   specifically, is a non-forwarding interface), then the source address
   should not be the Subnet-Router anycast address.  Some other address
   within the /64, such as a statically configured address, or an
   address generated by the SLAAC procedure [RFC4862][RFC7217][RFC8064]
   should be used.  Non-Subnet Router anycast source addresses could
   also be used by tunnel endpoints on routers.

   In any of these cases, source and destination address selection will
   occur per the standard IPv6 default address selection procedure
   [RFC6724], unless a specific source and/or destination address is
   provided.

5.  Proxied Inner IPv6 Packet Header Fields

   While the inner IPv6 packet is being tunnelled, the following inner
   packet header fields are proxied by the fields in the outer IPv6
   packet header [RFC2460]:

   o  Version

   o  Traffic Class

   o  Flow Label

   o  Source Address lower 64 bits for both unicast and multicast tunnel
      destination endpoints

   o  Destination Address lower 64 bits for unicast tunnel destination
      endpoints

6.  Non-Proxied Inner IPv6 Packet Header Fields

   While the inner IPv6 packet is being tunnelled, values of the
   following inner packet header fields [RFC2460] are carried in fields
   in the Skinny IPv6-in-IPv6 Extension Header.  This allows them to be
   restored upon decapsulation, as the outer packet's header field
   values cannot or may not be used.

   o  Payload Length

   o  Hop Limit

   o  Source Address upper 64 bits




Smith                   Expires January 27, 2018                [Page 6]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   o  Destination Address upper 64 bits

   o  Destination Address lower 64 bits for multicast tunnel destination
      endpoints

7.  Hop Limit Handling

   Conventional link-layers commonly do not have a hop count or hop
   limit field in their frames to mitigate the effects of link-layer
   forwarding loops.  A separate mechanism or method must be used to
   prevent forwarding loops occurring.

   When IPv6 is being used as a link-layer, the packet's Hop Limit field
   and processing acts as a link-layer forwarding loop mitigation
   mechanism.

   It could be useful to have the number of hops the outer packet took
   included in the inner packet's recorded Hop Limit after the inner
   packet has traversed the tunnel.  This would expose the outer IPv6
   packet hops that occurred during tunnelling to the inner IPv6
   packet's network.  This may be useful for troubleshooting, or
   mitigating forwarding loops sooner.

   Alternatively, the number of hops the outer IPv6 packet took could be
   hidden from the inner IPv6 packet's network, by restoring the Hop
   Limit value from the Hop Limit field value in the Skinny IPv6-in-IPv6
   Extension Header.  Restoring the inner packet's pre-Skinny Ipv6-in-
   IPv6 Hop Limit value is critical when the Neighbor Discovery protocol
   [RFC4861] is used across the Skinny IPv6-in-IPv6 virtual link.  This
   is necessary as to ensure these ND packets have not come from an off-
   link source, their Hop Limit is set to 255 upon transmission and the
   recipient will only accept ND packets that arrive with a Hop Limit
   value of 255.

   Whether to use the outer packet's Hop Limit value or to use the inner
   Skinny IPv6-in-IPv6 EH preserved Hop Limit value during inner IPv6
   packet header reconstruction is indicated by the value of the Skinny
   IPv6-in-IPv6 EH preserved Hop Limit field value when it arrives at
   the destination tunnel endpoint.  If the value is 0, the outer IPv6
   packet header's current Hop Limit value is used during
   reconstruction, where as if the value is non-zero (e.g., 255 for ND
   packets), then that value is used during inner IPv6 packet
   reconstruction.








Smith                   Expires January 27, 2018                [Page 7]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


8.  Skinny IPv6-in-IPv6 Tunnel Extension Header

   While the original IPv6 packet is being tunnelled, the Skinny IPv6
   Extension Header carries the particles of the original inner IPv6
   packet's header that are or may not be being proxied in the outer
   IPv6 packet header.

8.1.  Extension Header rather than Destination Option

   [RFC6564] requires justification for the creation of a new Extension
   Header rather than the creation of a new Destinations Options Header
   option.

   The creation of a Skinny IPv6-in-IPv6 Extension Header is requested
   for the following reasons:

   o  Simplified header processing, which will be beneficial at high
      packet per second rates.  The receiving device will only need to
      look up a single Next Header value in either the outer IPv6 header
      or the previous Extension Header to determine that a Skinny IPv6-
      in-IPv6 EH follows.  This is in comparison to a two stage lookup
      to process a Destination Option in a Destination Option EH.

   o  Consistent with other IPv6-in-IPv6 tunnelling encapsulations that
      use Extension Headers such as conventional IPv6-in-IPv6 [RFC2423]
      and GRE [RFC7676].

8.2.  Extension Header Format

   (ASCII art to come!)

   o  Next Header - 8 bits.

   o  Hdr Ext Len - 8 bits.

   o  Reserved - 24 bits.

   o  Inner Payload Length - 16 bits.

   o  Inner Hop Limit - 8 bits.

   o  Inner SA 64 bit Prefix - 64 bits / 8 octets.

   o  Inner DA 64 bit Prefix - 64 bits / 8 octets.

   o  Inner DA 64 bit IID - 64 bits / 8 octets.





Smith                   Expires January 27, 2018                [Page 8]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


8.3.  Extension Header Fields

   o  Next Header - 8 bits field, specifying the header type of the
      header that immediately followed the inner IPv6 packet's original
      IPv6 fixed header.  May be another extension header value, or an
      upper layer protocol value such as UDP or TCP.

   o  Hdr Ext Len - 8 bit field, specifying the length of this Skinny
      IPv6-in-IPv6 extension header in units of 8 octets, minus the
      first unit of 8 octets.  The valid values are 2 or 3.

   o  Reserved - 24 bits field reserved for future use, to 8 octet align
      the extension header.  Set to zero upon transmission, ignored upon
      receipt.  A possible future use of one or more of these octets is
      as a flag field.

   o  Inner Payload Length - 16 bits Payload Length field value from the
      inner IPv6 packet before Skinny IPv6-in-IPv6 encapsulation
      occurred.

   o  Inner Hop Limit - 8 bits Hop Limit field value from inner IPv6
      packet before Skinny IPv6-in-IPv6 encapsulation occurred, or zero.

   o  Inner SA 64 bit Prefix - upper 64 bits / 8 octets of the inner
      IPv6 packet's source address, prior to Skinny IPv6-in-IPv6
      encapsulation.

   o  Inner DA 64 bit Prefix - upper 64 bits / 8 octets of the inner
      IPv6 packet's destination address, prior to Skinny IPv6-in-IPv6
      encapsulation.

   o  Inner DA 64 bit IID - optional lower 64 bits / 8 octets of the
      inner IPv6 packet's destination address when the outer Skinny
      IPv6-in-IPv6 packet's destination is a multicast group of tunnel
      endpoints.

9.  Encapsulation Procedure

   The following steps describe the encapsulation procedure performed by
   the ingress Skinny IPv6-in-IPv6 tunnel endpoint upon a IPv6 packet
   that is being tunnelled.  Note that it is a functional description,
   meaning that implementations may perform different and more
   performance oriented steps that achieve the same functional outcome.

   After receiving the packet to be Skinny IPv6-in-IPv6 tunnelled from
   the upper IPv6 network layer:





Smith                   Expires January 27, 2018                [Page 9]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


9.1.  Skinny IPv6-in-IPv6 EH Construction

   1.   Create a new instance of the Skinny IPv6-in-IPv6 Extension
        Header.  If the destination tunnel endpoint is a multicast
        destination, the new EH instance will need to provide the
        optional Inner DA 64 bit IID field.

   2.   Set the new EH's Next Header value to the Next Header value in
        the original IPv6 packet header's Next Header field value.

   3.   If the destination Skinny-IPv6-in-IPv6 tunnel endpoint is an
        individual /64, set the new EH's Hdr Ext Len field value to 2.
        If the destination Skinny-IPv6-in-IPv6 tunnel endpoint is a
        multicast address, set the new EH's Hdr Ext Len field value to
        3.

   4.   Set the new EH's Reserved field bits all to zeros.

   5.   Set the new EH's Inner Payload Length field to the original IPv6
        packet header's Payload Length field value.

   6.   If the tunnel endpoint is configured to use the outer IPv6
        packet header's Hop Limit value after tunnelling when
        reconstructing the inner IPv6 packet during decapsulation, set
        the new EH's Inner Hop Limit field value to zero.

   7.   If the tunnel endpoint is not configured to use the original
        IPv6 packet header's Hop Limit value after tunnelling, the
        default configuration, set the new EH's Inner Hop Limit field
        value to the original inner IPv6 packet's Hop Limit value (note
        that this will be after the Hop Limit has been decremented if
        the IPv6 packet is being forwarded per [RFC2460]).

   8.   Set the new EH's Inner SA 64 bit Prefix field to the high order
        8 octets of the original IPv6 packet header's source address
        high order 8 octets.

   9.   Set the new EH's Inner DA 64 bit Prefix field to the high order
        8 octets of the original IPv6 packet header's destination
        address high order 8 octets.

   10.  If the destination Skinny-IPv6-in-IPv6 tunnel endpoint is a
        multicast address, set the new EH's Inner DA 64 bit IID field to
        the low order 8 octets of the original IPv6 packet header's
        destination address low order 8 octets.






Smith                   Expires January 27, 2018               [Page 10]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


9.2.  Outer IPv6 Packet Construction

   1.   Create a new instance of an IPv6 packet header, and set its
        Version field value to 6.

   2.   Set the new IPv6 packet header's Traffic Class field value to
        the original IPv6 packet header's Traffic Class field value.

   3.   Set the new IPv6 packet header's Flow Label field value to the
        original IPv6 packet header's Flow Label field value.

   4.   If the tunnel endpoint is configured to use the outer IPv6
        packet header's Hop Limit value after tunnelling when
        reconstructing the inner IPv6 packet during decapsulation, set
        the new IPv6 packet header's Hop Limit to the original inner
        IPv6 packet header's Hop Limit field value.

   5.   If the tunnel endpoint is not configured to use the original
        IPv6 packet header's Hop Limit value after tunnelling, the
        default configuration, set the new IPv6 packet header's Hop
        Limit field value to the device's current Hop Limit default
        value when originating packets.

   6.   Set the new IPv6 packet header's Source Address high order 8
        octets/64 bits to the tunnel endpoint's /64 value.

   7.   Set the new IPv6 packet header's Source Address low order 8
        octets/64 bits to the original IPv6 packet's Source Address low
        order 8 octets.

   8.   Set the new IPv6 packet header's Destination Address high order
        8 octets/64 bits to the destination tunnel endpoint's /64 value,
        or for a multicast tunnel destination, the high order 8 octets
        of the destination multicast address.

   9.   Set the new IPv6 packet header's Destination Address low order 8
        octets/64 bits to the original IPv6 packet's Destination Address
        lower order 8 octets, or for a multicast tunnel destination, the
        low order 8 octets of the destination multicast address.

   10.  Append any additional tunnel endpoint specific EHs to the new
        IPv6 packet header.

   11.  Set the new IPv6 packet header's Next Header field value to the
        first of the tunnel endpoint specific EHs selector value.

   12.  Append the Skinny IPv6-in-IPv6 EH to the end of the existing set
        of EHs.



Smith                   Expires January 27, 2018               [Page 11]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   13.  Append the original IPv6 packet's set of EHs after the Skinny
        IPv6-in-IPv6 EH, if any exist.

   14.  Append the original IPv6 packet's payload.

   15.  Set the new IPv6 packet header's Payload Length value based on
        the tunnel endpoint specific EHs, the Skinny IPv6-in-IPv6 EH and
        the original IPv6 packet's payload.

   16.  Discard the original IPv6 packet, as it has now been fully
        Skinny IPv6-in-IPv6 encapsulated.

   17.  Send the new IPv6 Skinny IPv6-in-IPv6 packet.

10.  Decapsulation Procedure

   The following steps describe the decapsulation procedure performed by
   the egress Skinny IPv6-in-IPv6 tunnel endpoint upon a IPv6 packet
   that has been tunnelled.  Note that it is a functional description,
   meaning that implementations may perform different and more
   performance oriented steps that achieve the same functional outcome.
   (An obvious optimisation is to utilise the received packet header
   when reconstructing the original Skinny IPv6-in-IPv6 tunnelled
   packet's header, avoiding a number of copy operations among other
   things.)

   After receiving the Skinny IPv6-in-IPv6 packet from the network:

   1.   Perform any Extension Header processing for the EHs that reside
        after the received fixed IPv6 header and before the Skinny IPv6-
        in-IPv6 Extension Header.

   2.   Create a new instance of an IPv6 packet header, and set its
        Version field value to 6.  This is the IPv6 packet header that
        is being used to reconstruct the original inner IPv6 packet.

   3.   From the received Skinny IPv6-in-IPv6 outer packet header, copy
        the Traffic Class field value into the new IPv6 header's Traffic
        Class field.

   4.   From the received Skinny IPv6-in-IPv6 outer packet header, copy
        the Flow Label field value into the new IPv6 header's Flow Label
        field.

   5.   From the Skinny IPv6-in-IPv6 Extension Header, copy the Inner
        Payload Length field value into the new IPv6 header's Payload
        Length field.




Smith                   Expires January 27, 2018               [Page 12]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   6.   From the Skinny IPv6-in-IPv6 Extension Header, copy the Next
        Header field value into the new IPv6 header's Next Header field.

   7.   If the Skinny IPv6-in-IPv6 Extension Header's Inner Hop Limit
        field value is 0, copy the received Skinny IPv6-in-IPv6 outer
        packet header's Hop Limit field value into the new IPv6 header's
        Hop Limit field.

   8.   If the Skinny IPv6-in-IPv6 Extension Header's Inner Hop Limit
        field value is not 0, copy the Skinny IPv6-in-IPv6 Extension
        Header's Inner Hop Limit field value into the new IPv6 header's
        Hop Limit field.

   9.   From the Skinny IPv6-in-IPv6 Extension Header, copy the SA 64
        bit Prefix into the high order 64 bits of the new IPv6 header's
        Source Address field.

   10.  From the received Skinny IPv6-in-IPv6 outer packet header, copy
        the low order 64 bits of the Source Address into the low order
        64 bits of the the new IPv6 header's Source Address field.

   11.  From the Skinny IPv6-in-IPv6 Extension Header, copy the DA 64
        bit Prefix into the high order 64 bits of the new IPv6 header's
        Destination Address field.

   12.  If the Skinny IPv6-in-IPv6 Extension Header's Hdr Ext Len field
        value is 2, copy the low order 64 bits of the Destination
        Address from the received Skinny IPv6-in-IPv6 outer packet
        header into the low order 64 bits of the new IPv6 header's
        Destination Address field.

   13.  If the Skinny IPv6-in-IPv6 Extension Header's Hdr Ext Len field
        value is 3, copy the Skinny IPv6-in-IPv6 Extension Header's
        Inner DA 64 bit IID field value into the low order 64 bits of
        the new IPv6 header's Destination Address field.

   14.  If the Skinny IPv6-in-IPv6 Extension Header's Hdr Ext Len field
        value is not 2 or 3, discard the new IPv6 packet header and the
        received Skinny IPv6-in-IPv6 packet; if required, record them as
        discarded (e.g., in a tunnel interface discarded packet
        counter); and abort the decapsulation procedure.

   15.  Append any Extension Headers that followed the Skinny IPv6-in-
        IPv6 Extension Header to the new IPv6 header.

   16.  Append the Skinny IPv6-in-IPv6's packet's payload to the new
        IPv6 packet, after the appended Extension Headers.




Smith                   Expires January 27, 2018               [Page 13]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   17.  Discard the received Skinny IPv6-in-IPv6 packet.

   18.  Submit the new IPv6 packet to the device's upper IPv6 layer for
        further processing (such as forwarding or local processing based
        on the destination address).

11.  Reduction in Overhead

   Conventional IPv6 tunnelling described in [RFC2423] adds at least
   another 40 octets to the original packet being tunnelled, as that is
   the size of the fixed IPv6 header.

   Using the method described in this memo, for packets destined to a
   single (unicast) tunnel endpoint, this 40 octet overhead is reduced
   to 24 octets, a saving of 16 octets.  This is a 40 percent saving.

   Using the method described in this memo, for packets destined to
   multiple tunnel endpoint identified by an IPv6 multicast address,
   this 40 octet overhead is reduced to 32 octets, a saving of 8 octets.
   This is a 20 percent saving.

12.  IANA Considerations

   IANA are requested to allocate an IPv6 Next Header value for use by
   the Skinny IPv6-in-IPv6 Extension header, per [RFC5237].

13.  Security Considerations

   There are no security considerations specific to Skinny IPv6-in-IPv6
   tunnelling.  General tunnelling security considerations apply
   [RFC6169].

14.  Acknowledgements

   Review and comments were provided by YOUR NAME HERE!

   This memo was prepared using the xml2rfc tool.

15.  Change Log [RFC Editor please remove]

   draft-smith-skinny-ipv6-in-ipv6-tunnelling-00, initial version,
   2017-07-13

   draft-smith-skinny-ipv6-in-ipv6-tunnelling-01, first revision,
   2017-07-13

   o  Forgot Abstract in 00.  Facepalm!




Smith                   Expires January 27, 2018               [Page 14]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   draft-smith-skinny-ipv6-in-ipv6-tunnelling-02, second revision,
   2017-07-13

   o  Typo in Abstract.  Facepalm again!

   draft-smith-skinny-ipv6-in-ipv6-tunnelling-01, third revision, 2017-
   0x-xx

   o  Revert revision back to 00, as IETF ID submission tool complains.
      Previous were private revisions, waiting for IETF ID tool to
      become available again (two weeks pre-IETF99 meeting)

16.  Informative References

   [I-D.francois-dots-ipv6-signal-option]
              Francois, J., Lahmadi, A., and M. Davids, "IPv6 DOTS
              Signal Option", draft-francois-dots-ipv6-signal-option-02
              (work in progress), May 2017.

   [I-D.ietf-intarea-tunnels]
              Touch, J. and M. Townsley, "IP Tunnels in the Internet
              Architecture", draft-ietf-intarea-tunnels-07 (work in
              progress), June 2017.

   [I-D.smith-enhance-vne-with-ipv6]
              Smith, M., "Enhancing Virtual Network Encapsulation with
              IPv6", draft-smith-enhance-vne-with-ipv6-07 (work in
              progress), October 2015.

   [I-D.voyer-6man-extension-header-insertion]
              daniel.voyer@bell.ca, d., daniel.bernier@bell.ca, d.,
              Leddy, J., Filsfils, C., Previdi, S., Salsano, S.,
              Cianfrani, A., Lebrun, D., Bonaventure, O., Jonnalagadda,
              P., Sharif, M., Elmalky, H., Abdelsalam, A., Raszuk, R.,
              Ayyangar, A., Steinberg, D., and W. Henderickx, "Insertion
              of IPv6 Segment Routing Headers in a Controlled Domain",
              draft-voyer-6man-extension-header-insertion-00 (work in
              progress), March 2017.

   [RFC1981]  McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery
              for IP version 6", RFC 1981, DOI 10.17487/RFC1981, August
              1996, <http://www.rfc-editor.org/info/rfc1981>.

   [RFC2423]  Vaudreuil, G. and G. Parsons, "VPIM Voice Message MIME
              Sub-type Registration", RFC 2423, DOI 10.17487/RFC2423,
              September 1998, <http://www.rfc-editor.org/info/rfc2423>.





Smith                   Expires January 27, 2018               [Page 15]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   [RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
              (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
              December 1998, <http://www.rfc-editor.org/info/rfc2460>.

   [RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing
              Architecture", RFC 4291, DOI 10.17487/RFC4291, February
              2006, <http://www.rfc-editor.org/info/rfc4291>.

   [RFC4861]  Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
              "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
              DOI 10.17487/RFC4861, September 2007,
              <http://www.rfc-editor.org/info/rfc4861>.

   [RFC4862]  Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
              Address Autoconfiguration", RFC 4862,
              DOI 10.17487/RFC4862, September 2007,
              <http://www.rfc-editor.org/info/rfc4862>.

   [RFC5237]  Arkko, J. and S. Bradner, "IANA Allocation Guidelines for
              the Protocol Field", BCP 37, RFC 5237,
              DOI 10.17487/RFC5237, February 2008,
              <http://www.rfc-editor.org/info/rfc5237>.

   [RFC6169]  Krishnan, S., Thaler, D., and J. Hoagland, "Security
              Concerns with IP Tunneling", RFC 6169,
              DOI 10.17487/RFC6169, April 2011,
              <http://www.rfc-editor.org/info/rfc6169>.

   [RFC6564]  Krishnan, S., Woodyatt, J., Kline, E., Hoagland, J., and
              M. Bhatia, "A Uniform Format for IPv6 Extension Headers",
              RFC 6564, DOI 10.17487/RFC6564, April 2012,
              <http://www.rfc-editor.org/info/rfc6564>.

   [RFC6724]  Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown,
              "Default Address Selection for Internet Protocol Version 6
              (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012,
              <http://www.rfc-editor.org/info/rfc6724>.

   [RFC7217]  Gont, F., "A Method for Generating Semantically Opaque
              Interface Identifiers with IPv6 Stateless Address
              Autoconfiguration (SLAAC)", RFC 7217,
              DOI 10.17487/RFC7217, April 2014,
              <http://www.rfc-editor.org/info/rfc7217>.

   [RFC7676]  Pignataro, C., Bonica, R., and S. Krishnan, "IPv6 Support
              for Generic Routing Encapsulation (GRE)", RFC 7676,
              DOI 10.17487/RFC7676, October 2015,
              <http://www.rfc-editor.org/info/rfc7676>.



Smith                   Expires January 27, 2018               [Page 16]


Internet-Draft       Skinny IPv6-in-IPv6 Tunnelling            July 2017


   [RFC8064]  Gont, F., Cooper, A., Thaler, D., and W. Liu,
              "Recommendation on Stable IPv6 Interface Identifiers",
              RFC 8064, DOI 10.17487/RFC8064, February 2017,
              <http://www.rfc-editor.org/info/rfc8064>.

Author's Address

   Mark Smith
   PO BOX 521
   HEIDELBERG, VIC  3084
   AU

   Email: markzzzsmith@gmail.com






































Smith                   Expires January 27, 2018               [Page 17]