<?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 I-D.narten-iana-considerations-rfc2434bis SYSTEM
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.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="std" 
docName="draft-satish-6tisch-6top-sf1-02" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
 http://umeeting.huawei.com/Portal/business.action?BMECID=1474233&BMETimestamp=1426658395147
	        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="draft-satish-6tisch-6top-sf1">
   Scheduling Function One (SF1) for hop-by-hop Scheduling in 6tisch 
   Networks</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Satish Anamalamudi" initials="S." surname="Anamalamudi">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>No. 156 Beiqing Rd. Haidian District</street>

          <!-- Reorder these if your country does things differently -->

          <city>Beijing</city>

          <region/>

          <code>100095</code>

          <country>China</country>
        </postal>

        <phone/>

        <email>satishnaidu80@gmail.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Mingui Zhang" initials="M." surname="Zhang">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>No. 156 Beiqing Rd. Haidian District</street>

          <!-- Reorder these if your country does things differently -->

          <city>Beijing</city>

          <region/>

          <code>100095</code>

          <country>China</country>
        </postal>

        <phone/>

        <email>zhangmingui@huawei.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
<author fullname="Abdur Rashid Sangi" initials="AR." surname="Sangi">
<organization>Huawei Technologies</organization>

<address>
<postal>
<street>No.156 Beiqing Rd. Haidian District</street>

<!-- Reorder these if your country does things differently -->

<city>Beijing</city>

<region/>

<code>100095</code>

<country>P.R. China</country>
</postal>

<phone/>

<email>rashid.sangi@huawei.com</email>

<!-- uri and facsimile elements may also be added -->
</address>
</author> 

    <author fullname="Charles E. Perkins" initials="C.E." surname="Perkins">
      <organization>Futurewei</organization>

      <address>
        <postal>
          <street>2330 Central Expressway</street>

          <!-- Reorder these if your country does things differently -->

          <city>Santa Clara</city>

          <region/>

          <code>95050</code>

          <country>Unites States</country>
        </postal>

        <phone/>

        <email>charliep@computer.org</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
			<author fullname="S.V.R Anand" initials="" surname="S.V.R.Anand">
      <organization>Indian Institute of Science</organization>

      <address>
        <postal>
          <street>Bangalore</street>

          <!-- Reorder these if your country does things differently -->

          <city></city>

          <region/>

          <code>560012</code>

          <country>India</country>
        </postal>

        <phone/>

        <email>anand@ece.iisc.ernet.in</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>
	


    <date day="03" month="August" year="2016"/>

    <!-- 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>6tisch</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>P2P-RPL, AODV</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 defines a 6top Scheduling Function called "Scheduling
	Function One" (SF1) to reserve, label and schedule the end-to-end resources 
	hop-by-hop through distributed Resource Reservation Protocol(RSVP). SF1 uses 
	the 6P signaling messages with a global TrackID to add/delete cells in 
	end-to-end L2-bundles of isolated instance.</t>
    </abstract>
  </front>

