Network Working Group                                         A. Dalela
Internet Draft                                            Cisco Systems
Intended status: Standards Track                              M. Hammer
Expires: July 2012                                      January 4, 2012



                      Service Orchestration Protocol
                          draft-dalela-sop-00.txt


Status of this Memo

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

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

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

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

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

   This Internet-Draft will expire on July 4, 2012.

Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors. All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document. Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.






Dalela                   Expires July 4, 2012                  [Page 1]


Internet-Draft      Service Orchestration Protocol         January 2012


Abstract

   Cloud services need to interoperate across cloud providers, service
   vendors and private/public domains. To enable this interoperability,
   there is need for a standard wire-format for exchanging service
   information. This document describes a Service Orchestration Protocol
   (SOP) to be used as a standard wire-format for cloud exchanges.
   Similar to widely used protocols like HTTP, SIP and SMTP, SOP uses
   text-based messages, which are easily extensible and may be inspected
   at cloud proxies. While SOP carries service-independent information,
   service-dependant information is attached as a Service Description
   Framework [SDF] payload to SOP packets. This is similar to how HTML
   is transported over HTTP. SDF is a XML schema for describing
   services. SOP and SDF enable any kind of service to be discovered and
   orchestrated across private and public domains. Simple protocol
   compliance tests can be employed to ensure interoperability across
   domains. SOP wire-formats can be used with existing cloud APIs. Using
   these, it would be possible to interoperate diverse APIs and cloud
   services across service providers, service vendors and service users.

Table of Contents

   1. Introduction...................................................5
   2. Conventions used in this document..............................5
   3. Terms and Acronyms.............................................5
   4. Overview of Operation..........................................6
      4.1. Service Discovery.........................................6
         4.1.1. Proxy Discovery......................................6
         4.1.2. Service, User and Proxy Registrations................7
         4.1.3. Service Publishing and Subscribing...................8
         4.1.4. Disambiguating Discovery Functions..................10
      4.2. Service Management.......................................11
      4.3. Service Reliability......................................12
      4.4. Service Abstraction......................................13
   5. Protocol Description..........................................14
      5.1. Transport................................................15
      5.2. Addressing...............................................15
      5.3. Transactions and Exchanges...............................16
      5.4. Service Accounting.......................................16
   6. SOP Requests..................................................16
      6.1. ADVERTISE................................................16
      6.2. CANCEL...................................................17
      6.3. COMMIT...................................................17
      6.4. CREATE...................................................18
      6.5. DELETE...................................................18
      6.6. GET......................................................19
      6.7. DISCOVER.................................................19


Dalela                   Expires July 4, 2012                  [Page 2]


Internet-Draft      Service Orchestration Protocol         January 2012


      6.8. PUBLISH..................................................20
      6.9. REGISTER.................................................20
      6.10. SUBSCRIBE...............................................21
      6.11. TRANSFER................................................21
      6.12. UPDATE..................................................22
      6.13. WORKFLOW................................................23
   7. SOP Responses.................................................23
      7.1. 100 TRYING...............................................23
      7.2. 183 WORKFLOW PROGRESS....................................23
      7.3. 200 OK...................................................24
      7.4. 305 USE PROXY............................................24
      7.5. 400 BAD REQUEST..........................................25
      7.6. 403 FORBIDDEN............................................25
      7.7. 500 SERVER INTERNAL ERROR................................25
      7.8. 504 SERVER TIMEOUT.......................................26
      7.9. 603 DECLINE..............................................26
   8. SOP Headers...................................................26
      8.1. Acknowledge Timeout......................................27
      8.2. Alternate Proxy Header...................................27
      8.3. Cancel Timeout Header....................................27
      8.4. Commit Timeout Header....................................28
      8.5. Content Type Header......................................28
      8.6. Content Length Header....................................28
      8.7. Distance Header..........................................28
      8.8. Destination Header.......................................28
      8.9. Exchange Header..........................................29
      8.10. From Header.............................................29
      8.11. Node Type Header........................................29
      8.12. Priority Header.........................................29
      8.13. Query Type Header.......................................29
      8.14. Publish Timeout Header..................................30
      8.15. Retry Count Header......................................30
      8.16. Requestor Header........................................30
      8.17. Registration Timeout Header.............................31
      8.18. Service ID Header.......................................31
      8.19. Sequence ID Header......................................31
      8.20. Source Header...........................................31
      8.21. Subscribe Timeout Header................................31
      8.22. Task ID Header..........................................32
      8.23. Timestamp Header........................................32
      8.24. To Header...............................................32
      8.25. Transfer Mode Header....................................32
      8.26. Via Header..............................................32
      8.27. Workflow ID Header......................................33
      8.28. Workflow Name Header....................................33
      8.29. Workflow Server Header..................................33
   9. Timers and Counters...........................................33


Dalela                   Expires July 4, 2012                  [Page 3]


Internet-Draft      Service Orchestration Protocol         January 2012


      9.1. Retransmission Counter...................................33
      9.2. Acknowledge-Timeout......................................33
      9.3. Register-Timeout.........................................34
      9.4. Advertise-Timeout........................................34
      9.5. Cancel-Timeout...........................................34
      9.6. Commit-Timeout...........................................34
      9.7. Discover-Timeout.........................................34
      9.8. Publish-Timeout..........................................35
      9.9. Subscribe-Timeout........................................35
      9.10. Retransmit-Timeout......................................35
   10. Message-Header Relationships.................................35
   11. Security Considerations......................................36
   12. IANA Considerations..........................................37
   13. Conclusions..................................................37
   14. References...................................................37
      14.1. Normative References....................................37
      14.2. Informative References..................................37
   15. Acknowledgments..............................................37































Dalela                   Expires July 4, 2012                  [Page 4]


Internet-Draft      Service Orchestration Protocol         January 2012



1. Introduction

   This document describes a protocol for discovering, publishing and
   orchestrating services in the Internet. A detailed requirement set
   for such a protocol is described separately [REQT].

   The present protocol scheme comprises of two protocols - the Service
   Orchestration Protocol (SOP) and a Service Description Framework
   (SDF). SOP carries service-independent information while SDF encodes
   service-dependant information. The relation between SOP and SDF is
   similar to that between SIP and SDP or between HTTP and HTML. This
   document describes SOP. SDF is described separately [SDF]. SDF
   payloads can be attached in SOP messages, and this document
   illustrates that. Through separation of service-independent and
   service-dependant pieces, the scheme described here can be extended
   to any service type in an interoperable way.

   SOP uses text-based headers similar to HTTP, SIP and SMTP. This makes
   SOP very easy to implement. To extend SOP, one only needs to add new
   text headers, or occasionally new methods. These messages may be
   inspected at cloud Proxies and modified by them.

2. Conventions used in this document

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

   In this document, these words will appear with that interpretation
   only when in ALL CAPS. Lower case uses of these words are not to be
   interpreted as carrying RFC-2119 significance.

3. Terms and Acronyms

   The key words Provider, Vendor, User, Orchestration, Client, in this
   document have the same meaning as defined in SOP requirements [REQT].

   The key words Proxy, Workflow Server (WS), Service Node (SN) in this
   document have the same meaning as defined in SOP architecture [ARCH].

   The key words Service Description Framework (SDF), Service Domain
   Name (SDN), SDN Attributes, Vendor Specific Attributes (VSA) in this
   document have the same meaning as define the SDF specification [SDF].





Dalela                   Expires July 4, 2012                  [Page 5]


Internet-Draft      Service Orchestration Protocol         January 2012


4. Overview of Operation

4.1. Service Discovery

   Before Users can orchestrate services, SNs, Proxies and Users must
   discover each other, and their service-related capabilities. If the
   number of users, SNs and Proxies is small, this discovery is achieved
   by configuring addresses manually. But, in a large network with a
   variety of services, automated discovery procedures are needed.

   This section describes SOP automated discovery procedures in three
   steps: (a) discovery of the Proxy, (b) registration to the Proxy and
   Identity validation, and (c) exchanging service information via the
   Proxy through service subscription and publishing.

