<?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 RFC0768 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2326 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2326.xml">
<!ENTITY RFC2373 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2373.xml">
<!ENTITY RFC3828 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3828.xml">
<!ENTITY RFC5905 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5905.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-perez-dispatch-sdcp-00" ipr="trust200902">
 <!-- 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 abbrev="SDCP">SDCP: Streaming Distributed Control Protocol</title>
 
   <!-- add 'role="editor"' below for the editors if appropriate -->
 
   <!-- Another author who claims to be an editor -->
 
   <author fullname="Cristian Federico Perez-Monte" initials="C.F." role="editor"
       	surname="Perez-Monte">
 	<organization>GridTICs - UTN FRM</organization>
 
 	<address>
   	<postal>
     	<street>Rodriguez 273 Cuarto Piso Bloque Dpto Electronica</street>
 
     	<!-- Reorder these if your country does things differently -->
 
     	<city>Ciudad de Mendoza</city>
 
     	<region>Mendoza</region>
 
     	<code>M5502AJE</code>
 
     	<country>AR</country>
   	</postal>
 
   	<phone>+54 261 524 4563</phone>
 
   	<email>cristian.perez@gridtics.frm.utn.edu.ar</email>
 
   	<!-- uri and facsimile elements may also be added -->
 	</address>
   </author>
 
   <author fullname="Ana Laura Diedrichs" initials="A.L."
       	surname="Diedrichs">
 	<organization>GridTICs - UTN FRM</organization>
 
 	<address>
   	<postal>
     	<street>Rodriguez 273 Cuarto Piso Bloque Dpto Electronica</street>
 
     	<!-- Reorder these if your country does things differently -->
 
     	<city>Ciudad de Mendoza</city>
 
     	<region>Mendoza</region>
 
     	<code>M5502AJE</code>
 
     	<country>AR</country>
   	</postal>
 
   	<phone>+54 261 524 4563</phone>
 
   	<email>ana.diedrichs@gridtics.frm.utn.edu.ar</email>
 
   	<!-- uri and facsimile elements may also be added -->
 	</address>
   </author>
 
 
   <date 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>Applications and Real-Time</area>
 
   <workgroup>Dispatch</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>SDCP</keyword>
   <keyword>distributed streaming</keyword>
   <keyword> control of streaming distributed generation </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 memorandum describes SDCP, a protocol to control multimedia streaming in cases where streaming generation should be distributed to improve performance. This is especially useful for Human-Things streams. Usually, real time applications such as virtual reality generate a user-controlled multimedia streaming. This is a time continuous data flux that could be divided spatially or temporally to distribute processing, memory or network resources. This protocol does not describe streaming communication, but the control of each single streaming generation in a best-effort by many nodes or things.</t>
   </abstract>
 </front>
 
 <middle>
   <section title="Introduction">
<t>
The amount of information transmitted from human-to-computer (H2C) is usually very small. This is the case of information generated by input devices, for example, keyboards, mouses or touch screens. Conversely, the amount of information transmitted from computer-to-human (C2H) is huge which is increasing over time. This is the case of information generated for output devices, such as computer monitors, mobile phone screens or virtual reality headsets. Furthermore, the hardware resources such as data processing, network bandwidth or storage are also considerable. H2C control data is required to generate C2H data, such as virtual reality and other applications. In this way, H2C control data may be sending to many nodes in multicast method by best-effort delivery and processing. The protocol has been implemented by <xref target="Perez-Monte14"> </xref> with good results and its has been descripted in detail by  <xref target="Perez-Monte16"> </xref>.

</t>
 	<t>Streaming Distributed Control Protocol (SDCP) is an application-level protocol for control of streaming distributed generation.

SDCP is built over the <xref target="RFC0768">User Datagram Protocol (UDP)</xref> or  the <xref target="RFC3828">Lightweight User Datagram Protocol (UDP-Lite)</xref>, which provides a connection less deterministic transport mechanism.

SDCP provides the complete information for suitable streaming distributed generation.

