<?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 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 RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC6419 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6419.xml">
<!ENTITY RFC6418 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6418.xml">
<!ENTITY RFC4861 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4861.xml">
<!ENTITY RFC6724 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6724.xml">

<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
<!ENTITY I-D.ietf-6man-addr-select-opt SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-6man-addr-select-opt.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="draft-anipko-mif-mpvd-arch-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic trust200902
     ipr values: full3667, noModification3667, noDerivatives3667
     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 abbrev="MPVD architecture">Multiple Provisioning Domain Architecture</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Dmitry Anipko" initials="D." 
            surname="Anipko">
      <organization>Microsoft Corporation</organization>

      <address>
        <postal> 
          <street>One Microsoft Way</street>

          <!-- Reorder these if your country does things differently -->

          <city>Redmond</city>

          <region>WA</region>

          <code>98052</code>

          <country>USA</country>
        </postal>

        <phone>+1 425 703 7070</phone>

        <email>dmitry.anipko@microsoft.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date month="July" year="2013" />

    <!-- 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>Internet</area>

    <workgroup>MIF Working Group</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>template</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>This document is a product of the work of MIF architecture design team.
 It outlines a solution framework for some of the issues, experienced by 
nodes that can be attached to multiple networks. The framework defines the notion 
of a Provisioning Domain (PVD) - a consistent 
set of network configuration information, and PVD-aware nodes - nodes which 
learn PVDs from the attached network(s) and/or other sources and manage and use multiple PVDs 
for connectivity separately and consistently.</t>
    </abstract>
  </front>

  <middle>
<section title="Introduction">

<t>Nodes attached to multiple networks may encounter problems due to conflict 
of the networks configuration  and/or simultaneous use of the multiple 
available networks. While existing implementations apply various techniques (<xref
      target="RFC6419">RFC&nbsp;6419</xref>) to tackle such problems, 
in many cases the issues may still appear. The MIF problem statement document <xref
      target="RFC6418">RFC&nbsp;6418</xref> 
describes the general landscape as well as discusses many specific issues details.</t>

<t>Across the layers, problems enumerated in <xref
      target="RFC6418">RFC&nbsp;6418</xref> can be grouped into 3 categories:

<list style="numbers">
          <t>Lack of consistent and distinctive management of configuration elements, associated 
 with different networks.</t>
          <t>Inappropriate mixed use of configuration elements, associated with different networks, 
in the course of a particular network activity / connection.</t>
          <t>Use of a particular network, not consistent with the intent of the scenario / involved parties, 
leading to connectivity failure and / or other undesired consequences.</t>
        </list>
As an illustration: an example of (1) is a single node-scoped list of DNS server IP addresses, learned 
from different networks, leading to failures or delays in resolution of name from particular namespaces; 
an example of (2) is use of an attempt to resolve a name of a HTTP proxy server, learned from a network A, 
with a DNS server, learned from a network B, likely to fail; an example of (3) is a use of employer-sponsored 
VPN connection for peer-to-peer connections, unrelated to employment activities.</t>

<t>This architecture describes a solution to these categories of problems, respectively, by:
<list style="numbers">
<t>Introducing a formal notion of the PVD, including PVD identity, and ways for nodes to learn the intended 
associations among acquired network configuration information elements.</t>
<t>Introducing a reference model for a PVD-aware node, preventing inadvertent mixed use of the configuration 
information, which may belong to different PVDs.</t>
<t>Providing recommendations on PVD selection based on PVD identity and connectivity tests for common scenarios.</t>
</list></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="pvd_definitions" title="Definitions and types of PVDs">

<t>Provisioning Domain: a consistent set of network configuration information.  
Usually, the entire set available on a single interface is provided by a single source, 
such as network administrator. Typical examples of such information, learned from the network, 
are: source address prefixes, used by the network, IP address of DNS server, name of HTTP proxy 
server if available, DNS suffixes associated with the network etc.</t>