4.1.1. Proxy Discovery

   A Proxy orchestrates services on a SN. To do this orchestration, the
   Proxy needs to discover SNs. A simple approach to discovery is that
   we can configure the SN with the Proxy or the Proxy with the SN
   address. The Proxy can then query the SN to know if it exists or the
   SN can heartbeat with the Proxy to announce its presence. This
   configuration is very cumbersome and error prone at scale and not a
   preferred method of service discovery.

   A more appropriate approach is that we use SOP messages for dynamic
   discovery. A Proxy needs to advertize its presence along with the
   ability to proxy for certain services. A SN can discover service-
   specific Proxies by listening to Proxy advertisements. A SN should
   also be able to trigger service discovery because the SN may have
   been out of service when the Proxy advertized its presence.

   Two messages are used in SOP - ADVERTISE and DISCOVER - to support
   proxy discovery. The Proxy sends ADVERTISE to announce its presence
   and ability to handle some services. The SN uses DISCOVER to trigger
   the ADVERTISE, if an ADVERTISE has not been transmitted or if it was
   transmitted but the SN was not operational to receive it.

   These two messages are independent requests, and not related as
   request-response. A Proxy SHALL periodically send an ADVERTISE to
   announce its presence. A SN SHALL send a DISCOVER whenever it starts
   up and if an ADVERTISE has not already been received. A Proxy SHOULD
   send a ADVERTISE in response to a DISCOVER if the service types in
   the DISCOVER match with the service types supported by the Proxy.

   The DISCOVER SHOULD be always broadcast. The ADVERTISE may be unicast
   or broadcast. Periodically sent ADVERTISE messages SHOULD be


Dalela                   Expires July 4, 2012                  [Page 6]


Internet-Draft      Service Orchestration Protocol         January 2012


   broadcast. ADVERTISE sent in response to DISCOVER SHOULD be unicast
   (the unicast address is derived from the received DISCOVER).

             +--------+                          +--------+
             | Proxy  |                          |   SN   |
             +--------+                          +--------+
                  |             DISCOVER              |
                  |<---(I need Proxy for XYZ svcs.)---|
                  |                                   |
                  |            ADVERTISE              |
                  |---(I can Proxy for XYZ svcs.)---->|
                  |                                   |


4.1.2. Service, User and Proxy Registrations

   After receiving the ADVERTISE message from a Proxy, and if the
   service interests match, a SN, a WS, User or Proxy SHOULD register
   with the Proxy. If a SN supports multiple services, it SHOULD
   register with those Proxies that support those services. If a Client
   is interested in services supported by multiple Proxies, it SHOULD
   register with all of them. If a Proxy is interested in exchanging
   service information with multiple Proxies, it should register with
   them. Registration identifies the SN, WS, User or Proxy to the
   registering Proxy.

         +------------------+                 +--------+
         | SN/WS/User/Proxy |                 | Proxy  |
         +------------------+                 +--------+
                   |                               |
                   |           REGISTER            |
                   |-----(Here is my Identity)---->|
                   |                               |
                   |<---------- 200 OK ------------|
                   |                               |


   The Proxy receiving registration MAY initiate authentication during
   the registration. The Proxy SHOULD interact with a AAA server to
   authenticate and/or challenge the registration identity.

   Registrations MUST be carried out periodically, and they act as a
   keep-alive mechanism with the Proxy. A registration MAY be used to
   determine the location of a User, Proxy, WS or SN, and location based
   policies can be applied in service orchestration.




Dalela                   Expires July 4, 2012                  [Page 7]


Internet-Draft      Service Orchestration Protocol         January 2012


4.1.3. Service Publishing and Subscribing

   There are two kinds of service publishing. First, the SN publishes
   its capabilities to the Proxy. Second, the Proxy publishes the
   aggregate of SN capabilities to other Proxies and Users. These
   publications build up the service routing tables in network and Users
   and Proxies can know how to route a request to a service.

   Service publishing uses the PUBLISH message. This message uses
   request-response, and a response SHOULD be sent by the receiver.

   A SN SHOULD send PUBLISH because of service virtualization. Each SN
   may be capable of hosting multiple virtualized service instances. As
   those instances are allocated, the total virtualized capacity in the
   SN reduces. The SN needs to inform the Proxy about its current
   capacity to host services. A Proxy WOULD aggregate these capacities
   and can use them to determine the placement of services.

   A SN SHOULD send a PUBLISH to a Proxy in the following three cases,
   whichever comes first:

   a. Periodically based on a time indicated by the Proxy (in the
     ADVERTISE message). A Proxy SHOULD null the SN's capabilities if 3
     successive PUBLISH messages have not been received.

   b. When the SN is started, to inform about its available capacity.

   c. Whenever its service capabilities change; this may be typically
     after a new service allocation or partial failure/outage.

   A Proxy SHOULD also send PUBLISH to other Proxies and Users to
   propagate service capabilities in the network. As new services are
   made available, or existing ones are removed, Users need to know the
   available list of services. A Proxy can dynamically publish its
   catalogue of discovered services to the user.

   These publications can carry two kinds of information. First, they
   can have an aggregated view of service capabilities available via a
   Proxy. This information is useful to a receiver to determine which
   services can be accessed via a publisher. Second, the PUBLISH can
   indicate the Workflows that can be requested through a Proxy. The
   Workflows will be tagged by service types, so a user can know which
   Workflows will result in which kinds of services.

   In certain cases publishing an aggregated view of services may be
   undesirable at it exposes a provider's internal details to other
   providers or users. The PUBLISH may however carry aggregated services


Dalela                   Expires July 4, 2012                  [Page 8]


Internet-Draft      Service Orchestration Protocol         January 2012


   to a limited set of trusted Proxies. It SHOULD always carry Workflows
   to all Users or Proxies that may need to use the Workflows.

                +----+                        +-------+
                | SN |                        | Proxy |
                +----+                        +-------+
                   |           PUBLISH             |
                   |-------(Update on svc X)------>|
                   |                               |
                   |<---------- 200 OK ------------|
                   |                               |

                +----+                        +-------+
                | WS |                        | Proxy |
                +----+                        +-------+
                   |           PUBLISH             |
                   |---(List of Avlbl Workflows)-->|
                   |                               |
                   |<---------- 200 OK ------------|
                   |                               |

                +-------+                      +-------+
                | Proxy |                      | Proxy |
                +-------+                      +-------+
                   |           PUBLISH             |
                   |---(List of Avlbl Workflows--->|
                   |     and Aggregate Services)   |
                   |                               |
                   |<---------- 200 OK ------------|
                   |                               |

                +-------+                      +-------+
                | Proxy |                      | Client|
                +-------+                      +-------+
                   |           PUBLISH             |
                   |---(List of Avlbl Workflows)-->|
                   |                               |
                   |<---------- 200 OK ------------|
                   |                               |


   Of course, not every Proxy or User may be interested in every kind of
   service. As the service catalogue grows, the total amount of
   publishing can be an overhead as no User will be interested in all
   services and a Proxy or User may be interested in only a subset of
   these services. To avoid flooding, a User or Proxy can indicate its
   service interests by sending a SUBSCRIBE to the Proxy. The SUBSCRIBE


Dalela                   Expires July 4, 2012                  [Page 9]


Internet-Draft      Service Orchestration Protocol         January 2012


   SHALL indicate the sender's service interests, which act as a filter
   for a Proxy to forward only those service-specific details.

                +--------+                      +-------+
                | Client |                      | Proxy |
                +--------+                      +-------+
                    |            SUBSCRIBE          |
                    |-----(Interested Svc List)---->|
                    |                               |
                    |<---------- 200 OK ------------|
                    |                               |

                +-------+                      +-------+
                | Proxy |                      | Proxy |
                +-------+                      +-------+
                    |            SUBSCRIBE          |
                    |-----(Interested Svc List)---->|
                    |                               |
                    |<---------- 200 OK ------------|
                    |                               |


   A Proxy MAY use information gleaned during registration to determine
   which Users and Proxies should be forwarded which information. For
   instance, it might forward aggregated service information to Proxies
   within a trust zone, but send only Workflows to external Users.

4.1.4. Disambiguating Discovery Functions

   There are similarities in DISCOVER/ADVERTISE and PUBLISH/SUBSCRIBE
   mechanisms. A SN indicates its service class to the Proxy via
   DISCOVER and the Proxy advertizes its service class to SN via
   ADVERTISE. Similarly, a User indicates its service interest via
   SUBSCRIBE to the Proxy. The Proxy indicates its service capabilities
   with the PUBLISH to the User. This similarity leads to the question
   of why we need separate messages for these two functions.

   The reason for separating DISCOVER/ADVERTISE from PUBLISH/SUBSCRIBE
   is that the ADVERTISE/DISCOVER messages may be broadcast and there
   are no responses to them whereas the PUBLISH/SUBSCRIBE messages are
   always unicast and every message has a response. It is simpler to
   keep these messages and preserve their broadcast/unicast and request-
   only versus request-response behaviors than combining them.

   There is similarity in REGISTER/PUBLISH and REGISTER/SUBSCRIBE
   messages (these messages are unicast and follow the request-response
   pattern). Both REGISTER and PUBLISH indicate a SN's information to


