Internet Engineering Task Force                                A. Bhati
Internet Draft                                      Samsung Electronics
Intended status: Standards Track                       October 25, 2016
Expires: April 2017



             Layer Two Tunneling Protocol - Version 4 (L2TPv4)
                     draft-bhati-l2tpext-l2tpv4-00.txt


Status of this Memo

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



   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008. The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   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."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html

   This Internet-Draft will expire on April 25, 2009.




Bhati                   Expires April 25, 2017                 [Page 1]


Internet-Draft                  L2TPv4                     October 2016


Copyright Notice

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



































Bhati                   Expires April 25, 2017                 [Page 2]


Internet-Draft                  L2TPv4                     October 2016


Abstract

   This document describes the Layer Two Tunneling protocol (L2TPv4).
   L2TPv4 defines implementation friendly and more secured encapsulation
   headers for carrying multiple Layer 2 connections between two IP
   nodes.

Table of Contents


   1. Introduction...................................................4
      1.1. Changes from RFC 3931.....................................4
   2. Conventions used in this document..............................4
   3. L2TPv4 data packet header format...............................5
      3.1. Discussion................................................8
   4. L2TPv4 control packet header format............................9
      4.1. Discussion...............................................11
   5. Security Considerations.......................................12
   6. IANA Considerations...........................................12
   7. Conclusions...................................................12
   8. References....................................................13
      8.1. Normative References.....................................13
      8.2. Informative References...................................13
   9. Acknowledgments...............................................13
   Appendix A. Received Packet Processing...........................14
   Appendix B. Packet Header Encapsulation Processing...............17























Bhati                   Expires April 25, 2017                 [Page 3]


Internet-Draft                  L2TPv4                     October 2016


1. Introduction

   L2TP as originally defined in RFC 2661, is a standard method for
   tunneling Point-To-Point (PPP) [RFC 1661] sessions. L2TP is then
   modified in L2TPv3 for adoption of tunneling a number of other L2
   protocols. This document describes L2TPv4 encapsulation headers (for
   data packets and control packets) that is implementation friendly and
   provides more security features. Irrespective of whether we carry
   L2TPv4 payload as IP layer payload [IP + L2TP + layer-2 header +
   payload] or transport layer payload [IP + UDP + L2TP + layer-2 header
   + payload], L2TPv4 encapsulation header format will be same.

   The following header formats are described in following sections.

   o  L2TPv4 data packet header over IP or UDP

   o  L2TPv4 control packet header over IP or UDP



1.1. Changes from RFC 3931

   Everything that is described in RFC 3931 will remain intact except
   the L2TP header formats for data packets and control packets. This
   draft document proposes to use common L2TPv4 data packet header
   format irrespective of the PSNs over which L2TPv4 is operating. This
   draft document also proposes to use common L2TPv4 control packet
   header format irrespective of the PSNs over which L2TPv4 is
   operating. L2TPv3 data and control header formats are different in
   cases when L2TPv3 is operating over IP or over UDP. This draft
   document proposes to replace those differences with similarities
   across PSNs.

   L2Tpv4 implementations MUST support L2TP over IP and should support
   L2TP over UDP for better NAT and firewall traversal, and for easier
   migration from previous L2TP implementations.





2. Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].



Bhati                   Expires April 25, 2017                 [Page 4]


Internet-Draft                  L2TPv4                     October 2016


3. L2TPv4 data packet header format

   L2TPv4 data packet header format is described in the following
   figure. This header format is same irrespective of PSNs [over IP,
   over UDP] over which L2TP is operating.



     0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V|V|V|V|T|C|S|X|X|X|X|X|X|X|X|X|    L2TP Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Proto     |Proto Hdr Len  |    L2TP Payload Length        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     L2TP Session Id                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Session Cookie (Optional, maximum 64 bits)
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                                                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


                    Figure 1 L2TPv4 data packet header



   VVVV:

   A 4 bit field which indicates version of L2TP header. Its value is
   equal to 0100 for L2TPv4 data packet.



   T:

   A 1 bit field which indicates whether it is a data packet or control
   packet. Its value is equal to 0 for data packets.











Bhati                   Expires April 25, 2017                 [Page 5]