<middle>
  <section title="Introduction">
    <t> 	
	 With Scheduling Function Zero (SF0) [I-D.dujovne-6tisch-6top-sf0],
   on-the-fly cell scheduling (ADD/DELETE) to 1-hop neighbors can be
   achieved for aggregated (best-effort) traffic flows.  In other words,
   all the instances from nodeA to nodeB in Fig. 1 are scheduled in a
   single L3-bundle (IP link).
    <figure anchor="figDIO1"
	title="L3-bundle for aggregated traffic flows in 1-hop with SF0.">
        <artwork><![CDATA[
               L3-bundle(Instance-1,Instance-2,...Instance-n)
            ------------------------------------------------->
      nodeA<-------------------------------------------------  nodeB
               L3-bundle(Instance-1,Instance-2,...Instance-n) ]]></artwork>
	</figure>
	Some applications (e.g. Industrial M2M) require end-to-end
    dedicated L2-bundles to protect the control/data streams for time-critical 
	applications <xref target="I-D.ietf-detnet-use-cases"/>. 
	For such applications, per-instance based L2-bundles need to be scheduled 
	hop-by-hop in between application sender and receiver nodes
	<xref target="I-D.ietf-6tisch-architecture"/>.  In addition, cells in
	the scheduled end-to-end L2-bundles of each instance have to be
	dynamically adapted for bursty time-critical traffic flows. 
	To achieve, end-to-end track has to be installed with a global TrackID
	that is associated with the L2-bundles of each instance.
     With 1-hop based SF0 cell scheduling, it is difficult to schedule dedicated
	 end-to-end cells for isolated traffic flows. In addition, global bandwidth 
	 estimation through Resource Reservation protocol is required for bandwidth 
	 allocation in multi-hop cell scheduling. This draft proposes a Scheduling 
	 Function One (SF1) to schedule end-to-end dedicated L2-bundles for each 
	 instance, and to dynamically adapt the cells in scheduled L2-bundles of 
	 ongoing instance through RSVP protocol(see Fig. 2). 
    <figure anchor="figDIO2"
    title="Dedicated L2-bundles for end-to-end isolated traffic flows with SF1">
       <artwork><![CDATA[
             L2-bundle(Instance-1)       L2-bundle(Instance-1)
          ----------------------->      ------------------>
         <------------------------      <-------------------
             L2-bundle(Instance-1)       L2-bundle(Instance-1)

             L2-bundle(Instance-2)       L2-bundle(Instance-2)
          ---------------------->       ----------------->
   Sender<-----------------------nodeB <----------------- Receiver
             L2-bundle(Instance-2)      L2-bundle(Instance-2)
                     .                          .
                     .                          .
             L2-bundle(Instance-n)      L2-bundle(Instance-n)
          ----------------------->     -------------------->
         <------------------------     <--------------------
             L2-bundle(Instance-n)      L2-bundle(Instance-n) ]]></artwork>
    </figure>
  </t> 
   </section>

 <section title="Operation of Scheduling Function one (SF1)">
    <t>
With SF1, Sender determines when to reserve the end-to-end resources, support 
implicit label switching(GMPLS), schedule the labeled L2-bundles hop-by-hop, 
	associate the global TrackID for labeled L2-bundles, and 
	dynamically adapt the cells in ongoing instance through distributed Resource
	Reservation Protocol (RSVP-lite). The triggering events in SF1 are as 
	follows :
        <list style="numbers">
	<t> If Sender has any Outgoing Bandwidth Requirement for new
	    instance to transmit data to Receiver. </t>
	<t> If Sender has a New Outgoing Bandwidth Requirement for Ongoing 
	    Instance to transmit data to Receiver. </t>
        </list> 
In both cases, distributed RSVP-lite (explained in Section .2.1) is triggered to 
provide end-to-end resource reservations along with scheduling operations.
 </t>     
 <section anchor="resource" title="Resource Reservation Protocol(RSVP-lite)">
<!-- 	  End-to-end Track formation with paired L2-bundles
 -->    
 <t>
   In this specification, an end-to-end route path is assumed to be
   available with reactive P2P-RPL (Storing or non-storing mode)
   protocols. A distributed Resource Reservation Protocol (RSVP-lite) with 
   6tisch scheduling capability is designed to schedule the labeled reserved 
   resources hop-by-hop for isolated instance. SF1 of application sender will 
   trigger the RSVP-lite operation, whenever it has time critical traffic flow 
   towards the receiver. The RSVP-lite has two messages namely (1) RSVP-PATH 
   message(Sender to Receiver) and (2) RSVP-RESV message(Receiver to Sender). 
    </t>  
	</section>
<section anchor="pathmessage" 
  	title="RSVP-PATH message">
	<t>
	The basic RSVP-PATH message [RFC2205] is used to carry the "Sender
   Traffic Specification" along with "characterization parameters" from
   sender to receiver.  Since RSVP treat objects as opaque data, it is
   valid to assume other protocol(eg., GMPLS, 6P) as an object in RSVP-
   PATH messages. </t>
	<t>The format of PATH message with the support of 6tisch scheduling 
	capabilities (6P and SF1) is as follows : </t>