Dalela                   Expires July 4, 2012                 [Page 10]


Internet-Draft      Service Orchestration Protocol         January 2012


   the Proxy. The difference between them is that a REGISTER informs a
   Proxy about the SN's identity (Domain Name and IP Address) whereas a
   PUBLISH informs the Proxy about its Service Domain Name (SDN) and
   capabilities. Similarly, a REGISTER informs a Proxy about the User's
   Identity (Domain Name and IP Address) whereas a SUBSCRIBE informs the
   Proxy about the User's SDN interests. So, we have a 3-way distinction
   between Capability and Interest which are described in SDN and
   Identity which is in terms of DNS and IP.

   The reason to keep the REGISTER separate from PUBLISH/SUBSCRIBE is to
   separate Identity (DNS and IP) from Service (SDN). Identity requires
   authentication, and if a User or SN have been authenticated, this
   Identity should be usable across all service requests. Authentication
   should not be required in every service transaction. By confining
   Identity validation to REGISTER, other requests can use that Identity
   and don't have to authenticate the User or SN separately. We can
   think of REGISTER as a single sign-on used for services.

4.2. Service Management

   Service management comprises of five main functions: CREATE, DELETE,
   UPDATE, GET and TRANSFER. The first four messages have a close
   parallel to the CRUD methods defined in HTTP as shown below.

       +-------------------+-------------------+-------------------+
       |    SOP Message    |    CRUD Method    |    HTTP Message   |
       +-------------------+-------------------+-------------------+
       | CREATE            | CREATE            | POST              |
       | GET               | READ              | GET               |
       | UPDATE            | UPDATE            | PUT               |
       | DELETE            | DELETE            | DELETE            |
       | TRANSFER          | -                 | -                 |
       +-------------------+-------------------+-------------------+

             +--------+                      +--------+
             | Proxy  |                      |   SN   |
             +--------+                      +--------+
                 |             CREATE            |
                 |----(Services of Domain X)---->|
                 |                               |
                 |<---------- 200 OK ------------|
                 |                               |


   The CREATE, DELETE and UPDATE messages have obvious semantics in
   relation to services. The GET message requests a description of the
   service or workflow or tasks depending on the context. This GET is


Dalela                   Expires July 4, 2012                 [Page 11]


Internet-Draft      Service Orchestration Protocol         January 2012


   not related to the service but to its meta-attributes used in
   orchestration. For instance, the GET will fetch the total allocated
   size of a storage disk but not the content of that disk.

   The TRANSFER message is unique to SOP, and arises because of service
   virtualization and movement of services. The TRANSFER message sets up
   the context in which service information may be transferred from one
   point to another, such as the source and destination addresses and
   the type of information to be transferred. It does not deal with the
   actual transfer of information. The latter kind of transfer may be
   determined by the service itself (such as use of SFTP to transfer
   memory snapshots in case of VM mobility).

             +--------+                      +--------+
             | Source |                      | Target |
             | Proxy  |                      | Proxy  |
             +--------+                      +--------+
                 |           TRANSFER            |
                 |-------(src=SN1, dst=?)------->|
                 |                               |
                 |            200 OK             |
                 |<-----(src=SN1, dst=SN2)-------|
                 |                               |


4.3. Service Reliability

   Service orchestration requires reliability that spans multiple SNs. A
   typical usable service may require orchestration across compute,
   network, storage, security, etc. Orchestration failure in one of
   these SNs should trigger a rollback of actions in all other SNs. This
   is achieved by sending the CANCEL message to the SNs that are
   impacted by a failure. If however all SNs have been orchestrated
   successfully, then a COMMIT message is sent to all the SNs.

             +--------+                      +--------+
             | Proxy  |                      |   SN   |
             +--------+                      +--------+
                 |             COMMIT            |
                 |----(Services of Domain X)---->|
                 |                               |
                 |<---------- 200 OK ------------|
                 |                               |

   Every service transaction in SOP must be committed within a certain
   time period. If the time for commit has elapsed, the service will be
   automatically rolled back by the SN. This mechanism is essential to


Dalela                   Expires July 4, 2012                 [Page 12]


Internet-Draft      Service Orchestration Protocol         January 2012


   handle scenarios where the User, the Proxy, some SNs or a combination
   of these fail. If the Proxy has failed and does not send the COMMIT
   to a SN, the SN SHALL rollback the transaction. If the SN has failed
   and does not respond to the Proxy, the Proxy SHALL send a CANCEL to
   other Proxies and/or SNs. If Proxy has failed and does not respond to
   the User, the User can be assured that they are not billed for the
   service. The provider can be assured that unless a COMMIT has been
   sent, service resources will not be leaking due to failures.

4.4. Service Abstraction

   For complex Workflows, there is need for a Workflow Anchor [ARCH].
   Each Workflow may have a different Anchor. The Anchor controls the
   Workflow execution, and is responsible for validating the Workflow
   prior to execution. A Workflow MUST NOT be branched into Tasks by any
   network element upstream from the Anchor. The Proxy that advertizes
   the Workflow into the service network SHALL indicate through the
   PUBLISH messages that it is the Anchor of the Workflow. This allows a
   request to be routed to the correct Proxy (Anchor) for execution.

   Since a Workflow cannot be branched prior to the Workflow Anchor, all
   network elements upstream from the Anchor must request the Workflow
   as an atomic element. The WORKFLOW message is used to make this
   atomic request. This message MUST contain the Workflow Name being
   requested. The request MAY also contain a complete or partial
   Workflow description. All network elements prior to the Anchor MUST
   forward the WORKFLOW request without branching it into Tasks.

   On the receiving the WORKFLOW message, the Anchor SHALL extract the
   Workflow and send it to the relevant WS along with the Workflow Name
   through the GET message, requesting the WS to validate and complete
   the Workflow specification. The Workflow in the GET request
   represents the input to the WS to construct a complete Workflow
   specification. The WS may override the Workflow description, or may
   reject the GET request, depending on configured policies.

             +--------+                      +-------+
             | Proxy  |                      | Proxy |
             +--------+                      +-------+
                 |           WORKFLOW            |
                 |--------(Workflow Name)------->|
                 |                               |
                 |<---------- 200 OK ------------|
                 |                               |

   If the Workflow has been accepted, the complete Workflow
   specification SHALL specify individual Tasks as CREATE, DELETE,


Dalela                   Expires July 4, 2012                 [Page 13]


Internet-Draft      Service Orchestration Protocol         January 2012


   TRANSFER, COMMIT, etc. that the Anchor can execute. On receiving the
   completed Workflow specification, the Anchor SHALL proceed to
   executing the Workflow. If the Workflow has been rejected, the Anchor
   SHALL forward the reject to the upstream network element.

   The WORKFLOW message allows service bundles to be treated as atomic
   services for upstream network elements. A customer or provider can
   create a Workflow description and PUBLISH it through the service
   network using a unique service name. Users or Providers can request
   this service through the WORKFLOW message. By anchoring the Workflow
   in a particular location, the correct execution of the Workflow can
   be guaranteed. The Anchor ensures that the Workflow is validated and
   authorized prior to execution and accounted after completion.

5. Protocol Description

   SOP is a text-based protocol used for discovering, requesting,
   updating, moving and tearing down services. The protocol has a number
   of similarities with SIP, HTTP and SMTP:

   -  SOP uses text-based headers

   -  SOP separates control and data, as in SIP/SDP, HTTP/HTML

   -  Uses 1xx-6xx responses
       o 1xx   Informational Responses
       o 2xx   Successful Responses
       o 3xx   Redirection Responses
       o 4xx   Client Failure Responses
       o 5xx   Server Failure Responses
       o 6xx   Global Failure Responses

   -  Defines unique request types
       o DISCOVER  :: Used by a SN to discover a Proxy
       o ADVERTISE :: Used by a Proxy to Advertize its Presence
       o REGISTER  :: Used by a SN to register itself with a Proxy
       o PUBLISH   :: Used by a SN to indicate its Capabilities
       o SUBSCRIBE :: Used by a WS/Client to subscribe to service info
       o CREATE    :: Used by a Proxy to request service creation
       o DELETE    :: Used by a Proxy to request service deletion
       o UPDATE    :: Used by a Proxy to request service update
       o GET       :: Used by a Proxy/SN to get service/workflow details
       o TRANSFER  :: Used by a Proxy to request service mobility
       o COMMIT    :: Used by a Proxy to commit service changes
       o CANCEL    :: Used by a Proxy/Client to cancel operations
       o WORKFLOW  :: Used by a Proxy/Client to execute a workflow