<t>It is also possible for other sources, such as e.g. node local policy, user input or other 
out of band mechanisms to either construct a PVD entirely (analogously to static IP configuration 
of an interface), or supplement with particular elements all or some PVDs learned from the network. 
As an example, node administrator could inject a not ISP-specific DNS server into PVDs for any 
of the networks the node could become attached to. Such creation / augmentation of PVD could be static or dynamic. 
The particular implementation mechanisms are outside of the scope of this document.</t>

<t>PVD-aware node: a node that supports association of network configuration information into PVDs, 
and using the resultant PVDs to serve requests for network connections in a way, 
consistent with recommendations of this architecture.</t>

    <section title="Explicit and implicit PVDs">
<t>A node may receive explicit information from the network and/or other sources, about presence 
of PVDs and association of particular network information with a particular PVD. 
PVDs, constructed based on such information, are referred to in this document as "explicit".</t> 

<t>Protocol changes/extensions will likely be required to support the explicit PVDs. As an example, 
one could think of one or several DHCP options, defining a PVD identity and elements. 
A different approach could be to introduce a DHCP option, which only introduces identity of a PVD, 
while the association of network information elements with that identity, is implemented by the 
respective protocols - such as e.g., with a <xref
        target="RFC4861">Router Discovery</xref> option declaring association 
of an address range with a particular PVD.</t>

<t>Specific, existing or new, features of networking protocols to enable delivery of PVD identity 
and association with various network information elements will be defined in companion design documents.</t>

<t>It is likely that for a long time there may be networks which do not advertise any explicit PVD information, 
since deployment of any new features in networking protocols is a relatively slow process. 
When connected to such networks, PVD-aware nodes may still provide benefits to their users, 
compared to non-PVD aware nodes, by creating separate PVDs for configuration received on different interfaces. 
Such PVDs are referred to in this document as "implicit".  This allows the node to manage and use network 
information from different interfaces separately and consistently use the configuration to serve network 
connection requests.</t>

<t>In the mixed mode, where e.g. multiple networks are available on the link the interface is attached to, 
and only some of the networks advertize PVD information, the PVD-aware node shall create explicit PVDs based 
on explicitly learned PVD information, and associate the rest of the configuration with an implicit 
PVD created for that interface.</t>

<t>It shall be possible for networks to communicate that some of their configuration elements could be used within 
a context of other networks/PVDs.
 Based on such declaration and their policies, PVD-aware nodes may choose to inject such elements into some 
or all other PVDs they connect to.</t>
    </section>

    <section title="Relationship between PVDs and interfaces">
<t>Implicit PVDs are limited to network configuration information received on a single interface. 
Explicit PVDs, in practice will often also be scoped to a configuration related to a particular interface, 
however per this architecture there is no such requirement or limitation and as defined in this architecture, explicit 
PVDs may include information related to more than one interfaces, if the node learns presence of the same 
PVD on those interfaces and the authentication of the PVD ID meets the level required by the node policy.</t>
    </section>

    <section title="PVD identity/naming">

<t>For explicit PVDs, PVD ID (globally unique ID, that possibly is human-readable) is received as part of that 
information. For implicit PVDs, the node assigns a locally generated globally unique ID to each implicit PVD.</t> 

<t>PVD-aware node may use these IDs to choose a PVD with matching ID for special-purpose connection requests, 
in accordance with node policy or choice by advanced applications, and/or to present human-readable IDs to the 
end-user for selection of Internet-connected PVDs.</t>

    </section>

    <section title="Relationship to dual-stack networks">

<t>When applied to dual-stack networks, the PVD definition allows for multiple PVDs to be created, 
where each PVD contain information for only one address family, or for a single PVD that contains 
information about multiple address families. This architecture requires that accompanying design documents 
for accompanying protocol changes must support PVDs containing information from multiple address families.
PVD-aware nodes must be capable of dealing with both single-family and multi-family PVDs.</t>

<t>Nevertheless, for explicit PVDs, the choice of either of the approaches is a policy decision 
of a network administrator and/or node user/administrator. Since some of the IP configuration information 
that can be learned from the network can be applicable to multiple address families (for instance <xref
      target="I-D.ietf-6man-addr-select-opt">DHCP address selection option</xref>), 