<t>
 <figure>
       <artwork><![CDATA[
   <Path Message> ::=    <Common Header> [ <INTEGRITY> ]
                         [ [<MESSAGE_ID_ACK> | <MESSAGE_ID_NACK>] ... ]
                         [ <MESSAGE_ID> ]
                         <SESSION> <RSVP_HOP>
                         <TIME_VALUES>
                         [ <EXPLICIT_ROUTE> ]
                         <LABEL_REQUEST>
                         [ <PROTECTION> ]
                         [ <LABEL_SET> ... ]
                         [<SF1 OPERATION REQUEST>] 
                         [<6P OPERATION REQUEST>] 
                         [ <SESSION_ATTRIBUTE> ]
                         [ <NOTIFY_REQUEST> ]
                         [ <ADMIN_STATUS> ]
                         [ <POLICY_DATA> ... ]
                         <sender descriptor> ]]></artwork>
    </figure>
  	</t>
<t>
"SF1 OPERATION REQUEST" and "6P OPERATION REQUEST" are added in the PATH message
 to check for 6tisch scheduling capabilities within the intermediate nodes from
 sender to receiver. "Timeslot Switching Capability(TSC)" is used as an implicit 
 labels to switch the cell at intermediate nodes [RFC3473]. The message format 
 of the "TSC" is out-of-scope in this specification. "LABEL_REQUEST" in path 
 message should set to "Timeslot Switching Capability". "RPLInstanceID" is added
 in the "SENDER_TEMPLATE" to create Global TrackID during 6P transactions of 
 RSVP-RESV message. Whenever the intermediate node won't support the 
 "Timeslot switching Capability" or "6P transactions" or "SF1 operation" then it 
 needs to send a "PathErr" message back to application sender.
</t>
</section>
<section anchor="resvmessage" 
  	title="RSVP-RESV message">
<t>
The basic RSVP-RESV messages [RFC2205] are transmitted upstream from receiver to
 sender to provide resource reservation along with "Label Distribution". In this 
specification, hop-by-hop scheduling is extended to support both resource
reservation and label distribution. The current specification is only defined  
for unicast point-to-point traffic flows, i.e., Fixed Filter (FF) reservation 
style. </t>
 
 <t>The format of RESV message with the support of 6tisch scheduling 
	capabilities (6P and SF1) is as follows : </t>
	<figure>
       <artwork><![CDATA[
   <Resv Message> ::=    <Common Header> [ <INTEGRITY> ]
                         [ [<MESSAGE_ID_ACK> | <MESSAGE_ID_NACK>] ... ]
                         [ <MESSAGE_ID> ]
                         <SESSION> <RSVP_HOP>
                         <TIME_VALUES>
                         <LABEL>
                         [<SF1 OPERATION>]
                         [<6P OPERATION>]
                         [ <RESV_CONFIRM> ]  [ <SCOPE> ]
                         [ <NOTIFY_REQUEST> ]
                         [ <ADMIN_STATUS> ]
                         [ <POLICY_DATA> ... ]
                         <STYLE> <flow descriptor list> ]]></artwork>
 </figure>