Dalela                   Expires July 4, 2012                 [Page 14]


Internet-Draft      Service Orchestration Protocol         January 2012


5.1. Transport

   SOP implementations can use UDP or TCP transports. Service
   orchestration creates, deletes, configures and moves services. These
   transactions need to be highly reliable and scalable. The combination
   of reliability and scalability is hard to achieve at the transport
   layer. If a proxy manages millions of services, persistent TCP
   connections don't scale. If millions of users connect to a Proxy to
   obtain services, transporting them over UDP can be error prone.

   Keeping in mind these constraints, it is ideal to use TCP for short-
   lived user interactions and UDP for long-lived service management
   interactions. SOP has built in timers to COMMIT / CANCEL procedures
   to deal with network reliability issues in case the Proxy fails or
   the connection to the Proxy fails. As such, SOP will work correctly
   with use of either TCP or UDP. The choice of transport therefore
   depends on the desired scale and reliability of deployment.

   Limitations of transport may also be overcome through additional
   means. For instance it is possible to deploy a set of TCP Proxies
   that offloads TCP scale outside the SOP Proxy. Alternately we can use
   UDP transport in combination with shorter retransmit timers and
   increased retransmit counters. SOP has procedures to dynamically
   distribute timer and counter values across the network.

5.2. Addressing

   All entities in SOP are addressed by a user@domain name. The user
   "default" can be used in the following circumstances:

   -  For addressing Proxies and WSs
   -  For addressing a service when it does not have a name assigned
     (this can happen prior to SN registration)
   -  For addressing entities in a broadcast message
   -  If a sender does not know which user to address it to

   Outside of above cases, SNs SHOULD be addressed by a name such as
   service@sn.provider.com, where "sn" is a service node and "service"
   is a virtual service instance at the SN. If there is one SN for many
   virtualized service instances, the SN WOULD receive all messages for
   virtualized service instances, even though they are addressed to a
   particular "service". The SN MAY take actions on a request on behalf
   of the service or pass on information to the service.

   When messages are being broadcast, an address of the type
   default@default.provider.com may be used, and the packet will use a
   broadcast IP address.


Dalela                   Expires July 4, 2012                 [Page 15]


Internet-Draft      Service Orchestration Protocol         January 2012



5.3. Transactions and Exchanges

   A "transaction" identifies as pair-wise message transfer between SOP
   network entities. Transactions correlate requests with responses. The
   "branch" parameter in the Via header identifies a transaction between
   two SOP network entities. The branch parameter is added by the
   request initiator to identify a new request and MUST be included by
   the responding entity in its response messages.

   A service request may branch out into multiple SOP network nodes,
   such as to allocate different resources (compute, network, storage
   and security) through the same request. The requests and responses
   are part of the same "exchange". The Exchange identifies a set of
   transactions that must be executed to complete a single service
   request. The combination of a "branch" and "exchange" uniquely
   identifies a message in the service network.

5.4. Service Accounting

   Accounting responsibilities rest with the Proxy. The Proxy SHALL
   start service accounting by sending an Accounting Start request to
   the AAA server. It SHALL stop service accounting by sending an
   Accounting Stop request to the AAA server. These messages (or
   enhancements to these messages for supporting service specific
   accounting functions) are outside scope of current document.

6. SOP Requests

   Every SOP request MUST have the Message Type, From and To headers.
   Messages with request-response MUST have the Exchange and Via
   headers. Messages without request-response (ADVERTISE and DISCOVER)
   MAY NOT have Exchange and Via headers. Other headers vary from
   message to message as described below. The meanings of all headers
   are described in Section 8.

6.1. ADVERTISE

   This message SHALL be sent by a Proxy to advertize its presence and
   willingness to proxy for certain types of services. The SDF payload
   in the message indicates which service domains it can support. In the
   example message below, the Proxy supports the iaas.compute domain of
   services. The message SHOULD carry the Registration-Timeout header.
   The message may also carry other Timer values and Retry counts as a
   way to globally configure all SNs in the network uniformly.

     ADVERTISE 1 SOP/1.0


Dalela                   Expires July 4, 2012                 [Page 16]


Internet-Draft      Service Orchestration Protocol         January 2012


     From: default@p.provider.com
     To: default@default.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Timestamp: 1285162132
     Sequence-ID: 13224 ADVERTISE
     Registration-Timeout: 1000
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 147

     <?xml version="1.0" encoding="UTF-8"?>
     <domain name="iaas.compute" type="capability" def="sdn"/>

6.2. CANCEL

   This message is used to cancel a transaction that has not been
   committed in case of errors detected or in case of a timeout. The
   cancellation is a new transaction and it requires a response. The
   CANCEL refers to the Task to be cancelled through the Task-ID header.
   The receiver of the request MAY obtain a description of the Task
   again by querying the WS with the Task-ID provided in the message.

     CANCEL 1 SOP/1.0
     From: default@p.provider.com
     To: default@4357254.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=khewui6GDw
     Sequence-ID: 134 CANCEL
     Task-ID: 67439375
     Workflow-Server: ws.provider.com
     Requestor: consumer@customer.provider.com

6.3. COMMIT

   This message MUST be used to commit CREATE, DELETE, UPDATE or
   TRANSFER transactions. This message SHOULD be sent by the Proxy to
   each SN involved in a Workflow after all Tasks have been successfully
   completed. However, the Workflow specification may override this
   through a specification of when the COMMIT should be sent. The COMMIT
   refers to the Task to be committed through the Task-ID header. The
   receiver of the request MAY obtain a description of the Task again by
   querying the WS with the Task-ID provided in the message.

   The Proxy SHOULD also send a COMMIT to the WS to commit the Workflow.
   This is an indication to the WS that the Workflow execution was
   successful. The WS upon receipt of a COMMIT SHALL store the Workflow
   instance for reference later, and return a Workflow-ID. This


Dalela                   Expires July 4, 2012                 [Page 17]


Internet-Draft      Service Orchestration Protocol         January 2012


   Workflow-ID SHOULD be used to recreate services (in case of disaster
   recovery) or reverse them (in case of service deletion).

     COMMIT 1 SOP/1.0
     From: default@p.provider.com
     To: default@4357254.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=khewui6GDw
     Sequence-ID: 134 COMMIT
     Task-ID: 67439375
     Workflow-Server: ws.provider.com
     Requestor: consumer@customer.provider.com

6.4. CREATE

   This message SHOULD be used by a Proxy to request a service creation
   to a SN. The CREATE refers to the Task to be executed through the
   Task-ID header. The receiver of the request SHOULD obtain a Task
   description by querying the WS with the Task-ID provided in message.

     CREATE 1 SOP/1.0
     From: default@p.provider.com
     To: default@4357254.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 134 CREATE
     Task-ID: 67439375
     Workflow-Server: ws.provider.com
     Requestor: consumer@customer.provider.com

6.5. DELETE

   This message SHOULD be used by a Proxy to request a service deletion
   to a SN. The DELETE refers to the Task to be executed through the
   Task-ID header. The receiver of the request SHOULD obtain a Task
   description by querying the WS with the Task-ID provided in message.

     DELETE 1 SOP/1.0
     From: default@p.provider.com
     To: default@4357254.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 134 DELETE
     Task-ID: 67439375
     Workflow-Server: ws.provider.com
     Requestor: consumer@customer.provider.com



Dalela                   Expires July 4, 2012                 [Page 18]


Internet-Draft      Service Orchestration Protocol         January 2012