Internet-Draft                  L2TPv4                     October 2016


   C:

   A 1 bit field which indicates header checksum is present inside L2TP
   header and needs to be validated. Checksum calculation is similar to
   IPv4 header checksum calculation as described in [RFC 1071]. For L2TP
   data packets directly operating over IP, it is recommended to set
   this bit and update the 16-bit checksum value inside L2TP header.
   This bit can be set to 0 in case L2TP is operating over UDP because
   UDP checksum can be used to provide integrity to L2TP header and its
   payload. If C bit is zero, checksum field MUST contain 0x0000 as 16
   bit value. Checksum covers all bytes starting from first bit of L2TP
   header till last byte of session cookie value (if present).



   S:

   A 1 bit field which indicates session cookie value is present inside
   L2TP header and a comparison is required between this value and
   cookie present inside L2TP session context.



   L2TP Header Checksum:

   A 16 bit field which contains checksum value and covers entire L2TP
   header. This value should be written to all zeros before actually
   doing the checksum calculation on header bytes.



   Proto:

   An 8 bit field which contains the protocol value which L2TP is
   carrying inside as a payload. As described in [RFC 3931], this is
   equal to the pseudo-wire type. For example: If L2TP is used to carry
   PPP frames, the Pseudo-wire type PS-WIRE-PPP should be set as proto
   value inside L2TP header. This value of protocol is covered inside
   L2TP header integrity checksum.










Bhati                   Expires April 25, 2017                 [Page 6]


Internet-Draft                  L2TPv4                     October 2016


   Proto Header Length:

   An 8 bit field which carries length of protocol header which is
   encapsulated inside L2TP protocol. As described in [RFC 3931], this
   is equal to the length of pseudo-wire header. For example: If L2TP is
   used to carry HDLC frames, the Pseudo-wire type PS-WIRE-HDLC should
   be set as proto value inside L2TP header and proto header length
   should be set to 4. For any encapsulation sequence, we always know
   how many bytes of pseudo-wire header are added before encapsulation
   of L2TP headers. This value of protocol header length is covered
   inside L2TP header integrity checksum.



   L2TP Payload Length:

   A 16 bit field which carries total length of L2TP payload. This value
   does not include L2TP header length. If L2TP is used to carry PPP
   frames, then L2TP payload length value is equal to sum of PPP header
   and PPP payload bytes.



   L2TP Session ID:

   A 32 bit field containing a non-zero identifier for a session as
   described in [RFC 3931].



   L2TP Session Cookie:

   The optional cookie field contains a variable length value (maximum
   64 bits) used to check the association of a received data message
   with the session identified by the Session ID. It is as described in
   [RFC 3931].













Bhati                   Expires April 25, 2017                 [Page 7]


Internet-Draft                  L2TPv4                     October 2016


3.1. Discussion

   The above mentioned format of L2TP data message header shall be used
   irrespective of whether L2TP is operating over IP or over UDP. The
   main reason for not having L2TP header length inside L2TP header is
   to avoid guessing the actual session cookie length by intermediate
   entities. The prediction of session cookie by intermediate entities
   can compromise the L2TP security features.

   If IPv4 protocol value is 115, and first 5 bits after end of IPv4
   header are equal to 01000, then we MUST interpret the packet as
   L2TPv4 data packet.

   If IPv4 protocol value is 17, then 8 bytes of UDP header will be
   present after IPv4 header. If operating over UDP, L2TP peers usually
   agree on a UDP port range. If UDP destination port falls in between
   that range and first 5 bits after UDP header are equal to 01000, then
   we MUST interpret the packet as L2TPv4 data packet.

   Addition of version bits inside L2TP header flags makes it easier to
   define future versions of L2TP protocol. It is also easier for the
   implementations to switch between different versions dynamically when
   L2TP entity receives L2TP packets of different versions. This
   scenario can happen when multiple LAC with different L2TP versions
   establish tunnel with LNS which supports all versions of L2TP
   protocol.























Bhati                   Expires April 25, 2017                 [Page 8]


Internet-Draft                  L2TPv4                     October 2016