it is likely that dual-stack networks will deploy single PVDs for both address families.</t>

<t>For implicit PVDs, by default PVD-aware nodes shall including multiple IP families into single 
implicit PVD created for an interface.</t>
  
<t>A PVD-aware node that provides API to use / enumerate / inspect PVDs and/or their properties shall provide 
ability to filter PVDs and/or their properties by address family.</t>
    </section>

    <section title="Elements of PVD">
<t></t>
    </section>

</section>

<section title="Example network configurations and number of PVDs">

<t></t>
</section>

<section title="Reference model of PVD-aware node">

    <section title="Constructions and maintenance of separate PVDs"></section>

    <section title="Consistent use of PVDs for network connections">

        <t>PVDs enable PVD-aware nodes to use consistently a correct set of configuration elements to serve 
the specific network requests from beginning to end. This section describes specific examples of such 
consistent use.</t>

        <section title="Name resolution">

<t>When PVD-aware node needs to resolve a name of the destination used by a connection request, 
the node could decide to use one, or multiple PVDs for a given name lookup.</t>

<t> The node shall chose one PVD, if e.g., the node policy required to use a particular PVD for a 
particular purpose (e.g. to download an MMS using a specific APN over a cellular connection). 
To make the choice, the node could use a match of 
the PVD DNS suffix or other form of PVD ID, as determined by the node policy.</t>

<t>The node may pick multiple PVDs, if e.g., they are general purpose PVDs providing connectivity to
 the Internet, and the node desires to maximize chances for connectivity in Happy Eyeballs style. 
In this case, the node could do the lookups in parallel, or in sequence. Alternatively, the node 
may use for the lookup only one PVD, based on the PVD connectivity properties, 
user choice of the preferred Internet PVD, etc.</t>

<t>In either case, by default the node shall use for the following connection request the PVD, where the lookup 
results were obtained.</t>

        </section>
        <section title="Next-hop and source address selection">

<t>For the purpose of this discussion, let's assume the preceding name lookup succeeded in a particular PVD.  
For each obtained destination address, the node shall perform a next-hop lookup among routers, 
associated with that PVD. As an example, such association could be determined by the node via matching 
the source address prefixes/specific routes advertized by the router against known PVDs, 
or receiving explicit PVD affiliation advertized through a new <xref
        target="RFC4861">Router Discovery</xref> option.</t>

<t>For each destination, once the best next-hop is found, the node selects best source address according 
to the <xref target="RFC6724">RFC&nbsp;6724</xref> rules, but with a constraint that the source address 
must belong to a range associated 
with the used PVD. If needed, the node would use the prefix policy from the same PVD for the best source
 address selection among multiple candidates.</t>

<t>When destination/source pairs are identified, then they are sorted using the 
<xref target="RFC6724">RFC&nbsp;6724</xref> 
destination sorting rules and the prefix policy table from the used PVD.</t>

        </section>
    </section>
    <section title="Connectivity tests">
    <t></t>
    </section>

    <section title="Relationship to interface management and connection managers">
    <t> </t>
    </section>
</section>

<section title="PVD support in APIs">
<t> In all cases changes in available PVDs must be somehow exposed, appropriately for each of the approaches.</t>

    <section title="Basic">
<t>Applications are not PVD-aware in any manner, and only submit connection requests. 
The node performs PVD selection implicitly, without any otherwise applications participation, 
and based purely on policies and/or user choice.</t>
    </section>

    <section title="Intermediate">
<t>Applications indirectly participate in selection of PVD by specifying hard requirements and 
soft preferences. The node performs PVD selection, based on applications inputs and policies and/or 
user preferences. Some / all properties of the resultant PVD may be exposed to applications.</t>
    </section>

    <section title="Advanced">
<t>PVDs are directly exposed to applications, for enumeration and selection, within limits allowed
 by the node policies and / or user preferences.</t>
    </section>
</section>