6.6. GET

   This message MUST be used by a SN to obtain a Task description from a
   WS. It SHOULD be used by a Proxy to request a SN description prior to
   a service transfer. It MUST be used by a Proxy to obtain a Workflow
   or Task description from a WS. The context of the Transaction
   determines which of these functions need to be achieved.

   Depending on the context, appropriate headers must be present. To
   request a SN description, a Proxy MUST include the Service-ID header
   to point to refer to the specific service whose description is
   required. To get a workflow or task description, the appropriate
   Workflow-Name, Workflow-ID or Task-ID headers MUST be present. The
   Query-Type header MUST be present to describe the type of query.

     GET 1 SOP/1.0
     From: default@p.provider.com
     To: default@ws.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9oluElbcw
     Sequence-ID: 286 WORKFLOW
     Query-Type: workflow-name
     Workflow-Name: gTyuI82Zx@provider.com

6.7. DISCOVER

   This message SHOULD be sent by a SN to discover any Proxies that
   might be willing or capable to act as Proxy for its services. The SDF
   content in the message indicates service capabilities in the SN. In
   the example below, the SN is capable of iaas.compute domain of
   services.

     DISCOVER 1 SOP/1.0
     From: default@default.com
     Via: SOP/1.0/UDP default@default.com;branch=k9DjR5lbcw
     Timestamp: 1285162130
     Sequence-ID: 1 DISCOVER
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 147

     <?xml version="1.0" encoding="UTF-8"?>
     <domain name="iaas.compute" type="capability" def="sdn"/>







Dalela                   Expires July 4, 2012                 [Page 19]


Internet-Draft      Service Orchestration Protocol         January 2012


6.8. PUBLISH

   This message SHOULD be sent by a SN whenever its service capabilities
   change or when the Publish-Timeout timer expires or after a service
   restart (after a registration), whichever comes earlier.

   This message indicates the current service availability of the SN to
   the Proxy. The Proxy will use the information given in the SDF
   payload to update its service database. The capabilities indicated
   here would be used by the Proxy to route service requests towards the
   SN. The "capability" and "availability" inside the SDF indicate the
   total capacity and the capacity that is available currently.

     PUBLISH SOP/1.0
     From: default@4357254.provider.com
     To: default@p.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@4357254.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 13432 PUBLISH
     Distance: 1
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 513

     <?xml version="1.0" encoding="UTF-8"?>
     <domain name="iaas.compute" type="capability" def="sdn">
         <!-- list of domain elements -->
     </domain>
     <domain name="iaas.compute" type="availability" def="sdn">
         <!-- list of domain elements -->
     </domain>

6.9. REGISTER

   This message SHOULD be used by a SN, a Proxy, a WS or a User to
   register with a Proxy after a new Proxy discovery, or when the
   Registration-Timeout expires, whichever comes earlier. The Node-Type
   header informs the Proxy about the type of registering entity. If the
   Node-Type header indicates a service-node, then the message MAY have
   the Transfer-Node header, indicating type of mobility the SN
   supports. For other node-types, Transfer-Node header MUST be absent.

   The REGISTER is used by the Proxy to establish the Identity of the SN
   (its Domain Name and IP Address). The Proxy MAY initiate
   authentication procedures with the registering entity after the
   REGISTER is received as described in Section. If the registration
   fails, the Proxy SHALL NOT register the entity.



Dalela                   Expires July 4, 2012                 [Page 20]


Internet-Draft      Service Orchestration Protocol         January 2012


   The REGISTER is used by the Proxy as a heartbeat or keep-alive
   mechanism. The Proxy SHALL de-register the entity if 3 successive
   Registration-Timeouts have expired, and remove all information
   related to that service. The Proxy MAY initiate service recreation
   procedures for all services under that SN at another SN, if a SN has
   been de-registered due to Registration-Timer expiry.

     REGISTER 1 SOP/1.0
     From: default@default.com
     To: default@p.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@default.com;branch=k9DjR5lbcw
     Sequence-ID: 1 REGISTER
     Transfer-Mode: stateless
     Node-Type: service-node

6.10. SUBSCRIBE

   This message allows a SOP network element to request updates on a
   particular type of service capability. The SDF payload MUST be
   present to know the capabilities for which the requestor is
   subscribing. A WS SHALL subscribe with the Proxy for all updates to
   services and all updates to user registrations. A User MAY subscribe
   with the Proxy to receive Workflow and service related updates.

     SUBSCRIBE SOP/1.0
     From: default@ws.provider.com
     To: default@p.provider.com
     Via: SOP/1.0/UDP default@ws.provider.com;branch=k9DjR5lbcw
     Exchange: 43shXui7236
     Timestamp: 1285162130
     Sequence-ID: 1 SUBSCRIBE
     Distance: 1
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 154

     <?xml version="1.0" encoding="UTF-8"?>
     <domain name="iaas.compute" type="capability" def="sdn"/>
     <domain name="users.company.com" type="capability" def="sdn"/>

6.11. TRANSFER

   This message is sent by a Proxy to initiate a service transfer. The
   From and To headers SHALL indicate the source and destination
   Proxies. The Source and Destination headers MUST be present and they
   indicate the source and destination SNs. The Requestor header MUST be
   present to identify the initiator of the transfer (this may be a


Dalela                   Expires July 4, 2012                 [Page 21]


Internet-Draft      Service Orchestration Protocol         January 2012


   Proxy). The TRANSFER message sets up the session to initiate a
   service transfer. It is not responsible for actually transferring
   service state from one SN to another. The latter is outside the scope
   of the current document, and each service may choose its own methods
   to transfer state (such as FTP to transfer a file).

   The SDF payload in the TRANSFER message SHALL indicate to the
   Destination SN the capabilities expected in the transfer. For
   instance, these capabilities may indicate the total amount of memory
   or storage required to accept a moving virtual machine. The content
   of that memory is outside scope for SOP and to be handled separately.

     TRANSFER SOP/1.0
     From: default@p1.provider.com
     To: default@p2.provider.com
     Exchange: 4j253TyXuM6
     Via: SOP/1.0/UDP default@p1.provider.com;branch=XsMf634d2W
     Sequence-ID: 1 TRANSFER
     Source: service1@4357254.provider.com
     Requestor: default@p1.provider.com
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 142

     <?xml version="1.0" encoding="UTF-8"?>
     <domain name="iaas.compute" type="capability" def="sdn">
         <!-- list of domain elements -->
     </domain>

6.12. UPDATE

   This message SHOULD be used by a Proxy to request a service update to
   a SN. The UPDATE refers to the Task to be executed through the Task-
   ID header. The receiver of the request SHOULD obtain a description of
   the Task by querying the WS with the Task-ID provided in the message.

     UPDATE 1 SOP/1.0
     From: default@p.provider.com
     To: default@4357254.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 134 CREATE
     Task-ID: 67439375
     Workflow-Server: ws.provider.com
     Requestor: consumer@customer.provider.com





Dalela                   Expires July 4, 2012                 [Page 22]


Internet-Draft      Service Orchestration Protocol         January 2012


6.13. WORKFLOW

   This message is used by a Client or a Proxy to initiate a Workflow
   execution. It MUST contain the Workflow-Name that needs to be
   executed. It MUST contain a reference to the prior Workflow-ID when
   the request involves deletion or transfer of a prior executed
   Workflow.

     WORKFLOW 1 SOP/1.0
     From: consumer@customer.com
     To: default@p.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.customer.com;branch=k9DjR5lbcw
     Sequence-ID: 5 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com

7. SOP Responses

7.1. 100 TRYING

   This message MUST be sent by a Proxy on receiving a Workflow request.
   It indicates that the Proxy has received the request and is
   attempting to execute it. This message SHOULD be sent by a receiving
   SN upon a CREATE, UPDATE, DELETE or TRANSFER request, as these
   operations can take a longer period of time. This message informs the
   Proxy that the request has been received and it being processed.

     100 TRYING 1 SOP/1.0
     From: default@p.provider.com
     To: consumer@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 TRYING
     Workflow-Name: gTyuI82Zx@provider.com

7.2. 183 WORKFLOW PROGRESS

   The Proxy may send these messages periodically to the Client keeping
   it informed about the update. These message MAY have a Workflow
   description that describe the progress in execution.

     183 SESSION PROGRESS 1 SOP/1.0
     From: default@p.provider.com
     To: consumer@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 TRYING


Dalela                   Expires July 4, 2012                 [Page 23]