4. L2TPv4 control packet header format

   L2TPv4 data packet header format is described in the following
   figure. This header format is same irrespective of PSNs [over IP,
   over UDP] over which L2TP is operating.



     0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V|V|V|V|T|C|S|X|X|X|X|X|X|X|X|X|    L2TP Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Length               |    Reserved                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Control Connection Id                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Ns                 |         Nr                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


                   Figure 2 L2TPv4 control packet header



   VVVV:

   A 4 bit field indicates the version of L2TP header. Its value is
   equal to 0100 for L2TPv4 control packet.



   T:

   A 1 bit field indicates whether it is a data packet or control
   packet. Its value is equal to 1 for control packets.













Bhati                   Expires April 25, 2017                 [Page 9]


Internet-Draft                  L2TPv4                     October 2016


   C:

   A 1 bit field which indicates header checksum is present inside L2TP
   header and needs to be validated. Checksum calculation is similar to
   IPv4 header checksum calculation as described in [RFC 1071]. For L2TP
   data packets directly operating over IP, it is recommended to set
   this bit and update the 16-bit checksum value inside L2TP header.
   This bit can be set to 0 in case L2TP is operating over UDP because
   UDP checksum can be used to provide security to L2TP header and its
   payload. Checksum covers all bytes starting from first bit of L2TP
   header till last bit of Nr field.



   S:

   A 1 bit field indicates sequence numbers (Ns and Nr) are present
   inside L2TP control packet header.



   L2TP Header Checksum:

   A 16 bit field contains checksum value for L2TPv4 control packet
   header. This value should be written to all zeros before actually
   doing the checksum calculation on header bytes.



   Length:

   A 16 bit field carries length of control packet bytes. This is equal
   to the sum of L2TPv4 control header bytes and L2TPv4 control payload.
   This length is covered inside the checksum calculation of L2TPv4
   control packet, if C bit is 1.



   Control Connection ID:

   A 32 bit field which carries control connection identifier. This
   value is detailed in RFC 3931.







Bhati                   Expires April 25, 2017                [Page 10]


Internet-Draft                  L2TPv4                     October 2016


   Ns:

   A 16 bit field carries control message sequence number for the sender
   of control message. Interpretation of this field is governed by [RFC
   3931]. This field is present only is S bit is set in L2TPv4 flags.



   Nr:

   A 16 bit field carries last received message number which is used to
   acknowledge messages received by a L2TP peer. Interpretation of this
   field is governed by [RFC 3931]. This field is present only if S bit
   is set in L2TPv4 flags.



4.1. Discussion

   This format of L2TP control message header shall be used irrespective
   of whether L2TP is operating over IP or over UDP. If IP protocol
   value is 115, and first 5 bits of L2TP header are equal to 01001,
   then we shall interpret the packet as L2TP control packet.

   When operating directly over IP, L2TP packets lose the ability to
   take advantage of UDP checksum as a simple measure for packet
   integrity check, which is of a particular concern to L2TP control
   messages. That is the main reason to include L2TP header checksum as
   an optional field inside L2TPv4 headers. The presence or absence of
   actual checksum is controlled by C bit in L2TPv4 header flags.

   If IP protocol value is 17, then 8 bytes of UDP header will be
   present after IP header. If operating over UDP, L2TP peers usually
   agree on a UDP port range. If UDP destination port falls in between
   that range and first 5 bits after UDP header are equal to 01001, then
   we shall interpret the packet as L2TPv4 control packet.













Bhati                   Expires April 25, 2017                [Page 11]


Internet-Draft                  L2TPv4                     October 2016


5. Security Considerations

   This section addresses data header integrity concern. Optional header
   checksum field is added inside data packet header which is calculated
   over L2TP data header including variable length of session cookie
   field. If session cookie flag is set in data packet header, it is
   recommended that header checksum flag MUST be set to 1 for additional
   level of integrity check.



6. IANA Considerations

   This draft document does not request any IANA action.



7. Conclusions

   This draft document proposes header formats for L2TPv4 data and
   control packets which are implementation friendly and provides
   additional level of integrity check via new fields inside headers.
   The header formats of data packet and control packet are common
   whether we carry L2TP over IP or L2TP over UDP.

























Bhati                   Expires April 25, 2017                [Page 12]