<t>
	 Upon arrival of the PATH message at an application receiver, the 
	 SENDER_TSPEC and ADSPEC objects are interpreted to select the resource 
	 reservation parameters. Since the RSVP provides receiver initiated resource 
	 reservation setup, the scheduling operation needs to perform upstream from 
	 receiver to sender. Subsequently, the reserved resources (bandwidth) are 
	 mapped into 6tisch cells through Scheduling Function and corresponding 
	 L2-bundle is created. An aggregation of cells is called "bundle"(the 
	 directional link to a next-hop neighbor). Every L2-bundle is associated 
	 with a global trackID to dynamically adapt the cells "hop-by-hop" to an 
	 scheduled instance. In addition, the TrackID is used as a "packet filter" 
	 to switch the incoming tracks to outgoing tracks. The receiver will generate
	 the TrackID with the combination of "Source/Destination IP address" and 
	 "RPLInstanceID" that is obtained from "SENDER_TEMPLATE/FILTER_SPEC". </t>

 <figure anchor="figDIO4"
		title="Operation of RSVP-RESV message with 6P transactions.">
       <artwork><![CDATA[
                  next-hop node            Receiver
                 +--------------+       +--------------+
                 |     IPv6     |       |     IPv6     |
                 +--------------+       +--------------+
                 |   6LoWPAN    |       |   6LoWPAN    |
                 +--------------+       +--------------+
                 |     6top     |       |     6top     |
                 +--------------+       +--------------+
                 |   TSCH MAC   |       |   TSCH MAC   |
                 +--------------+       +--------------+
                 |   LLN PHY    |       |   LLN PHY    |
                 +--------------+       +--------------+
                      |                           |
                      |                           | Rspec:Reserves
                      |                           | bandwith
                      |                           |
                      |                           | SF1:Maps bandwidth to
                      |                           | cells
                      | RESV + 6P Request(TrackID)|
                      |<------------------------- |
 Rspec:Reserves       |                           |
 bandwith             |                           |
                      |                           |
 SF1:Maps bandwidth to|                           |
 cells                |6P Response (CellList[..]) |
                      |-------------------------->|
                      |                           |
                      |                           |
                      |                           |
                      |   6P confirmation         |LABEL SET
                      |   CellList[..]+ Label     |label=Channel+Slot
                      |<--------------------------|
      Resv state:"Cell|                           |
      label"          |                           |
                      |                           |
                      |                           |
                      |                           |]]></artwork>
  </figure>

	<t>
  From RFC[6997], it is noteworthy that application sender that initiates the 
 point-to-point (P2P) traffic is called "Parent node" and application receiver 
 that receives the data is called "Child node". Since the receiver (child node)
 performs the Scheduling operation upstream towards the sender, 
 "3-step transaction" of 6P protocol needs to be triggered hop-by-hop to schedule
 the reserved resources(see Fig. 3). Hence, "6P Request" with associated TrackID
 in metadata field is transmitted in "RESV" message from Receiver to next-hop 
 node. The "NumCells" field in the 6P Request is set to required number of cells
 whereas receive "CellList" should be empty. Once the outgoing interface of 
 next-hop node receive the "RESV" message, it checks the service request 
 specification(Rspec) and perform the resource reservation. Subsequently, 
 Scheduling Function of next-hop neighbor map the reserved resources into 
 transmit cells. Later, "6P Response" with transmit "CellList"(slotOffset,
 channelOffset) is downstream to receiver. When the receiver has cells (to 
 receive data) available with the "CellList" in the "6P Response" then "6P 
 Confirmation" with "IANA_6TOP_RC_SUCCESS" is upstream towards next-hop node. 
 Otherwise, "ResvErr" message should send back to the receiver with specific error. 
 Since the cell characteristics(slotOffset,channelOffset)is available in the 6P 
 transactions, the next-hop node will store the "SlotOffset (Timeslot)" as a 
 label to switch the traffic flow to receiver. For the multiple cells(Bundle), 
 a generalized label set is created where each label represents one cell to 
 forward data to receiver. Once the 6P transaction is successful in between 
 next-hop node and receiver, a labeled L2-bundle is created with the associated 
 TrackID. Subsequently, "cell label set" is stored in the Resv state block at 
 the next-hop node. Later, SF1 of "next-hop node" maps the reserved bandwidth to the 
 "receiving cells" to receive the data from its upstream node. The "RESV" message 
 with "6P Request" along with TrackID is transmitted upstream towards sender 
 node. With this, end-to-end Track is installed with a succession of paired 
 L2-bundles(a receive bundle from the previous hop and a transmit bundle to the 
 next hop) for a specific instance from sender to receiver.(See Fig. 4). 