Internet-Draft      Service Orchestration Protocol         January 2012


     Workflow-Name: gTyuI82Zx@provider.com
     Content-Type: application/sdf; charset=utf-8
     Content-Length: 542

     <?xml version="1.0" encoding="UTF-8"?>
     <workflow name="gTyuI82Zx" id="68743693"
         xmlns:sdf="http://sdf.org/sdf">
       <description>workflow description</description>
       <taskgroup id="1" prev="idle" next="idle">
          <description>taskgroup description</description>
          <task id="1" prev="idle" next="idle" action="CREATE"
              server="4357254.provider.com reference="67439375"
              status="pending"/>
       </taskgroup>
     </workflow>

7.3. 200 OK

   This message is sent by multiple entities including the WS, Proxy and
   SNs to indicate successful completion of the requests. Depending on
   the context, message contents and headers will vary. Below is an
   example message sent by the Proxy on completion of a CREATE.

     200 OK 1 SOP/1.0
     From: default@4357254.provider.com
     To: default@p.provider.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@sn.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 134 CREATE
     Task-ID: 67439375
     Workflow-Server: ws.provider.com

7.4. 305 USE PROXY

   This message is sent by a Proxy if it wants to redirect the requestor
   to another Proxy and will not service the request itself. The message
   MUST have the Alternate-Proxy header.

     305 USE PROXY 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Alternate-Proxy: default@p2.provider.com
     Workflow-Name: gTyuI82Zx@provider.com



Dalela                   Expires July 4, 2012                 [Page 24]


Internet-Draft      Service Orchestration Protocol         January 2012


7.5. 400 BAD REQUEST

   This message SHALL be sent by a Proxy or a WS or a SN if they find
   the request malformed. Below is an example message.

     400 BAD REQUEST 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com

7.6. 403 FORBIDDEN

   This message SHALL be sent by a Proxy or a WS if they find the user
   is not authorized to perform an operation. This may be used by a
   Proxy to indicate that it needs to authenticate in a REGISTER. The
   message may be used if a Proxy or WS finds that a user is not
   authorized to execute a Workflow.

     403 FORBIDDEN 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com

7.7. 500 SERVER INTERNAL ERROR

   This message SHALL be sent by a Proxy or a WS or a SN if they tried
   to process a request but failed to some internal error. A SN will
   typically send this request if it fails to perform requested
   operation (like service creation, deletion, update, etc.).

     500 SERVER INTERNAL ERROR 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com






Dalela                   Expires July 4, 2012                 [Page 25]


Internet-Draft      Service Orchestration Protocol         January 2012


7.8. 504 SERVER TIMEOUT

   This message SHALL be sent by a Proxy if one of the SNs fails to
   respond to a request, and the Proxy times out on retransmits.

     504 SERVER TIMEOUT 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com

7.9. 603 DECLINE

   This message SHALL be sent by a Proxy, WS or SN if it is not able to
   support the request, because there is no capacity available. This
   response SHOULD be sent if the Proxy knows that no other Proxy will
   be able to support this request (otherwise send 305 USE PROXY). The
   scope of the DECLINE is the set of Proxies that this Proxy knows of.

     603 DECLINE 1 SOP/1.0
     From: default@p.provider.com
     To: user@customer.com
     Exchange: 43shXui7236
     Via: SOP/1.0/UDP default@p1.provider.com;branch=k9DjR5lbcw
     Sequence-ID: 1 WORKFLOW
     Workflow-Name: gTyuI82Zx@provider.com

8. SOP Headers

   SOP messages comprise of headers. Each header begins on a new line.
   Each header field consists of a field name followed by a colon (":")
   and the field value.

      field-name:field-value

   Header fields follow the same generic header format as that given in
   Section 7.3.1 of RFC 3261. The order of fields is not important in a
   SOP message however it is recommended that fields relevant to service
   routing (To, From, Exchange, Via) are present at the top of the
   message to facilitate rapid processing.

   The first line of every SOP message must have the name of the request
   or response, along with the SOP version number. This message name
   determines the subsequent processing of messages. Example message
   name headers are shown below.


Dalela                   Expires July 4, 2012                 [Page 26]


Internet-Draft      Service Orchestration Protocol         January 2012



      CREATE 1 SOP/1.0
      GET 1 SOP/1.0

   The number following the Message Type indicates if the message is
   being re-transmitted as the same message in the same Transaction.
   This number MUST be incremented by a sender whenever a message is re-
   transmitted. A receiver MAY give higher priority to re-transmitted
   messages.

8.1. Acknowledge Timeout

   This header indicates the time in seconds after which a SN MAY send a
   "reminder" 200 OK message to the Proxy, soliciting a COMMIT. After
   Retransmission Counter times transmissions of the 200 OK, the SN
   SHOULD consider the transaction cancelled and initiate rollback
   operations. This header SHOULD be sent in the Advertisement message
   to set the global value of the timeout. The header MAY also be sent
   in the CREATE, DELETE, TRANSFER requests to set the timeout per
   request basis depending on the time a Proxy anticipates it would take
   to complete certain operations.

      Acknowledge-Timeout: 30

8.2. Alternate Proxy Header

   This header is used to redirect a Client to another Proxy. This can
   happen if a Proxy knows that the Workflow Anchor (WA) for the
   Workflow has moved to another Proxy and the Proxy is configured not
   to forward requests to that Proxy.

      Alternate-Proxy: p2.provider.com

8.3. Cancel Timeout Header

   This header indicates the time in seconds after which a Proxy SHOULD
   send a cancellation for a request if a 200 OK or 100 Trying message
   has not been received. This header SHOULD be sent in the
   Advertisement message to set the global value of the timeout. The
   header MAY also be sent in the CREATE, DELETE, TRANSFER or UPDATE
   requests to set the timeout per request basis.

      Cancel-Timeout: 30






Dalela                   Expires July 4, 2012                 [Page 27]


Internet-Draft      Service Orchestration Protocol         January 2012


8.4. Commit Timeout Header

   This header defines the time in seconds after a response has been
   sent that a COMMIT is expected by the SN. Its behavior is described
   in Section 9.6.

      Commit-Timeout: 50

8.5. Content Type Header

   This header defines the kind of content carried in the SOP request.
   SOP messages are expected to carry SDF payloads. However, it is
   possible that other kinds of service description schemes may be used
   in conjunction with SOP. This header MUST be used to specify the type
   of application payload carried in the SOP message.

      Content-Type: application/sdf; charset=utf-8

8.6. Content Length Header

   This header defines length of content carried in the SOP request,
   computed in bytes. The length MUST NOT include SOP headers. It MUST
   be the length of the SDF payload carried in the SOP packet.

      Content-Length: 158

8.7. Distance Header

   This header helps in identifying the distance of a network entity
   from a receiver. It MUST be used in PUBLISH messages to advertize
   services. The value of this header MUST be incremented whenever a
   PUBLISH is forwarded.  The receivers SHOULD use a shortest path to a
   service, and to avoid service routing loops.

      Distance: 1

8.8. Destination Header

   This header MUST be present in the TRANSFER messages. It is used to
   indicate the address of the destination SN that will be receiving a
   service. The address MUST conform to addressing in Section 5.2.

      Destination: default@sn.provider.com






Dalela                   Expires July 4, 2012                 [Page 28]


Internet-Draft      Service Orchestration Protocol         January 2012


8.9. Exchange Header

   This header is used to identify the exchange within which a
   transaction is taking place. The use of Exchange identifiers helps to
   correlate cross-domain, multi-device or other complex orchestrations
   that may involve multiple devices or even brokers. This header MUST
   be present in all request-response messages.

      Exchange: 43shXui7236

8.10. From Header

   This header identifies the originator of the service request. It MUST
   indicate the initiator's address. Addresses MUST conform to SOP
   addressing in Section 5.2.

      From: default@p.provider.com

8.11. Node Type Header

   This header identifies the type of node in the SOP network. The
   header MUST have one of the following values: (a) "service-client",
   (b) "workflow-server", (c) "service-proxy" and (d) "service-node".
   This header is used in REGISTER, PUBLISH and SUBSCRIBE messages. In
   the REGISTER and PUBLISH messages it helps to identify the sender
   type and distinguish various types of registrations or publications.
   In the SUBSCRIBE message it helps the Proxy to determine which node's
   information must be forwarded to the requestor.

      Node-Type: service-node

8.12. Priority Header

   This header MAY be added by requestor to prioritize its processing
   over other pending messages. Priorities can be any number from 1 to
   65535, with 65535 being the highest. This field may be used in
   conjunction with policy decisions in a cloud service network to
   prioritize certain requests over others.

      Priority: 5