Internet-Draft                  L2TPv4                     October 2016


8. References

8.1. Normative References

   [1]   Bradner, S., "Key words for use in RFCs to Indicate Requirement
         Levels", BCP 14, RFC 2119, March 1997.

   [2]   Crocker, D. and Overell, P.(Editors), "Augmented BNF for Syntax
         Specifications: ABNF", RFC 2234, Internet Mail Consortium and
         Demon Internet Ltd., November 1997.

   [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2234] Crocker, D. and Overell, P.(Editors), "Augmented BNF for
             Syntax Specifications: ABNF", RFC 2234, Internet Mail
             Consortium and Demon Internet Ltd., November 1997.

8.2. Informative References

   [RFC 2661] W. Townsley, A. Valencia, A. Rubens, G. Pall, G.Zorn,
         B.Palter, "Layer Two Tunneling Protocol "L2TP", RFC 2661,
         August 1999

   [RFC 3931] J. Lau, M. Townsley, I. Goyret, "Layer Two Tunneling
         Protocol - Version 3 (L2TPv3), RFC 3931, March 2005

9. Acknowledgments

   Many of the protocol constructs were originally defined in RFC 2661,
   "L2TPv2". RFC 2661 authors are W. Townsley, A. Valencia, A. Rubens,
   G. Pall, G. Zorn, B. Palter. Thanks so much for defining a wonderful
   protocol.

   Thanks to the authors of RFC 3931 "L2TPv3". RFC 3931 authors are J.
   Lau, M. Townsley, I. Goyret. Addition of multiple pseudo wire types
   is indeed an important update to L2TP protocol.

   Big Thanks to J. Touch who has prepared the word template document to
   edit/write new RFC documents. It is really difficult to write a new
   RFC without this template. This document was prepared using 2-Word-
   v2.0.template.dot.







Bhati                   Expires April 25, 2017                [Page 13]


Internet-Draft                  L2TPv4                     October 2016


Appendix A.                 Received Packet Processing

   void rcvd_packet_process(uint8_t *pkt_ptr)

   {

      ip_hdr_ptr = (ip_hdr_t *)(pkt_ptr);

      if(115 == ip_hdr_ptr->protocol)

      {

         l2tp_hdr_ptr = (uint8_t *)(ip_hdr_ptr + ip_hdr_length);

         first_two_bytes = *((uint16_t *)(l2tp_hdr_ptr));

         if(0x4000 == first_two_bytes & 0x4800)

         {

            // this is L2TPv4 data packet

         }

         else if(0x4800 == first_two_bytes & 0x4800)

         {

            // this is L2TPv4 control packet

         }

         else

         {

            // MUST discard this packet

         }

      }








Bhati                   Expires April 25, 2017                [Page 14]


Internet-Draft                  L2TPv4                     October 2016


      else if(17 == ip_hdr_ptr->protocol)

      {

         udp_hdr_ptr = (udp_hdr_t *)(ip_hdr_ptr + 1);

         if(l2tp_session_ptr->udp_min < udp_hdr_ptr->dest_port &&

            l2tp_session_ptr->udp_max > udp_hdr_ptr->dest_port &&

            l2tp_session_ptr->l2tp_over_udp == 1)

         {

            l2tp_hdr_ptr = (l2tp_hdr_t *)(udp_hdr_ptr + 1);

            first_two_bytes = *((uint16_t *)(l2tp_hdr_ptr));

            if(0x4000 == first_two_bytes & 0x4800)

            {

               // this is L2TPv4 data packet

            }

            else if(0x4800 == first_two_bytes & 0x4800)

            {

               // this is L2TPv4 control packet

            }

            else

            {

               // MUST discard this packet

            }

         }

      }

   }


Bhati                   Expires April 25, 2017                [Page 15]


Internet-Draft                  L2TPv4                     October 2016






   Copyright (c) 2016 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, are permitted provided that the following conditions
   are met:

   o  Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.

   o  Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in
      the documentation and/or other materials provided with the
      distribution.

   o  Neither the name of Internet Society, IETF or IETF Trust, nor the
      names of specific contributors, may be used to endorse or promote
      products derived from this software without specific prior written
      permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.