Other mechanism have been specified to transmit multimedia streaming, including the <xref target="RFC2326">Real Time Streaming Protocol (RTSP)</xref>.  The SDCP is not meant to displace this mechanism but rather complement it.</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 anchor="simple_list" title="Terminology">
 	<t>Some clarifications and additional definitions follow:</t>
 
 	<t><list style="symbols">
 
     	<t>Multimedia Streaming: It is a group of successive multimedia real-time data blocks over time. A real-time data block can be an audio level for multimedia audio streaming or a frame for multimedia video streaming. Successive blocks of multimedia streaming must be ordered in time.</t>
 
     	<t>Data Block (DB): Data portion of stream with the same shared time slot.</t>
 
    <t> Spatial Data Segment (SDS): Spatial Data segment is subdivision or partition of each Data block to distributed generation. These fragments could be a piece of a render image. </t>
 
    <t> Processor nodes: These nodes generate the multimedia streaming under a distributed scheme. </t>
 
    <t> Administrator Node: This node controls multimedia streaming generation by periodically sending streaming control to the processor nodes. </t>
    <t>Integrator node: This node receives multimedia streaming from Processor nodes to display this to a human receptor.</t>
 
   	</list> Integrator and Administrator nodes are the human-side and Processor nodes are the things-side of the communication system. </t>
   </section>
</section>
 
<section title="Distributed Scheme">
<t>
Figure 1 shows scheme of a distributed stream generation system. Each processor node has processing, bandwidth or storing resources for partial stream generation.   
</t>
 
<figure align="center" anchor="scheme">
   	<preamble></preamble>
 
 
 
 
 
   	<artwork align="left"><![CDATA[
+------------------------------------------------------------------+
|Remote Administrator Node                                    	   |
+------------------------------------------------------------------+
                             	| Multicast SDCP data communication
                             	V  
+---------------++---------------++---------------++---------------+
|Local Proc Node||Local Proc Node||Local Proc Node||Local Proc Node|
+---------------++---------------++---------------++---------------+    	 
                             	||Uncompressed stream communication
                             	\/
+--------------------------------++--------------------------------+
| Local Integrator Node      	|| Local Integrator Node      	   |
+--------------------------------++--------------------------------+
                             	||Compressed stream communication
                             	\/    
+------------------------------------------------------------------+
| Remote Human Receptors                                       	   |
+------------------------------------------------------------------+
   ]]></artwork>
 
   	<postamble>Distributed Scheme.</postamble>
 	</figure>
 
   
 
 
<t> Administrator Node sends periodically SDCP multicast control datagrams to Processor Nodes. The use of multicast is mandatory to select processor group ID. The amount of SDCP datagrams should be sufficient to compensate losses and to allow real-time operation. These losses may occur by delivery problems or it could be ignored datagrams by processor nodes.
Administrator Node MAY assign different Processor Node for processing each SDS.
</t>
<t>  
Each unoccupied Processor Node receive SDCP datagrams. Occupied Processor Node SHOULD ignore SDCP datagrams. Each Processor Node generates stream portion through the use of more current SDCP control data. This generated stream is sent to an appropriate Integrator Node.  
</t>
<t>
Integrator Node receives stream portion unicast communication. All the stream portion received  are integrated in a single stream that is sent to remote human receptors or locally visualized.  
</t>
<t>
Administrator Node MAY assign different destination Integrator Node for each SDS. Each integrator node MAY receive multiple streams, a same DB or multiple/single SDS of multiple Processor Node. However, each SDS is assigned to only one Integrator node. While that different SDS of same stream MAY be assigned to send these to different integrator nodes,  each SDS of same stream MUST NOT be sent to more than only one Integrator node.</t>
 
 </section>
 
<section title="SDCP Constant">
<t> TO DO </t>
<section title="Multicast Addressing">
<t> TO DO </t>
</section>
<section title="UDP Ports">
<t> TO DO </t>
</section>
 
 
 
 
 
</section>
 
 
 
<section title="SDCP Format">
 
<t> Main SDCP format is shown in figure 2.</t>
 
 	<figure align="center" anchor="format">
   	<preamble></preamble>
 
   	<artwork align="left"><![CDATA[
+-------------------+---------------------+--------+
| General DB Header | Specific SDS Header | Payload|
+-------------------+---------------------+--------+
       	]]></artwork>
 
 <postamble>SDCP Format.</postamble>
 	</figure>
 