8.13. Query Type Header

   This header MUST be used in GET requests to obtain information about
   a Task-ID, Workflow-Name, Workflow-ID, List of Workflow-IDs against a
   Workflow-Name, List of Task-IDs against a Workflow-ID or Name, etc.
   The header can have the following values:


Dalela                   Expires July 4, 2012                 [Page 29]


Internet-Draft      Service Orchestration Protocol         January 2012


   (a) "active-workflows" - all workflow-ids against a workflow-name.
   the Workflow-Name MUST be present in the request.

   (b) "active-tasks" - all task-ids for a Workflow-Name or Workflow-ID.
   The Workflow-Name and/or Workflow-ID MUST be present in request.

   (c) "workflow-name" - description of a Workflow in Tasks, specified
   by a Workflow-Name. The Workflow-Name MUST be present in request.

   (d) "workflow-id" - description of tasks that were performed in a
   particular instance of a Workflow, denoted by the Workflow-ID. The
   Workflow-ID MUST be present in the request.

   (e) "task-id" - description of the attributes that make up a specific
   Task referenced by the Task-ID. The Task-ID MUST be present in the
   request. Workflow-Name and Workflow-ID MAY be present.

      Query-Type: workflow-id

8.14. Publish Timeout Header

   This timer indicates the period at which a SN must publish its
   services to the Proxy regardless of change in service availability.
   Its behavior is described in detail in Section 9.7.

      Publish-Timeout: 500

8.15. Retry Count Header

   This header defines the number of times a SN SHALL send a 200 OK in
   response to a CREATE, DELETE, TRANSFER or UPDATE messages before
   receiving a COMMIT. On each retry, the Commit-Timeout MUST be expired
   before the retry is attempted. After completion of Retry Count number
   of retries, the SN MUST initiate a service rollback. This header
   SHOULD be sent in the ADVERTISE message and MAY be sent in individual
   CREATE, DELETE, TRANSFER or UPDATE messages. In the latter case, the
   count applies only to that particular Exchange.

      Retry-Count: 3

8.16. Requestor Header

   In some cases, the originator of a request may be different than the
   requestor. For instance, a Proxy may initiate a request using a non-
   SOP trigger. In these cases, it is important to include requestor's
   information in SOP messages. This information may be used for



Dalela                   Expires July 4, 2012                 [Page 30]


Internet-Draft      Service Orchestration Protocol         January 2012


   accounting, or other user-specific customizations. This header MAY be
   identical to the From Header.

      Requestor: service-client@customer.com

8.17. Registration Timeout Header

   This header indicates to SN the time within which it must register
   again. Behavior of this timer is described in the Section 9.1.

      Registration-Timeout: 10000

8.18. Service ID Header

   A Service ID MAY be used to refer to a particular instance of a
   virtual service. A Proxy MUST return a unique Service ID in response
   to a REGISTER. That ID MUST be used in future to identify services. A
   new Service ID MUST also be indicated by the WS in case of a new
   service creation. Moving services SHOULD retain the Service-ID.

      Service-ID: 8743435@compute
      Service-ID: 8743435@compute-resources.provider.com

8.19. Sequence ID Header

   This header MUST be present in all requests and SHALL identify the
   sequence number of requests of the same type. By adding sequence
   numbers, a receiver has the ability to identify which requests have
   come later. The sequence numbers MUST be reset after they have
   reached a maximum of 32 bits unsigned integer.

      Sequence-ID: 8624 CREATE

8.20. Source Header

   This header is used for service mobility and indicates the address of
   the source SN that will be transferring a service.

      Source: default@sn.provider.com

8.21. Subscribe Timeout Header

   This timer indicates the period at which a TS or WS must SUBSCRIBE
   for SNs or Clients regardless of change in their availability. Its
   behavior is described in detail in Section 9.9.

      Subscribe-Timeout: 500


Dalela                   Expires July 4, 2012                 [Page 31]


Internet-Draft      Service Orchestration Protocol         January 2012



8.22. Task ID Header

   This header identifies a unique type of configuration in the TS. A
   common ID may be used across a number of SNs. Configuration specific
   to SN would be passed based on the requestor's address in GET. Use of
   an ID allows all configurations to be stored centrally.

      Task-ID: 67439375

8.23. Timestamp Header

   This header MAY be added by requestor to identify the time of the
   request origination. It MAY be used to drop requests that are older
   than the specified expiry time period. The timestamp will specify the
   expired seconds according to UTC since January 1, 1961.

      Timestamp: 1285162130

8.24. To Header

   This header identifies the destination of the service request. It
   must indicate a user-id to which the service request is targeted.

      To: default@p.provider.com

8.25. Transfer Mode Header

   This header is used in the REGISTER message. The SN identifies the
   manner in which it can support service mobility. If the SN is capable
   of transferring live state to another SN, it SHOULD set this header
   to "stateful". If the SN cannot transfer live state, it must set this
   header value to "stateless". In stateless transfers, a service
   instance is created and the old one is deleted.

      Transfer-Mode: stateful

8.26. Via Header

   This header MUST be inserted by every SOP node through which the SOP
   request traverses, provided the SOP node is not acting as a stateless
   proxy. The forwarder MUST insert its SOP address and a random branch
   parameter to identify the transaction between the peering entities.
   The header will also have the SOP version and indicate the transport
   over which SOP message is transmitted.

      Via: SOP/1.0/UDP default@sb.provider.com;branch=k9DjR5lbcw


Dalela                   Expires July 4, 2012                 [Page 32]


Internet-Draft      Service Orchestration Protocol         January 2012



8.27. Workflow ID Header

   This header identifies a unique instance of a Workflow. A workflow
   may be customized for a user based on user-specific policies. The
   Workflow ID is the specific customized instance of a workflow. It may
   reference a stored workflow in the WS, or with sufficient number of
   parameters so as to compute the workflow at a later time.

      Workflow-ID: 68743693@provider.com

8.28. Workflow Name Header

   This header identifies a unique Workflow within a provider. The
   Workflow Name allows a client or Proxy to request a workflow
   execution. A Proxy SHOULD send PUBLISH messages listing available
   workflows. Workflow Name MUST identify the provider who supports the
   workflow. This allows workflow names to overlap across providers.

      Workflow-Name: X32mnTrUwq@provider.com

8.29. Workflow Server Header

   This header provides the address of a workflow server that a SN or
   Proxy may query for processing a request, such as to obtain a task
   description. This header should be used in conjunction with the Task-
   ID header.

      Workflow-Server: Workflow-Server.provider.com

9. Timers and Counters

9.1. Retransmission Counter

   This counter defines the number of retransmissions for a request
   before a CANCEL is sent, or for a response before a COMMIT is
   expected. The value of counter SHOULD be set by the Retry-Count
   header globally in the ADVERTISE message or per transaction in
   CREATE, DELETE, TRANSFER or UPDATE messages.

9.2. Acknowledge-Timeout

   This indicates the time after which a SN may send a "reminder" 200 OK
   message to the Proxy, soliciting a COMMIT. After Retransmission
   Counter retries of the 200 OK, the SN would consider the transaction
   cancelled and initiate rollback operations.



Dalela                   Expires July 4, 2012                 [Page 33]


Internet-Draft      Service Orchestration Protocol         January 2012


9.3. Register-Timeout

   This indicates the maximum time for which a Proxy will honor a
   registration. The SN must register with the Proxy within that time.
   If REGISTER is not received before timer expiry, the Proxy SHOULD
   mark the SN and its services unavailable. On receiving a REGISTER
   that matches its Capabilities, the Proxy shall send a 200 OK.

9.4. Advertise-Timeout

   This indicates the time after which a Proxy will send ADVERTISE. If
   the Proxy indicated time period for the ADVERTISE has expired for a
   successive 3 times, a SN MAY transmit a DISCOVER requesting for
   Proxies that can cater to its service domains. This timer SHOULD be
   set by the Advertisement-Timeout header in the ADVERTISE message.

9.5. Cancel-Timeout

   This timer is started after sending any request and reset after the
   receipt of any provisional or final response (such as 100 Trying or
   200 OK). If a provisional or final response is not received, the
   sender MUST transmit the request a total of Retransmission Counter
   times. If a provisional or final response is still not received, the
   sender SHALL send a CANCEL and will terminate the transaction.

   This timer SHOULD be set by the Cancel-Timeout header in the
   ADVERTISE message and it may be overridden on per transaction basis
   in the CREATE, DELETE, TRANSFER and UPDATE messages.