Bhati                   Expires April 25, 2017                [Page 16]


Internet-Draft                  L2TPv4                     October 2016


Appendix B.                 Packet Header Encapsulation Processing

   void l2tp_data_packet_sender(uint8_t *pkt_ptr,

                                uint16_t pkt_len,

                                void *l2tp_session_context)

   {

      switch(l2tp_session_context->pw_type)

      {

         case 'PPP':

            l2_hdr_size = 4;

            l2_hdr_ptr = pkt_ptr - l2_hdr_size;

            *((uint32_t *)(l2tp_hdr_ptr)) = layer_2_hdr_value;

            break;

         case 'HDLC':

            l2_hdr_size = 4;

            l2_hdr_ptr = pkt_ptr - l2_hdr_size;

            *((uint32_t *)(l2tp_hdr_ptr)) = layer_2_hdr_value;

            break;

         case 'consider other cases also'

            break;

         default:

            break;

      }






Bhati                   Expires April 25, 2017                [Page 17]


Internet-Draft                  L2TPv4                     October 2016


      /////// Time to Add L2TPv4 data header ////////////////////

      // 2 byte flags + 2 byte header checksum + 1 byte proto +

      // 1 byte proto_len + 2 byte payload_len + 4 byte session id

      // Total fixed size =  12 bytes

      ///////////////////////////////////////////////////////////

      uint8_t l2tp_hdr_size = 12;

      if(1 == l2tp_session_context->cookie_set)

      {

         l2tp_hdr_size += l2tp_session_context->cookie_len;

      }



      l2tp_hdr_ptr = l2_hdr_ptr - l2tp_hdr_size;

      l2tp_hdr_ptr->flags.version = 0x4; // L2TPv4

      l2tp_hdr_ptr->flags.T_bit = 0;  // data packet

      if(l2tp_session_context->l2tp_over_ip)

      {

         l2tp_hdr_ptr->flags.C_bit = 1;

      }

      else

      {

         l2tp_hdr_ptr->flags.C_bit = 0; // UDP checksum is enough

      }






Bhati                   Expires April 25, 2017                [Page 18]


Internet-Draft                  L2TPv4                     October 2016


      if(l2tp_session_context->cookie_set)

      {

         l2tp_hdr_ptr->flags.S_bit = 1;

      }

      l2tp_hdr_ptr->checksum = 0x0000;

      l2tp_hdr_ptr->proto = l2tp_session_context->pw_type;

      l2tp_hdr_ptr->proto_hdr_len = l2_hdr_size;

      l2tp_hdr_ptr->payload_len = pkt_len + l2_hdr_len;

      l2tp_hdr_ptr->session_id = l2tp_session_context->session_id;

      if(l2tp_hdr_ptr->flags.S_bit)

      {

         memcpy(l2tp_hdr_ptr + 12,              // destination

                l2tp_session_ptr->cookie,       // source

                l2tp_session_ptr->cookie_len);  // length

      }

      if(l2tp_hdr_ptr->flags.C_bit)

      {

         l2tp_hdr_ptr->checksum =

         checksum(l2tp_hdr_ptr, 12 + l2tp_session_ptr->cookie_len);

      }

   } // end of pseudo function








Bhati                   Expires April 25, 2017                [Page 19]


Internet-Draft                  L2TPv4                     October 2016


   Copyright (c) 2016 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, are permitted provided that the following conditions
   are met:

   o  Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.

   o  Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in
      the documentation and/or other materials provided with the
      distribution.

   o  Neither the name of Internet Society, IETF or IETF Trust, nor the
      names of specific contributors, may be used to endorse or promote
      products derived from this software without specific prior written
      permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


















Bhati                   Expires April 25, 2017                [Page 20]


Internet-Draft                  L2TPv4                     October 2016


Authors' Addresses

   ABHISHEK BHATI
   SAMSUNG ELECTRONICS
   SAMSUNG R&D INSTITUTE, BENGALURU, INDIA

   Phone: +91-9686500752
   Email: ABH.BHATI@SAMSUNG.COM / AB.BHATI@GMAIL.COM









































Bhati                   Expires April 25, 2017                [Page 21]