<t><list style="symbols">
 
    <t>General DB Header: 256-bits length field. This header is required and identifies fields from all the DB.</t>
 
    <t>Specific SDS Header: Multiple of 128-bits, variable-length field. This header is optional and identifies fields from specific SDS. If this header is not present, all SDS of same DB SHOULD be treated equally.</t>
 
    <t>Payload: Variable-length field. Stream Control Data.</t>
 
  	</list> </t>
 
 	<section title="General DB Header">
   	<t> DB Header is required. </t>
 
 
<figure align="center" anchor="main_header">
<preamble></preamble>
 
   	<artwork align="left"><![CDATA[
 
 0                   1               	 2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|control data type|M| RD  |    Stream Generation Source ID      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                           	|  
|                	Timestamp (64 bits)                  	|
|                                                           	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   	   SDCP Counter                        	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  	   Var DB Counter                      	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            DB size    	             	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        		     SDS size   		     	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         	DB Type   	| 	Next Header Counter   	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
       	]]></artwork>
 
 <postamble>DB Header Format.</postamble>
 	</figure>
 
<t>
Processor Node or Processor Node Group ID is determined by multicast destination address of IP stack.
</t>
<t>
Control data type: 8-bit selector. Type of control streaming generation data. Types are defined in accordance with specific requirement of application. E.g. virtual reality, game or video streaming, drone controller application, etc.
</t>
<t>
Control data mode: 1-bit selector. Instant or Historical Mode.
</t>
<t>
0 - Instant Mode:
The payload has the last control data configuration for the Processor Nodes, which means that the Administrator Node sends control data in a deterministic way with the last setup.

</t>
<t>
1 - Historical Mode:

Administrator Node sends previous and actual control data to the processor nodes, in order to help them to generate the next streaming sequence.

</t>
<t>
RD: 3-bit selector. Reserved for future use.
</t>
<t>
Streaming Generation Source ID: 20-bit unsigned integer. Multimedia generation data source identification. It identifies the data source generating multimedia stream.
</t>
<t>
Timestamp: 64-bits unsigned fixed-point. It includes a 32-bit unsigned seconds field spanning 136 years and a 32-bit fraction field resolving 232 picoseconds such as <xref target="RFC5905">RFC&nbsp;5905</xref>. This 64-bit timestamp format is used in General DB header and payload.
</t>
<t>
SDCP Counter: 32-bit unsigned integer. Total number of SDCP datagrams sent.
</t>
<t>
Var DB Counter: 32-bit unsigned integer. Total number of SDCP datagrams sent with control data changes.
</t>
<t>
DB type: 16-bit unsigned integer.
</t>
<t>
DB size: 32-bit unsigned integer.  
</t>
<t>
SDS size: 32-bit unsigned integer.  
</t>
<t>
Next Header Counter: 16-bit unsigned integer. Number of Optional SDS Headers. Length of optional headers in 16-octet units.
</t>
 	</section>
 
 	<section title="Specific SDS Header">
   	<t> SDS header is optional.
This header specifies SDS allocation to nodes. Two functions are defined.
On the one hand, this header MAY determine which SDS data are assigned to generate by processor node. On the other hand, this header MAY determine which SDS data are assigned to send from processor node to integrator node.</t>
 
<figure align="center" anchor="sds_header">
   	<preamble></preamble>
 
   	<artwork align="left"><![CDATA[
 0                   1               	 2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                           	|
|                	SDS task ID (64 bits)            	|
|                                                           	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                           	|
|                	Resource ID (64 bits)                  	|
|                                                           	|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       	]]></artwork>
 
 <postamble>SDS Header Format.</postamble>
 	</figure>
 