9.6. Commit-Timeout

   This timer will be started by a responder after sending a 200 OK on
   transactions where a COMMIT is expected (CREATE, DELETE, TRANSFER,
   etc). After the timer expires, a 200 OK will be retransmitted up to a
   max of Retransmission Counter times. When the Commit-Timeout has
   expired Retransmission Counter times (after sending a 200 OK) the
   responder SHALL silently discard (or rollback) the changes it had
   performed earlier.

   This timer SHOULD be set by the Commit-Timeout header in the
   ADVERTISE message and it may be overridden on per transaction basis
   in the CREATE, DELETE, TRANSFER and UPDATE messages.

9.7. Discover-Timeout

   This timer will be started by a SN immediately after startup or after
   3 successive timeouts of the Advertise-Timer (the Proxy has not sent


Dalela                   Expires July 4, 2012                 [Page 34]


Internet-Draft      Service Orchestration Protocol         January 2012


   ADVERTISE 3 successive timeouts). When the Timer expires, the SN
   SHALL transmit the DISCOVER message. The timer SHALL be reset upon
   receipt of a ADVERTISE that matches the SN's SDN. This time SHALL
   have a fixed value of 15 seconds, because the timer is required to
   discover a Proxy and prior to receiving an ADVERTISE.
9.8. Publish-Timeout

   This timer defines the time period within which a SN must send its
   service updates, regardless of any change in the service status. This
   will refresh a Proxy's service database, and prevent stale
   information. This timer SHOULD be set by the Publish-Timeout in the
   ADVERTISE message.

     Publish-Timeout: 500

9.9. Subscribe-Timeout

   This timer defines the time period within which a WS or TS must send
   a SUBSCRIBE requesting for updates on SN or Client availabilities.
   This will refresh a Proxy's subscribe database, and prevent stale
   information. This timer SHOULD be set by the Subscribe-Timeout in the
   ADVERTISE message. Alternately

     Subscribe-Timeout: 5000

9.10. Retransmit-Timeout

   This timer defines the time period within which a WS or TS must send
   a 100 TRYING to acknowledge a request. If the 100 TRYING response is
   not received within this time, the sender SHOULD retransmit the
   request up to a maximum of NRetransmit times. This timer SHOULD be
   set by the Subscribe-Timeout in the ADVERTISE message.

     Subscribe-Timeout: 5000

10. Message-Header Relationships

   This section describes which messages depend on which headers. The
   following convention is used. "M" denotes "mandatory", "O" denotes
   "optional" and "I" denotes "ignore message" (drop it if it is seen).

   +-------------------------+-------------------------------------+
   | Header Name             |A|C|C|C|D|G|D|P|R|S|T|U|W|1|2|3|4|5|6|
   |                         |D|A|O|R|E|E|I|U|E|U|R|P|O|X|X|X|X|X|X|
   |                         |V|N|M|E|L|T|S|B|G|B|A|D|R|X|X|X|X|X|X|
   |                         |E|C|M|A|E| |C|L|I|S|N|A|K| | | | | | |
   |                         |R|E|I|T|T| |O|I|S|C|S|A|F| | | | | | |


Dalela                   Expires July 4, 2012                 [Page 35]


Internet-Draft      Service Orchestration Protocol         January 2012


   |                         |T|L|T|E|E| |V|S|T|R|F|T|L| | | | | | |
   |                         |I| | | | | |E|H|E|I|E|E|O| | | | | | |
   |                         |S| | | | | |R| |R|B|R| |W| | | | | | |
   |                         |E| | | | | | | | |E| | | | | | | | | |
   +---------------------------------------------------------------+
   | Acknowledge-Timeout     |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Altenate-Proxy          |I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|O|I|I|I|
   | Content-Length          |O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|
   | Cancel-Timeout          |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Commit-Timeout          |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Content-Type            |O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|
   | Distance                |I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
   | Destination             |I|I|I|I|I|I|I|O|I|O|I|I|I|I|I|I|I|I|I|
   | Exchange                |O|M|M|M|M|M|O|M|M|M|M|M|M|M|M|M|M|M|M|
   | From                    |M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|
   | Node-Type               |I|I|I|I|I|I|I|M|M|M|I|I|I|I|I|I|I|I|I|
   | Priority                |I|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Publish-Timeout         |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Retry-Count             |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Query-Type              |I|I|I|I|I|M|I|I|I|I|I|I|I|I|I|I|I|I|I|
   | Requestor               |I|I|M|M|M|I|I|I|I|I|M|O|I|I|I|I|I|I|I|
   | Registration-Timeout    |M|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Service-ID              |I|I|I|I|I|I|I|I|I|I|I|I|I|I|O|I|I|I|I|
   | Sequence-ID             |O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|
   | Source                  |I|I|I|I|I|I|I|I|I|I|M|I|I|I|I|I|I|I|I|
   | Subscribe-Timeout       |O|I|I|O|O|I|I|I|I|I|O|O|I|I|I|I|I|I|I|
   | Task-ID                 |I|I|O|O|O|O|I|I|I|I|O|O|I|I|O|I|I|I|I|
   | Timestamp               |O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|
   | To                      |M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|M|
   | Via                     |O|M|M|M|M|M|O|M|M|M|M|M|M|M|M|M|M|M|M|
   | Workflow-ID             |I|I|O|I|I|O|I|I|I|I|I|I|O|I|O|I|I|I|I|
   | Workflow-Name           |I|I|I|I|I|I|I|I|I|I|I|I|M|I|I|I|I|I|I|
   | Workflow-Server         |I|O|O|O|O|I|I|I|I|I|O|O|O|I|I|I|I|I|I|
   +---------------------------------------------------------------+

11. Security Considerations

   Text-based messages can be snooped or modified in transit. Encryption
   and authentication are essential with SOP. SOP authentication can be
   done along same lines as SIP [SIP]. Similarly, SOP can use IPSec, TLS
   or other encryption and privacy mechanisms already being used with
   HTTP. A description of these mechanisms is left to a later effort.







Dalela                   Expires July 4, 2012                 [Page 36]


Internet-Draft      Service Orchestration Protocol         January 2012


12. IANA Considerations

   An IANA port will be requested for the SOP destination port. A
   request to IANA to register SOP headers will be sent when the
   specification is closer to being finalized.

13. Conclusions

   SOP describes a formal, extensible and flexible framework for
   orchestrating services in an interoperable way. Using SOP it should
   be possible to define new services and service domains, and advertise
   and consume them across provider and consumer boundaries.

   Interoperable ways of creating, delivering and consuming services is
   essential for cloud. We envision that SOP can be an essential
   ingredient of Cloud Proxies and Border Gateways, to exchange services
   across multiple private, public, hosted, community and other clouds.

14. References

14.1. Normative References

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

14.2. Informative References

   [NIST] DRAFT Cloud Computing Synopsis and Recommendations
             http://csrc.nist.gov/publications/drafts/800-146/Draft-
             NIST-SP800-146.pdf

   [REQT] Service Orchestration Protocol Requirements
             http://www.ietf.org/id/draft-dalela-orchestration-00.txt

   [ARCH] Service Orchestration Protocol Network Architecture
             http://www.ietf.org/id/draft-dalela-sop-architecture-00.txt

   [SDF] Service Description Framework
             http://www.ietf.org/id/draft-dalela-sdf-00.txt

15. Acknowledgments

   This document was prepared using 2-Word-v2.0.template.dot.






Dalela                   Expires July 4, 2012                 [Page 37]


Internet-Draft      Service Orchestration Protocol         January 2012


   Authors' Addresses

   Ashish Dalela
   Cisco Systems
   Cessna Business Park
   Bangalore
   India 560037

   Email: adalela@cisco.com


   Mike Hammer
   Reston
   Virginia
   USA 20190

   Email: mphmmr@gmail.com


   Monique Morrow
   Cisco Systems [Switzerland] GmbH
   Richistrasse 7
   CH-8304
   Walllisellen
   Switzerland

   Email: mmorrow@cisco.com


   Peter Tomsu
   Cisco Systems Austria GmbH
   30 Floor, Millennium Tower
   Handelskai 94-96
   A-1200   Vienna
   Austria

   Email: ptomsu@cisco.com












Dalela                   Expires July 4, 2012                 [Page 38]