<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->
<!ENTITY rfc0791 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0791.xml">
<!ENTITY rfc1661 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1661.xml">
<!ENTITY rfc1918 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1918.xml">
<!ENTITY rfc2460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY rfc2472 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2472.xml">
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY rfc2661 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2661.xml">
<!ENTITY rfc2865 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2865.xml">
<!ENTITY rfc3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY rfc3588 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3588.xml">
<!ENTITY rfc4213 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4213.xml">
<!ENTITY rfc5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY rfc6204 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6204.xml">
<!ENTITY rfc6333 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6333.xml">
<!ENTITY rfc6555 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6555.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info"
     docName="On demand IPv4 address provisioning in Dual-Stack PPP deployment scenarios "
     ipr="pre5378Trust200902" submissionType="IETF">
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

    <title>draft-fleischhauer-ipv4-addr-saving-03</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Karsten Fleischhauer" initials="K" role="editor"
            surname="Fleischhauer">
      <organization>Deutsche Telekom AG</organization>

      <address>
        <postal>
          <street>Heinrich-Hertz-Strasse 3-7</street>

          <!-- Reorder these if your country does things differently -->

          <city>64295 Darmstadt</city>

          <country>DE</country>
        </postal>

        <phone>+49 6151 58 12831</phone>

        <email>k.fleischhauer@telekom.de</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Olaf Bonne&szlig;" initials="O" surname="Bonne&szlig;">
      <organization>Deutsche Telekom AG</organization>

      <address>
        <postal>
          <street>Winterfeldtstr. 21-27</street>

          <city>10781 Berlin</city>

          <country>DE</country>
        </postal>

        <phone>+49 30 835358826</phone>

        <email>olaf.bonness@telekom.de</email>
      </address>
    </author>

    <date day="30" month="August" year="2012"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>General</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>IPv4, IPv6, IPCP, IPv6CP, PPP, address saving, Dual-Stack, BBF
    TR-242, BBF TR-187</keyword>

    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

    <abstract>
      <t>Today the Dual-Stack approach is the most straightforward and the
      most common way for introducing IPv6 into existing systems and networks.
      However a typical drawback of implementing Dual-Stack is that each node
      will still require at least one IPv4 address. Hence, solely deploying
      Dual-Stack does not provide a sufficient solution to the IPv4 address
      exhaustion problem. Assuming a situation where most of the IP
      communication (e.g. always-on, VoIP etc.) can be provided via IPv6, the
      usage of public IPv4 addresses can significantly be reduced and the
      unused public IPv4 addresses can under certain circumstances be returned
      to the public IPv4 address pool of the service provider. New Dual-Stack
      enabled services can be introduced without increasing the public IPv4
      address demand, whereas IPv6 will be the preferred network layer
      protocol. This document describes such a solution in a Dual-Stack PPP
      session network scenario and explains the protocol mechanisms which are
      used.</t>
    </abstract>
  </front>

  <middle>
    <section title="Abstract">
      <t>The Dual-Stack approach as defined in <xref target="RFC4213"/>
      provides the most straightforward and most common way for introducing
      IPv6 <xref target="RFC2460"/> into existing systems and networks.
      However, an inherent drawback of usual Dual-Stack deployment scenarios
      according to <xref target="RFC4213"/> section 2 is that network nodes
      will still require at least one IPv4 <xref target="RFC0791"/> address. A
      primary concern for most operators whose IPv6 deployment strategy relies
      upon the deployment of Dual-Stack architectures is hence focused on the
      ability to rationalize the usage of its global IPv4 address blocks while
      encouraging the use of IPv6.</t>

      <t>Assuming now a situation where most of the IP communication (e.g.
      always-on, VoIP, etc.) can be provided via IPv6, the usage of public
      IPv4 addresses can be reduced significantly and the operators need
      mechanisms and solutions in order to release unused IPv4 address
      resources of Dual-Stack nodes and reallocate them later on, on demand.
      This document describes how such a solution can be deployed in a
      Dual-Stack PPP session scenario and details the protocol mechanisms of
      the solution which are also thought as contribution to <xref
      target="BBF-TR-242"/>. Furthermore it should be mentioned at this point
      that the sketched solution approach can also serve as general IPv4 sun
      setting approach for Dual-Stack PPP sessions, since it provides the
      possibility to return unused IPv4 addresses of Dual-Stack PPP sessions
      and transforming them into pure single stack IPv6 PPP sessions.</t>

      <section title="Requirements Language">
        <t>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 <xref
        target="RFC2119">RFC 2119</xref></t>
      </section>
    </section>

    <section anchor="simple_list"
             title="Problem Statement and Purpose of IPv4 address efficiency">
      <t>The Broadband Forum describes in <xref target="BBF-TR-187"/> a target
      IPv4/IPv6 Dual-Stack Architecture. TR-187 builds on the capabilities of
      existing protocols such as Point-to-Point Protocol (PPP) <xref
      target="RFC1661"/> and Layer 2 Tunnelling Protocol (L2TP) <xref
      target="RFC2661"/> to provide IPv6 service in addition to today's IPv4
      service. These protocols allow the parallel usage of IPv4 and IPv6
      within a single PPP respectively L2TP session. Usually in such a
      scenario the service provider assigns both, a global IPv4 address and
      also IPv6 address/prefix parameter, to the CPE deployed in the
      customer's premises for the whole duration of the PPP session. Because
      of the potential parallel usage of IPv4 and IPv6 within such a
      Dual-Stack PPP scenario a public IPv4 address is always provisioned,
      also in the (future) case where it is assumed that most (or even all) of
      the communication is running on top of IPv6. This document extends the
      sketched Dual-Stack deployment scenario for PPP and L2TPv2 with a
      mechanism that allows a temporary assignment and a release of an unused
      IPv4 address. This approach covers also situations where the IPv4
      address may only be provided on-demand later on, after initiating the
      Dual-Stack PPP session with an IPv6 context only. For a service provider
      using this mechanism it is assumed that a valuable increase of IPv4
      address efficiency due to a time based sharing of complete IPv4
      addresses can be achieved.</t>

      <t>Basically, the mechanism is also applicable to cable and mobile
      networks. The corresponding DOCSIS and 3GPP standards may be adapted as
      a follow-on work to this draft later on.</t>

      <section title="Illustrative service provider use case">
        <t>In order to illustrate the applicability and usefulness of the
        proposed &ldquo;On demand IPv4 address provisioning&rdquo; mechanism
        an illustrative network operator use case is provided in this section.
        Let's assume a network access and service provider which is offering
        Dual-Stack services via a single PPP connection to its customers,
        hence assuming a PPP encapsulation scheme. Independently of the nature
        and the number of services subscribed by the customer, (Single, Play,
        Double Play etc.), all customers should be produced and provisioned in
        the same way in order to keep the network operation costs and the
        network complexity as low as possible. Let's assume furthermore that
        the above mentioned network access and service provider has already
        migrated its VoIP service to IPv6, so that all Single play VoIP
        customers only need IPv6 connectivity and have no need for an IPv4
        context within their Dual-Stack PPP session. However, the standard
        Dual-Stack PPP connection set-up today assumes the triggering of the
        IPCP negotiation phase, as well as an IPv6CP negotiation independently
        of the real need for IPv4 and/or IPv6 connectivity, so that after a
        successful Dual-Stack PPP connection establishment the PPP client site
        is provisioned with a complete set of IPv6 and IPv4 connection
        parameters. As a consequence in our example, the whole Single Play
        VoIP customer base of the network access and service provider has also
        been provisioned with public IPv4 addresses, although these customers
        will never need IPv4 Internet connectivity during the whole lifetime
        of their PPP session. Hence a huge amount of not required and
        therefore unused IPv4 addresses has been wasted, that should be better
        kept in the provider address pools and delegated to other customers
        that really need IPv4 connectivity. In order to allow a more dynamic
        and on-demand provisioning of IPv4 parameters within Dual-Stack PPP
        sessions, a new mechanism is needed, that requests and also releases
        IPv4 addresses on-demand when they are really needed during the PPP
        session lifetime. Such a mechanism is proposed and described within
        this document.</t>

        <t>(An additional advantage of such an on-demand IPv4 address
        releasing and provisioning mechanism consists in the fact that a
        straight-forward to operate and dynamic change in the customer
        profiles (e.g. upgrade of Single Play customers to Double Play
        services and vice versa) becomes possible with only minor changes to
        the customer service profile in the AAA platform of the service
        provider - no changes in the CPE or BRAS/NAS port configuration are
        needed. Besides that, this dynamic on-demand IPv4 address provisioning
        and releasing approach allows it to share one public IPv4 address in a
        timely sequential fashion between a bunch of customers.)</t>

        <t>The following sections describe the basic network architecture and
        the &ldquo;On demand IPv4 address provisioning&rdquo; mechanisms in
        more details.</t>
      </section>

      <section title="Architecture and Communication in a PPP Dual-Stack environment">
        <t>Assuming a Dual-Stack network access via PPP, terminal devices can
        communicate via IPv4 and/or IPv6 transport, depending on their own and
        their IP communication partner capabilities. The actual usage of IPv4
        or IPv6 or both protocols depends on the capabilities of</t>

        <t><list style="symbols">
            <t>the IP communication endpoints (e.g. protocol stack,
            applications, configuration of the preferences etc.),</t>

            <t>the network deployment itself (e.g. access network based on
            PPP, backbone network, Internet) and also on</t>

            <t>the used communication services (like e.g. VoIP over IPv6).</t>
          </list>The last two points are mainly left to the responsibility of
        the network and service providers. The approach, sketched in this
        document, is based on the operational scenario that the customer
        starts a Dual-Stack PPP session in "IPv6-only" mode first and "adds"
        IPv4 later on only in the case that applications or services
        explicitly require IPv4 connectivity. When IPv4 connectivity is not
        needed during the whole duration of PPP network connectivity then a
        continuous provisioning of a global IPv4 address to the customer
        device (e.g. end system, CPE etc.) is not necessary. Therefore
        mechanisms are needed to provision and release public IPv4 addresses
        for Dual-Stack PPP sessions dynamically and on-demand.</t>

        <t>The goal of the solution sketched in this document, is to limit and
        decrease the public IPv4 address pool size of the PPP network access
        provider and hence to better rationalize the usage of the remaining
        IPv4 address blocks. Assuming that always-on services are reachable
        via IPv6, a Dual-Stack-capable PPP connected customer side device
        should in any case request IPv4 address parameters only on demand,
        when the need for establishing IPv4 connectivity has been detected and
        there is a need to forward IPv4 traffic towards the PPP WAN interface
        (e.g. of a CPE). Following this above sketched network scenario it is
        sufficient, when initially only IPv6 address parameters are
        provisioned to the PPP customer endpoint (e.g., end systems, CPE).</t>

        <t>This means as a consequence that a customer device does not
        initially start a complete Dual-Stack PPP session but an IPv6-only PPP
        session. The IPv4 part of the complete Dual-Stack is initiated later
        on only in the case that IPv4 connectivity is explicitly
        requested.</t>

        <t>Figure 1 below illustrates the network architecture of a PPP
        Dual-Stack environment for providing Internet access to residential
        customers.</t>

        <t><figure align="center" anchor="xml_happy_1"
            title="PPP Dual-Stack architecture ">
            <preamble/>

            <artwork align="center"><![CDATA[                              |       +------------+        |
                              |       |  external  |        |
                              |       |  Address   |        |
                              |       |    Pool    |        |
                              |       | Management |        |                                                      
                              |       +------------+        |
                              |      service | provider     |
                              |          AAA | area         |
+-------+                     +--------------|--------------+
|Private|__                                  |
|  Host |_ \IPv4                             |
|   1   | \ \    +-------------+             |
+-------+  \ \   |    CPE      |  IPv4       |
            \ \  |    App      |  over       |
         IPv6\ \_+------+------+  PPP   +---------+  IPv4  +--------+
              \__| CPE  |  CPE |--------|BRAS/NAS |--------| Public |
               __|Router|  PPP |        |  (PPP   |        |  Host  |
              / _|      | Peer |--------|  Peer)  |--------|   n    |
         IPv6/ / +------+------+  IPv6  +---------+  IPv6  +--------+
            / /                   over 
+-------+  / /                     PPP
|Private|_/ / 
|  Host |__/IPv4
|    n  | 
+-------+  

\_______________________/\__________________________________________/
    Private Internet                     Public Internet
         ]]></artwork>
          </figure></t>

        <t>This abstract network topology consists of 3 major components:</t>

        <t><list style="numbers">
            <t>Private Internet (aka. Customer LAN)</t>

            <t>Public Internet (including access and service provider
            network)</t>

            <t>Service Provider AAA area</t>
          </list></t>

        <t>The focus of this draft is mainly directed to the access network of
        the service provider as part of the Public Internet, where in our
        scenario PPP is used between the CPE and the provider Network Access
        Server (BRAS, NAS) in order to provide public Internet access to the
        customer.</t>

        <t>The Service Provider's AAA area is a network which consists of
        several systems that interact with the Network Access Servers and
        provide AAA functionalities. Such Service Provider AAA functionalities
        also include management of the public IPv4 and public IPv6 address and
        prefix pools inside the BRAS/NAS and can also be integrated directly
        into the BRAS/NAS.</t>
      </section>

      <section title="The advantage of the dynamic IPv4 address assigning feature">
        <t>The dynamic IPv4 address assigning approach, sketched in this
        document, is based on the operational approach that the customer CPE
        initiates a PPP session based on IPv6 and adds IPv4 later on only if
        certain IPv4 applications or services explicitly require IPv4
        connectivity. A particular public IPv4 address can therefore be
        assigned consecutively to different customers for the lifetime of
        their IPv4 PPP connection and has not to be bound to a single customer
        for the whole lifetime of the Dual-Stack PPP session. This consecutive
        assignment of public IPv4 addresses allows from a provider perspective
        a less complex IPv4-to-IPv6 migration in comparison to other
        IPv4-to-IPv6 migration approaches that are based on Carrier Grade NATs
        in service provider network (like e.g. Dual-Stack lite (like e.g.
        <xref target="RFC6333">Dual-Stack lite</xref>) or shared IPv4
        addresses, since no additional network devices have to be deployed and
        operated and the complete solution is based on simple extensions to
        already existing infrastructure components and processes. The customer
        will be provisioned with a public IPv4 address only in the case when
        global IPv4 connectivity is really needed and will not be provisioned
        with an IPv4 address by default when the Dual-Stack PPP session is
        initiated. Furthermore, a provisioned IPv4 address can be released
        (e.g., after a certain time interval) in case the CPE detects that
        there is no need any more for global IPv4 connectivity. In other
        words, when global IPv4 connectivity is not needed during the lifetime
        of the Dual-Stack PPP session then a (continuous) provisioning of a
        public IPv4 address to the CPE is not necessary and the provisioning
        of a public IPv4 address can be done on-demand and dynamically.</t>

        <t>Hence, one of the main achievements of this mechanism is to limit
        and decrease the pool size for public IPv4 addresses at the service
        provider site.</t>

        <t>A similar effect in limiting and decreasing the IPv4 address demand
        can also be reached by using separate PPP sessions for IPv4 and IPv6.
        But in that case the following problems occur:</t>

        <t><list style="symbols">
            <t>For each additional PPP session additional AAA parameters have
            to be created and handled which leads to an extension of AAA
            domains and more complex processes.</t>
          </list><list style="symbols">
            <t>Each additional PPP session will require additional resources
            on the PPP endpoints (e.g. for handling additional customer
            credentials) also in devices that act as PPP intermediate
            agents.</t>
          </list><list style="symbols">
            <t>Accounting and controlling of traffic classes on an access line
            or customer base will be impeded or at least complicated.</t>
          </list>Because of these reasons the introduction of an additional
        PPP session for IPv6 as additional network layer protocol on an access
        line with an additional PPP session is not recommended.</t>
      </section>
    </section>

    <section title="Specification">
      <t>As defined in <xref target="RFC2661">RFC 2661</xref> PPP and L2TP
      provide the following main functionalities:</t>

      <t><list style="numbers">
          <t>A method for encapsulating datagrams over serial links.</t>

          <t>A Link Control Protocol (LCP) for establishing, configuring, and
          testing the data-link connection.</t>

          <t>(Optional) Authentication Protocol for one or both peers.</t>

          <t>A family of Network Control Protocols (NCPs) for establishing and
          configuring different network-layer protocols.</t>
        </list>For provisioning of IPv4 or IPv6 communication parameters (e.g.
      addresses, DNS resolver) as network-layer protocols only the NCPs
      Internet Protocol (Version 4) Control Protocol (IPCP) <xref
      target="RFC1661">RFC 1661 </xref> and Internet Protocol (Version 6)
      Control Protocol (IPv6CP) <xref target="RFC2472">RFC 2472</xref> are
      used. Whereas IPCP is responsible for configuring, enabling, and
      disabling the IPv4 protocol modules on both ends of the point-to-point
      link, IPv6CP is responsible for configuring, enabling, and disabling the
      IPv6 protocol modules on both ends of the point-to-point link. Once one
      of the two network-layer protocols has been configured, datagrams
      belonging to this network-layer protocol can be sent over the PPP link.
      Both NCP protocol mechanisms act independently of each other (see also
      requirement WLL-3 in <xref target="RFC6204"/>) and can be used to
      establish and pull-down IPv4 and IPv6 connection contexts within a
      Dual-Stack PPP session independently.</t>

      <t>As an example, an implementation that wishes to close a dedicated NCP
      connection (e.g., IPCP or IPv6CP) SHOULD transmit a Terminate-Request to
      the peer. Upon reception of a Terminate-Request, a Terminate-Ack MUST be
      transmitted to the sender of the Terminate-Request. The PPP session
      itself and the other NCP connection inside the PPP session will remain
      existent. Only in the case that both NCP connections are closed, the
      Dual-Stack PPP session will be terminated.</t>

      <section title="Definition of the participating elements and their functionalities">
        <t>This chapter identifies the network elements that are involved in
        the message flows to enable the on-demand IPv4 address provisioning
        functionality and describes their functionalities related to this
        mechanism.</t>

        <t><list style="symbols">
            <t>Customer Edge Router (CER a.k.a. CPE) / End System</t>
          </list>Within the context of this document the CPE/End System is any
        device implementing a Dual-Stack PPP stack and acting as a PPP client
        with respect to the PPP server (e.g. BRAS/NAS) in the service provider
        network in order to achieve connectivity to the service provider
        network. In the case of a Customer Edge Router (CPE) this is a node
        (e.g. intended for home or small office usage) which forwards IPv4 and
        IPv6 packets that are not explicitly addressed to itself between the
        Local Area Network and WAN interface. The CPE itself can be abstracted
        into three functional blocks, one that carries the PPP session (e.g. a
        standalone DSL modem), one that is operating simply as a local router
        which includes the NAPT44 function and any IPV6 PD/ND, DHCPv6 and DHCP
        for both stacks and one which includes the local CPE functionalities
        (e.g., DNS forwarder/cache, VoIP SIP agent). The PPP interface of this
        device is also called WAN (Wide Area Network) interface <xref
        target="RFC6204"/>. In the case of IPv4 an additional Network Address
        Translation (NAT) functionality is implemented on the router part. So
        within the Local Area Network private IPv4 addresses can be used as
        defined in <xref target="RFC1918"/>. Therefore the demand for global
        IPv4 connectivity of such a Customer Edge Router will be triggered
        either by local applications on the CPE or by receiving IPv4 packets
        on its customer network facing interfaces that are addressed to the
        public Internet.</t>

        <t>In the case of an end system, this is a node that intends to
        communicate with other nodes by sending IPv4 and/or IPv6 packets. On
        an end system, the IPv4 connectivity demand can only be triggered by
        local protocols and own applications. However, in both cases (CPE or
        end system) an IPv4_idle_timer is implemented on the upstream (WAN)
        interface in order to detect IPv4 packets passing the WAN interface
        (incoming/ outgoing) and to measure the related IPv4 idle time when no
        IPv4 packet has been sent or received.</t>

        <t><list style="symbols">
            <t>Network Access Server (NAS a.k.a. BRAS)/Layer 2 Network Server
            (LNS)</t>
          </list>The Network Access Server (NAS) (a.k.a. Broadband Remote
        Access Server BRAS) is a device providing local Dual- Stack PPP
        connectivity to the Service Provider access network and acting as a
        PPP server to the PPP client on the Customer Edge Router or customer
        end system. Within a RFC 2661 architecture the PPP server within the
        service provider network is the L2TP Network Server (LNS). The IPv4
        address pool management can be provided locally on the BRAS/NAS/LNS or
        remotely. In the case of a local address pool management no additional
        information exchange to an external address pool management system is
        needed in order to assign or release IPv4 addresses. In the case of an
        external address pool management an information exchange between the
        BRAS/NAS/LNS and the address pool management system is required.</t>

        <t><list style="symbols">
            <t>External Address Pool Management</t>
          </list>External Address Pool Management is used in the case when no
        local Address Pool Management system is implemented in the
        BRAS/NAS/LNS. In this case it is necessary that the BRAS/NAS/LNS
        communicates with an External Address Pool Management System for
        signaling assignment or release of IPv4 addresses. RADIUS as specified
        in <xref target="RFC2865"/> or DIAMETER as specified in <xref
        target="RFC3588"/> can be used as protocol between BRAS/NAS/LNS and
        the External Address Pool Management System.</t>
      </section>

      <section title="Assigning IPv4 address parameter on-demand after establishing PPP session with IPv6 connectivity">
        <t>A PPP client implementation wishing to establish a PPP connection
        MUST transmit a NCP Configure-Request to the PPP server. If every
        Configuration Option received in a NCP Configure-Request is
        recognizable and all values are acceptable, then the PPP server
        implementation MUST transmit a NCP Configure-Ack to the initiator of
        the NCP Configure-Request.</t>

        <t>Applied to the above sketched Dual-Stack PPP session use case the
        configuration and enabling of the IPv6 protocol module will be done
        immediately after a successful LCP data link configuration (and maybe
        successful authentication phase) of the PPP session. Assuming that
        this IPv6CP configuration exchange has been successfully completed,
        the PPP session is now established and operational containing an
        IPv6-only network layer connection.</t>

        <t>Separately from that, the IPv4 protocol module can (later on and
        dynamically on-demand) be configured and enabled using IPCP. However
        this SHALL only be done in the case that an IPv4 connectivity demand
        has been detected on the PPP customer end system or CPE (PPP client).
        Therefore the BRAS/NAS MUST not initiate the negotiation of IPCP.</t>

        <t>The following diagram illustrates the corresponding IPCP (and
        accounting) message exchange that is needed to configure the IPv4
        protocol modules of an existing (Dual-Stack) PPP session
        on-demand.</t>

        <t><figure anchor="xml_happy_2"
            title="Message flow for assigning IPv4 address parameter ">
            <preamble/>

            <artwork align="center"><![CDATA[
      CPE/End System                BRAS/NAS           ext.  Address 
         (PPP Peer)                (PPP Peer)         Pool management
                                                      (if necessary)
             |                         |                      |
        1. ->|                         |                      |
        2.   |-IPCP-Configure-Request->|                      |
        3.   |                         |----Access-Request--->|  
        4.   |                         |<---Access-Accept-----|
        5.   |<-IPCP-Configure-Request-|                      |
        6.   |---IPCP-Configure-Ack--->|                      |
        7.   |<--IPCP-Configure-Nack---|                      |
        8.   |-IPCP-Configure-Request->|                      |
        9.   |<---IPCP-Configure-Ack---|                      |
        10.  |                         |--Accounting-Request->|
        11.  |                         |<---Accounting-Resp.--|
      ]]></artwork>
          </figure></t>

        <t>In the above diagram, the CPE/End System is triggered (1) to set up
        IPv4 connectivity via an already existing PPP session. The CPE/End
        System detects that there is no context (incl. a public IPv4 address)
        for its WAN interface available and starts the negotiation of the
        required IPv4 address and protocol parameters by sending an IPCP
        Configure-Request to the BRAS/NAS (2). The BRAS/NAS will request the
        corresponding IPv4 connectivity parameters (e.g. IPv4 address, DNS
        resolver address) from a local (e.g. within the BRAS/NAS) or remote
        database representing the Address Pool Management System(e.g. via
        RADIUS/DIAMETER) (3, 4). After this the PPP peers use the standard
        IPCP procedures to finalize the IPv4 address parameter negotiation (5,
        6, 7, 8, 9). After a successful provisioning of the IPv4 address
        parameter the CPE/End system has full global IPv4 connectivity and can
        proceed with the IPv4 communication (in parallel to IPv6). In case of
        an external Address Pool Management, the BRAS/NAS will send an
        Accounting-Request message (10) to the external Address Pool
        Management System in order to signal the successful negotiation of the
        IPv4 address parameter. The external Address Pool Management System
        will answer with an Accounting-Response (11) message.</t>
      </section>

      <section title="Releasing unused IPv4 address parameters">
        <t>A PPP client implementation according to this draft wishing to
        close a dedicated NCP connection (e.g., IPCP or IPv6CP) SHOULD
        transmit a Terminate-Request to the peer. Upon reception of a NCP
        Terminate-Request, a Terminate-Ack MUST be transmitted to the sender
        of the Terminate-Request.</t>

        <t>In the PPP Dual-Stack session scenario discussed here, the
        generation of the Terminate-Request message for the IPCP part of the
        PPP Dual-Stack session MUST be triggered by an IPv4 traffic idle timer
        within the PPP client when no IPv4 traffic has been detected on the
        upstream interface for a time interval longer than
        Initial_IPv4_Idle_Time. As long as there is still an ongoing IPv6
        connection within the PPP session, the PPP session MUST be kept open.
        Equivalently, when no IPv6 connectivity is detected the IPv6CP session
        can be terminated again by sending an IPv6CP Terminate-Request and
        accepting this by a Terminate-Ack. Afterwards the link layer
        connectivity and hence the whole PPP connection can be terminated by
        exchanging the LCP Terminate-Request and Terminate-Ack messages.</t>

        <t><figure align="center" anchor="xml_happy_3"
            title="Message flow for releasing IPv4 address parameter ">
            <preamble/>

            <artwork align="center"><![CDATA[
      CPE/End System                BRAS/NAS           ext.  Address
         (PPP Peer)                (PPP Peer)         Pool Management
             |                         |                      |
        1. ->|                         |                      |
        2.   |--IPCP-Termin.-Request-->|                      |
        3.   |<----IPCP-Termin.-Ack.---|                      |  
        4.   |                         |-Interim-Acc.-Requ.-->|
        5.   |                         |<---Accounting-Resp.--|]]></artwork>
          </figure></t>

        <t>The termination of an IPCP connection within a Dual-Stack PPP
        session is illustrated in figure 3 above.</t>

        <t>For this sample message flow it is assumed that there is still an
        IPv6CP connection active inside the Dual-Stack PPP session. After the
        expiration of the IPv4 traffic idle timer (1) the CPE/End system sends
        an IPCP terminate request to the peer (2). The request will be
        answered with an Terminate-Ack message (3). The IPv4 address can be
        returned to the local address pool (e.g. within the BRAS/NAS) or to
        the remote IPv4 address pool by sending Interim-Accounting messages
        (4, 5) (e.g. via RADIUS/DIAMETER).</t>
      </section>

      <section title="Timer Considerations">
        <t>IPv4_Idle_Timer</t>

        <t>The IPv4_Idle_Timer on the upstream interface of the PPP client has
        to be started immediately after a successful establishment of the IPCP
        session within the PPP connection and MUST count down starting from
        the Initial_IPv4_Idle_Time value to 0. When the upstream interface of
        the PPP client discovers incoming / outgoing IPv4 traffic then the
        IPv4_Idle_Time MUST be reset to the Initial_IPv4_Idle_Timer value.
        When the IPv4_Idle_Timer reaches the value 0 sending a
        Terminate-Request message MUST be triggered by a the PPP client (e.g.,
        end system, CPE). The Initial_IPv4_Idle_Time value MUST be
        configurable to adopt the mechanism due to the needs of the
        applications which are using IPv4 and with respect to an optimization
        of the IPv4 address saving potential.</t>
      </section>
    </section>

    <section anchor="Optimization" title="Potential for optimization ">
      <t>The efficiency of the &ldquo;On demand IPv4 address
      provisioning&rdquo; mechanism can be measured in the ratio of
      IPCP/RADIUS/DIAMETER signalling traffic to the amount of the saved
      global IPv4 addresses. Hence different options to optimize the
      efficiency of the proposed solution are possible, by suppressing
      unnecessary signalling load and blocking forbidden IPv4 connectivity
      requests.</t>

      <section title="Avoiding unnecessary load on BRAS/NAS and AAA">
        <t>Unnecessary signaling load between PPP peers as well as between
        BRAS/NAS and external Address Pool Management can for instance occur
        when a IPv6-only customer requests IPv4 address parameters. This can
        be prevented by restricting the usage of a Dual-Stack CPE for
        IPv6-only customers to IPv6 only and/or by administratively refusing
        the IPCP configure requests of such an IPv6-only customer inside the
        BRAS/NAS.</t>

        <t>The former case is more or less a business and customer
        relationship related issue which needs no engineering concepts.</t>

        <t>This case can be solved by answering an IPCP Configure Request
        message from a IPv6-only customer with a LCP reject message as
        described in chapter 5.7 of <xref target="RFC1661"/>. The field
        Rejected-Protocol of the LCP reject message contains the value 0x8021
        for IPCP and the Rejected-Information field contains a copy of the
        IPCP packet which is being rejected. Due to <xref target="RFC1661">
        </xref> upon reception of a Protocol-Reject, the implementation of the
        IPv4 capable CPE of the IPv6-only customer MUST immediately stop
        sending packets of the indicated protocol at the earliest opportunity.
        So the transmission of unnecessary IPCP and RADIUS messages during the
        running PPP session can be prevented.</t>

        <t>Another opportunity to reduce IPCP signaling load and the
        corresponding signalling overhead between BRAS/NAS and external
        Address Pool Management is the definition of default IPv4 traffic idle
        timer values for always-on applications that are sending periodic
        messages (see chapter 3.3). The value of this IPv4 traffic idle timer
        should be chosen a few seconds larger than the interval between
        periodic messages of always-on applications. Such an approach avoids
        problems for these applications when IPv4 is used and optimizes IPv4
        address release and address assign message exchange. Very short and
        periodic IPv4 address renewal cycles can be avoided by such an
        approach.</t>
      </section>

      <section title="Reducing IPv4 traffic on external interfaces">
        <t>The easiest way to reduce IPv4 traffic demand (and hence the need
        for public IPv4 addresses) is to shift applications from usage of IPv4
        to IPv6. In using the Dual-Stack approach which is a prerequisite of
        the mechanism described in this draft, no differences regarding the
        service level of both protocols are expected. Each service can be
        provided with the same quality level independently of the chosen
        version of the Internet Protocol.</t>

        <t>But regarding applications on end systems the Internet access
        provider has only very limited influence. However for applications and
        services running on the CPE itself (e.g. VoIP User Agent) the internet
        access provider should be able to define and require their IPv6
        readiness.</t>

        <t>An additional point is the preferred usage of IPv6 on all external
        (WAN) interfaces in the case when the CPE acts as a relay and caches
        on behalf of certain protocols (e.g. DNS). When on a LAN interface a
        request message for such a protocol is received via IPv4 and a
        relaying to the external WAN interface is needed IPv6 should be the
        preferred network protocol. Such a requirement has already been
        defined for relaying/caching devices in <xref target="BBF-TR-124-i2"/>
        (section LAN.DNSv6, item 6).</t>
      </section>
    </section>

    <section anchor="Othertechnologies"
             title="Impacts on user experience and operation">
      <t/>

      <section title="Impacts on user experience and Happy Eyeballs implementations">
        <t>In order to mitigate delays in end-to-end establishment in unstable
        Dual-Stack environments <xref target="RFC6555"> I</xref> describes a
        mechanism to optimize the communication establishment for
        connection-oriented transports (e.g., TCP, SCTP). The IPv6
        connectivity can be impaired for instance due connection failure to
        the IPv6 Internet, broken 6to4 or Teredo tunnels, or broken IPv6
        peering. After making a connection attempt on the preferred address
        family (e.g. IPv6) and failing to establish a connection within a
        certain time period, a "Happy Eyeballs" implementation will decide to
        initiate a second connection attempt in parallel using the same or the
        other address family. It is recommended that the non-winning
        connections be abandoned, even though they could -- in some cases --
        be put to reasonable use. In the case of IPv6 connectivity problems a
        Dual-Stack host will hence use IPv4; in the case of IPv4 connectivity
        problems a Dual-Stack host will use IPv6 for reaching a certain
        destination.</t>

        <t>In a Dual-Stack environment according to this document it is
        assumed that the IPv6 connectivity (at least in the access network) is
        not impaired. Nevertheless it is possible that the network path
        between access area and IPv6 destination is broken. In this case a
        fast fall-back to IPv4 is needed. In a Dual-Stack environment are,
        according to this draft, in general 3 states regarding IPv4 and IPv6
        connectivity of interest: <list style="numbers">
            <t>Neither IPv4 nor IPv6 connectivity is given (PPP link is
            dead),</t>

            <t>Only IPv6 connectivity is established and</t>

            <t>IPv4 and IPv6 connectivity is established.</t>
          </list>In the first case the "Happy Eyeball" scenario is not
        relevant.</t>

        <t>In the second case a fast IPv4 fall-back has to be realized by
        triggering and using the mechanism described in chapter 3.2. Depending
        on the architecture scenario (IP address pool management inside or
        outside the BRAS/NAS) and the CPE and BRAS/NAS performance
        capabilities a delay of about hundred milliseconds for establishing
        the IPCP session has to be considered. In the case that meanwhile the
        communication is not established via IPv6 this will be done via IPv4.
        If the "Happy Eyeball" algorithm caches connection establishment
        successes/failures, this additional IPCP establishment delay could
        lead to wrong assumptions regarding the quality of the IPv6 and IPv4
        connectivity. However, in following connection attempts using "Happy
        Eyeball" this can be corrected, because IPv4 connectivity is already
        established and no additional delay will be added.</t>

        <t>The third case corresponds to a native Dual-Stack architecture, so
        no additional considerations are needed.</t>
      </section>

      <section title="Operational impacts">
        <t>As described above the used mechanisms for dynamically assigning /
        releasing IPv4 addresses do not need new PPP, IPCP, IPv6CP or RADIUS
        protocol elements. Therefore it can be assumed that an implementation
        of the proposed mechanisms on the distinct network elements can be
        realized easily. Nevertheless depending on the service provider IPv6
        migration strategy and schedule it is possible that this mechanism is
        not everywhere in a PPP service provider deployment active or passive
        supported. When a service provider allows the customer the usage of
        CPEs of their own choice it is possible that an IPv4 address releasing
        CPE will be connected to a non compatible BRAS/NAS in the service
        provider network. In this case the message flow initiated from the CPE
        could lead to IPv4 connectivity problems. In order to avoiding this, a
        CPE implementation according to this draft MAY provide capabilities to
        switch on/off the above described functionality in order to fall back
        to a support of an IPv6-only or a "standard" Dual-Stack service.</t>
      </section>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The author and contributors also wish to acknowledge the assistance
      and feedback of the following individuals or groups.</t>

      <t>Tina Tsou</t>

      <t>Alain Durand</t>

      <t>Sven Schmidtke</t>

      <t>Dan Wing</t>

      <t>Vernon Schryer</t>

      <t>Mark Townsley</t>

      <t>Wesley George</t>

      <t>Joel M. Halpern</t>

      <t>Christian Jaquenet</t>
    </section>

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>

      <t>TBD.</t>

      <t>All drafts are required to have an IANA considerations section (see
      <xref target="RFC5226">Guidelines for Writing an IANA Considerations
      Section in RFCs</xref> for a guide). If the draft does not require IANA
      to do anything, the section contains an explicit statement that this is
      the case (as above). If there are no requirements for IANA, the section
      will be removed during conversion into an RFC by the RFC Editor.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TBD.</t>

      <t>All drafts are required to have a security considerations section.
      See <xref target="RFC3552">RFC 3552</xref> for a guide.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative Reference">
      <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->

      &rfc2119;

      &rfc0791;

      &rfc1918;

      &rfc4213;

      &rfc2460;

      &rfc2661;

      &rfc2472;

      &rfc2865;

      &rfc3588;

      &rfc6204;

      &rfc1661;

      &rfc6333;

      &rfc6555;

      <reference anchor="BBF-TR-242">
        <front>
          <title>Draft TR242 IPv6 Transition Mechanisms for Broadband
          Networks</title>

          <author fullname="Broadbandforum">
            <organization>Broadbandforum</organization>
          </author>

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

      <reference anchor="BBF-TR-187">
        <front>
          <title>Technical Report TR187 IPv6 over PPP Broadband Access (Issue
          1)</title>

          <author fullname="Broadbandforum">
            <organization>Broadbandforum</organization>
          </author>

          <date month="May" year="2010"/>
        </front>
      </reference>

      <reference anchor="BBF-TR-124-i2">
        <front>
          <title>Functional Requirements for Broadband Residential Gateway
          Devices (Issue 2)</title>

          <author fullname="Broadbandforum">
            <organization>Broadbandforum</organization>
          </author>

          <date month="May" year="2010"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      &rfc3552;

      &rfc5226;

      <!-- A reference written by by an organization not a person. -->
    </references>

    <section anchor="app-additional" title="Workplan">
      <t/>
    </section>

    <!-- Change Log

v00 2011-02-28  KF/OB Initial version

v01 2011-09-06  KF/OB -->

    <!--                adding figures + explanation + Feedback IETF80 & mail discussion-->

    <!--v02 2012-02-28  KF/OB-->

    <!--                extending motivation + architecture figure + Feedback & mail discussion & deployment experience-->

    <!--v03 2012-08-30  KF/OB -->

    <!--                incorporate review comments FT and Cisco-->

    <!--v04 -->

    <!---->

    <!---->

    <!---->
  </back>
</rfc>