<t>
SDS task ID: 64-bit selector. It identifies individual SDS task or SDS group tasks for allocation to nodes.  
</t>
<t>
Resource ID: 64-bit selector, identifies integrator or processor node from its interface identifier from IPv6 unicast destination address or identifies processor node group from its low-order 64 bits of an IPv6 multicast destination address such as <xref target="RFC2373">IP Version 6 Addressing Architecture</xref>. Allocated Processor Node MUST process all SDS assigned in SDS group ID and MUST NOT process SDS not assigned. Non-allocated Processor Node MAY process all SDS. SDS not assigned to any Integrator Node MUST be sent to Default Integrator Node. Similarly, SDS assigned more than one Integrator Node MUST be sent only to Default Integrator Node.
</t>
 
 	</section>
 
 	<section title="Payload">
   	<t> Payload data format is specified in control data type field of general header. This field determines in virtual reality applications variables such as camera positions, light positions, etc.</t>
<t>
Two modes are supported.
</t>
<t>
Instant Mode: Last change control data is only sent.
</t>
<t>
Historical Mode: All changes control data are sent.
</t>
<t>
Types of control data:
TO DO.
</t>
 	</section>
 
</section>
 
<section title="Identificators Format">
<t> TO DO </t>
<section title="SDS index">
<t> TO DO </t>
</section>
<section title="Node index">
<t> TO DO </t>
</section>
 
    
</section>
 
<section title="Payload types">
<t> TO DO </t>    
</section>
 
<section title="Streaming considerations">
<t> TO DO </t>
<section title="Streaming protocols">
<t> TO DO </t>
</section>    
</section>
 
   <!-- This PI places the pagebreak correctly (before the section title) in the text output. -->
 
   <?rfc needLines="8" ?>
 
 
 
   <section anchor="Acknowledgements" title="Acknowledgements">
 	<t>
I would like to thank the resources and support of GRIDTICS and LICPaD of the Universidad Tecnologica Nacional Regional Mendoza (UTN FRM), LIDIC of the Universidad Nacional de San Luis (UNSL), the Joint Laboratory for System Evaluation (JLSE) at Argonne National Laboratory and Dept. of Bioengineering, Dept. of Biomedical and Health Information Sciences to the University of Illinois at Chicago (UIC). Especially, I am deeply grateful to Gustavo Mercado, Christian O'Flaherty, Ines Robles and Gabriel Montenegro for their support. </t>
 
   </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>TO DO</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">
 	<!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
 
    &RFC0768;
 
 	&RFC2119;
 
    &RFC3828;
 
   </references>
 
   <references title="Informative References">
 	
 
 	  <reference anchor="Perez-Monte14">


       <front>
         <title>Protocolo de comunicaciones para renderizacion distribuida en tiempo real - I Workshop Pre-IETF</title>

         <author initials="C. F." surname="Perez-Monte">
           <organization>Gridtics - UTN - FRM</organization>
         </author>
  <author initials="G. J." surname="Mercado">
           <organization>Gridtics - UTN - FRM</organization>
         </author>
  <author initials="J. C." surname="Taffernaberry">
           <organization>Gridtics - UTN - FRM</organization>
         </author>

 <author initials="M. F." surname="Piccoli">
           <organization>LIDIC UNSL </organization>
         </author>

         <date year="2014" />
       </front>
     </reference>
 	   <reference anchor="Perez-Monte16">


       <front>
         <title>Protocolo de comunicaciones para control de la generacion distribuida de flujo multimedia - WPIETFIRTF - III Workshop Pre-IETF/IRTF</title>

        <author initials="C. F." surname="Perez-Monte">
           <organization>Gridtics - UTN - FRM</organization>
         </author>

    <author initials="M." surname="Perez">
           <organization>Gridtics - UTN - FRM</organization>
         </author>

  <author initials="C." surname="Luciano">
           <organization>Dept. of Biomedical and Health Information Sciences - Dept. of Bioengineering - UIC </organization>
         </author>

  <author initials="S." surname="Rizzi">
           <organization>Argonne Leadership Computing Facility - ANL</organization>
         </author>

 <author initials="M. F." surname="Piccoli">
           <organization>LIDIC UNSL </organization>
         </author>

         <date year="2016" />
       </front>
     </reference>
 
 	&RFC2326;
 
 	&RFC2373;
 
 	&RFC5905;
 
 	<!-- A reference written by by an organization not a person. -->
 
   
   </references>
 
   <!-- Change Log
 
v00 2016-03-16  EBD   Initial version
-->
 
 </back>
</rfc>