<section title="PVD-aware nodes trust to PVDs">

    <section title="Untrusted PVDs"><t></t></section>
    <section title="Authenticated PVDs"><t></t></section>
    <section title="Trusted PVDs">
        <section title="Trust via strong ID"><t></t></section>
        <section title="Trust via attachment"><t></t></section>
    </section>

</section>

<!--
    <section title="Subsections and Tables">
      <section title="A Subsection">
        <t>By default 3 levels of nesting show in table of contents but that
        can be adjusted with the value of the "tocdepth" processing
        instruction.</t>
      </section>

      <section title="Tables">
        <t>.. are very similar to figures:</t>

        <texttable anchor="table_example" title="A Very Simple Table">
          <preamble>Tables use ttcol to define column headers and widths.
          Every cell then has a "c" element for its content.</preamble>

          <ttcol align="center">ttcol #1</ttcol>

          <ttcol align="center">ttcol #2</ttcol>

          <c>c #1</c>

          <c>c #2</c>

          <c>c #3</c>

          <c>c #4</c>

          <c>c #5</c>

          <c>c #6</c>

          <postamble>which is a very simple example.</postamble>
        </texttable>
      </section>
    </section>
-->
<!--
    <section anchor="nested_lists" title="More about Lists">
      <t>Lists with 'hanging labels': the list item is indented the amount of
      the hangIndent: <list hangIndent="8" style="hanging">
          <t hangText="short">With a label shorter than the hangIndent.</t>

          <t hangText="fantastically long label">With a label longer than the
          hangIndent.</t>

          <t hangText="vspace_trick"><vspace blankLines="0" />Forces the new
          item to start on a new line.</t>
        </list></t>

   
      <?rfc needLines="12" ?>

      <t>Simulating more than one paragraph in a list item using
      &lt;vspace&gt;: <list style="letters">
          <t>First, a short item.</t>

          <t>Second, a longer list item.<vspace blankLines="1" /> And
          something that looks like a separate pararaph..</t>
        </list></t>

      <t>Simple indented paragraph using the "empty" style: <list
          hangIndent="10" style="empty">
          <t>The quick, brown fox jumped over the lazy dog and lived to fool
          many another hunter in the great wood in the west.</t>
        </list></t>

      <section title="Numbering Lists across Lists and Sections">
        <t>Numbering items continuously although they are in separate
        &lt;list&gt; elements, maybe in separate sections using the "format"
        style and a "counter" variable.</t>

        <t>First list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#1</t>

            <t>#2</t>

            <t>#3</t>
          </list> Specify the indent explicitly so that all the items line up
        nicely.</t>

        <t>Second list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#4</t>

            <t>#5</t>

            <t>#6</t>
          </list></t>
      </section>
      <section title="Where the List Numbering Continues">
        <t>List continues here.</t>

        <t>Third list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#7</t>

            <t>#8</t>

            <t>#9</t>

            <t>#10</t>
          </list> The end of the list.</t>
      </section>
    </section>
-->
    <section anchor="Acknowledgements" title="Acknowledgements">
    </section>

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>All drafts are required to have a security considerations section.
      </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 References">
      &RFC2119;
<!--
      <reference anchor="min_ref">

        <front>
          <title>Minimal Reference</title>

          <author initials="authInitials" surname="authSurName">
            <organization></organization>
          </author>

          <date year="2006" />
        </front>
      </reference>-->
    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      &RFC6419;

      &RFC6418;

      &RFC4861;

      &I-D.ietf-6man-addr-select-opt;

      &RFC6724;

<!--
      <reference anchor="DOMINATION"
                 target="http://www.example.com/dominator.html">
        <front>
          <title>Ultimate Plan for Taking Over the World</title>

          <author>
            <organization>Mad Dominators, Inc.</organization>
          </author>

          <date year="1984" />
        </front>
      </reference>-->
    </references>
<!--
    <section anchor="app-additional" title="Additional Stuff">
      <t>This becomes an Appendix.</t>
    </section>
-->
    <!-- Change Log

v00 2013-07-13  EBD   Initial version

  -->
  </back>
</rfc>