<figure anchor="endtoend"
		title="End-to-end cell scheduling with SF1 Scheduling">
       <artwork><![CDATA[      
 +--------------+  <-Data transmission in end-to-end Track->
 |     IPv6     | Sender                             Receiver
 +--------------+   |                                     |
 |   6LoWPAN    |   |                                     |
 +--------------+   |                 nodeB               |
 |     6top     |   |                +----+               |
 +--------------+   |                |    |               |
 |   TSCH MAC   |   |                |    |               |
 +--------------+   |                |    |               |
 |   LLN PHY    |   |   L2-Bundle    |    |   L2-Bundle   |
 +--------------+   +----------------+    +---------------+
                    <--Dedicated cells for each Instance-->
	   ]]></artwork>
  </figure>
  During data transmission, SF1 of sender at 6top identifies the TrackID based 
  on "Sender/Receiver IP address, RPLInstanceID" from the received packet. 
  Subsequently, an associated L2-bundle is scheduled to forward the data to 
  next-hop neighbor (nodeB in Fig.4).  Later, SF1 of the next-hop neighbor 
  identifies the TrackID based on "Sender/Receiver IP address, RPLInstanceID" of 
  the received data to switch the track towards receiver.  With this, 
  end-to-end data transmission is achieved through "Track forwarding" at the 
  6top sub-layer (see Fig. 4). With "Timeslot Switching Capability" of RSVP-GMPLS
  <xref target="RFC3473"/>, cells in paired L2-bundles are used as an implicit
  labels to label switch the data from Sender to Receiver at the 6top sub-layer. 
	</t>
	   </section>
<section anchor="reroute" title="Reroute and Bandwidth Increase mechanism">
<!-- 	  End-to-end Track formation with paired L2-bundles
 -->    
 <t>
  Whenever, the sender needs to setup a new tunnel that is capable of 
  maintaining resource reservations without double counting(at same intermediate
  node) the resources with existing tunnel then "RSVP reroute mechanism" need to
  be initiated [RFC3209]. With this operation, bandwidth can increase/decrease 
  end-to-end in the ongoing tunnel. The detailed explanation of "Reroute mechanism" 
  is explained in [RFC3209]. 
    </t>  
	</section>
	<section anchor="Error" title="Error Codes">
<!-- 	  End-to-end Track formation with paired L2-bundles
 -->    
 <t>
  The detailed explanation of PathErr and ResvErr with different ERROR_SPEC to 
  handle Scheduling and 6P operation errors will be described in later 
  specification. 
    </t>  
	</section>
   </section>
   
   <section anchor="acronyms_terms" title="Scheduling Function Identifier">
    <t>The Scheduling Function Identifier (SFID) of SF1 is 
	IANA_SFID_SF1(TBD).</t>
</section>


<section anchor="IANA1" title="IANA Considerations">
    <t>
	IANA is requested to allocate a new Scheduling Function (IANA_SFID_SF1)
	from the SF space of Scheduling Functions defined in
	<xref target="I-D.dujovne-6tisch-6top-sf0"/>
    </t>
</section>

<section anchor="Security" title="Security Considerations">
    <t>TODO</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="References">
	<?rfc include='reference.RFC.3209'?>
	<?rfc include='reference.RFC.3945'?>
	<?rfc include='reference.RFC.6553'?>
	<?rfc include='reference.RFC.3473'?>
   </references>

   <references title="Informative References">
	<?rfc include="reference.I-D.ietf-6tisch-architecture" ?>
	<?rfc include="reference.I-D.ietf-detnet-use-cases" ?>
	<?rfc include="reference.I-D.ietf-6tisch-6top-protocol" ?>
	<?rfc include="reference.I-D.dujovne-6tisch-6top-sf0" ?>   
   </references>
   
</back>
</rfc>
