SIPPING Working Group                                            V. Hilt
Internet-Draft                             Bell Labs/Lucent Technologies
Expires: December 25, 2006                                  G. Camarillo
                                                                Ericsson
                                                            J. Rosenberg
                                                           Cisco Systems
                                                           June 23, 2006


   A Framework for Session Initiation Protocol (SIP) Session Policies
             draft-ietf-sipping-session-policy-framework-01

Status of this Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of 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 December 25, 2006.

Copyright Notice

   Copyright (C) The Internet Society (2006).

Abstract

   Proxy servers play a central role as an intermediary in the Session
   Initiation Protocol (SIP) as they define and impact policies on call
   routing, rendezvous, and other call features.  However, there is
   currently no standard mechanism by which a proxy can define or
   influence policies on sessions such as the codecs or media types to



Hilt, et al.            Expires December 25, 2006               [Page 1]


Internet-Draft          Session Policy Framework               June 2006


   be used.  This document specifies a framework for SIP session
   policies that provides this capability to proxies.  It defines a
   model, an overall architecture and the protocol components for
   session policies.


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Session-Independent Policies . . . . . . . . . . . . . . . . .  5
     3.1.  Architecture and Overview  . . . . . . . . . . . . . . . .  5
     3.2.  Policy Subscription  . . . . . . . . . . . . . . . . . . .  6
   4.  Session-Specific Policies  . . . . . . . . . . . . . . . . . .  7
     4.1.  Architecture . . . . . . . . . . . . . . . . . . . . . . .  7
     4.2.  Overview . . . . . . . . . . . . . . . . . . . . . . . . .  8
     4.3.  Examples . . . . . . . . . . . . . . . . . . . . . . . . . 10
       4.3.1.  Offer in Request . . . . . . . . . . . . . . . . . . . 10
       4.3.2.  Offer in Response  . . . . . . . . . . . . . . . . . . 12
     4.4.  UA/Policy Server Rendezvous  . . . . . . . . . . . . . . . 13
       4.4.1.  UAC Behavior . . . . . . . . . . . . . . . . . . . . . 13
       4.4.2.  Caching of Policy Server URIs  . . . . . . . . . . . . 14
       4.4.3.  UAS Behavior . . . . . . . . . . . . . . . . . . . . . 15
       4.4.4.  Proxy Behavior . . . . . . . . . . . . . . . . . . . . 15
       4.4.5.  Header Definition and Syntax . . . . . . . . . . . . . 16
     4.5.  Policy Subscription  . . . . . . . . . . . . . . . . . . . 17
   5.  Security Considerations  . . . . . . . . . . . . . . . . . . . 18
   6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 19
     6.1.  Registration of the "Policy-Id" Header . . . . . . . . . . 19
     6.2.  Registration of the "Policy-Contact" Header  . . . . . . . 19
     6.3.  Registration of the "policy" SIP Option-Tag  . . . . . . . 19
   Appendix A.  Acknowledgements  . . . . . . . . . . . . . . . . . . 19
   Appendix B.  Session-Specific Policies - Call Flows  . . . . . . . 19
     B.1.  Offer in Invite  . . . . . . . . . . . . . . . . . . . . . 20
     B.2.  Offer in Response  . . . . . . . . . . . . . . . . . . . . 22
   7.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 23
     7.1.  Normative References . . . . . . . . . . . . . . . . . . . 23
     7.2.  Informative References . . . . . . . . . . . . . . . . . . 23
   Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25
   Intellectual Property and Copyright Statements . . . . . . . . . . 26











Hilt, et al.            Expires December 25, 2006               [Page 2]


Internet-Draft          Session Policy Framework               June 2006


1.  Introduction

   The Session Initiation Protocol (SIP) [6] is a signaling protocol for
   creating, modifying and terminating multimedia sessions.  A central
   element in SIP is the proxy server.  Proxy servers are intermediaries
   that are responsible for request routing, rendezvous, authentication
   and authorization, mobility, and other signaling services.  However,
   proxies are divorced from the actual sessions - audio, video, and
   messaging - that SIP establishes.  Details of the sessions are
   carried in the payload of SIP messages, and are usually described
   with the Session Description Protocol (SDP) [7].  Indeed, SIP
   provides end-to-end encryption features using S/MIME, so that all
   information about the sessions can be hidden from eavesdroppers and
   proxies alike.

   However, experience has shown that there is a need for SIP
   intermediaries to impact aspects of a session.  For example, SIP may
   be used in a wireless network, which has limited resources for media
   traffic.  During periods of high activity, the wireless network
   provider wants to restrict the amount of bandwidth available to each
   individual user.  With session policies, an intermediary in the
   wireless network can inform the user agent about the bandwidth it can
   currently count on.  This information enables the user agent to make
   an informed decision about the number of streams, the media types,
   and the codecs it can successfully use in a session.  Similarly, a
   network provider may have a service level agreement with a user that
   defines the set of media types a user can use.  With session
   policies, the network can convey the current set of policies to user
   agents, enabling them to set up sessions without inadvertently
   violating any of the network policies.

   In another example, a SIP user agent is using a network which is
   connected to the public Internet through a firewall or a network
   border device.  The network provider would like to tell the user
   agent that it needs to send its media streams to a specific IP
   address and port on the firewall or border device to reach the public
   Internet.  Knowing this policy enables the user agent to set up
   sessions across the firewall or the network border.  In contrast to
   other methods for inserting a media intermediary, the use of session
   policies does not require the inspection or modification of SIP
   message bodies.

   Domains often enforce the session policies they have in place.  For
   example, a domain might have a policy that disallows the use of video
   and may enforce this policy by dropping all packets that contain a
   video encoding.  Unfortunately, enforcement mechanisms usually do not
   inform the user about the policies they are enforcing.  Instead, they
   silently keep the user from doing anything against them.  This may



Hilt, et al.            Expires December 25, 2006               [Page 3]


Internet-Draft          Session Policy Framework               June 2006


   lead to a malfunctioning of devices that is incomprehensible to the
   user.  With session policies, the user knows about the current
   network policies and can set up policy-compliant sessions or simply
   connect to a domain with less stringent policies.  Thus, session
   policies provide an important combination of consent coupled with
   enforcement.  That is, the user becomes aware of the policy and needs
   to act on it, but the provider still retains the right to enforce the
   policy.

   Two types of session policies exist: session-specific policies and
   session-independent policies.  Session-specific policies are policies
   that are created for one particular session, based on the session
   description of this session.  They enable a network intermediary to
   examine the session description a UA is proposing and to return a
   policy specifically for this session description.  For example, an
   intermediary could open pinholes in a firewall/NAT for each media
   stream in a session and return a policy that replaces the internal IP
   addresses and ports with external ones.  Since session-specific
   policies are tailored to a session, they only apply to the session
   they are created for.  Session-specific policies are created on a
   session-by-session basis at the time the session is established.

   Session-independent policies on the other hand are policies that are
   created independent of a session and generally apply to the SIP
   sessions set up by a user agent.  A session-independent policy can,
   for example, be used to inform user agents about an existing
   bandwidth limit or media type restrictions.  Since these policies are
   not based on a specific session description, they can be created
   independent of an attempt to set up a session and only need to be
   conveyed to the user agent once (e.g. at the time the device is
   powered on).

   This specification defines a framework for SIP session policies.  It
   specifies a model, the overall architecture, and the protocol
   components that are needed for session-independent and session-
   specific policies.


2.  Terminology

   In this document, the key words "MUST", "MUST NOT", "REQUIRED",
   "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
   RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as
   described in BCP 14, RFC 2119 [1] and indicate requirement levels for
   compliant implementations.






Hilt, et al.            Expires December 25, 2006               [Page 4]


Internet-Draft          Session Policy Framework               June 2006


3.  Session-Independent Policies

   Session-independent policies are policies that are created
   independent of a session and generally apply to the sessions a user
   agent is setting up.  They typically remain stable for a longer
   period of time and apply to the sessions set up while they are valid.
   However, session-independent policies may also change over time.  For
   example, a policy that defines a bandwidth limit for a user may
   change during the day, defining a lower limit during peak hours and
   allow more bandwidth off-peak.

3.1.  Architecture and Overview

                        +-------------+
                 /------|   policy    |
      +----+    /       |  server 1   |
      |    |---/        +-------------+
      | UA |                 ...
      |    |---\        +-------------+
      +----+    \       |   policy    |
                 \------|  server n   |
                        +-------------+


   Figure 1

   A SIP UA may receive session-independent policies from one or more
   policy servers.  In a typical configuration, a UA receives session-
   independent policies from a policy server in the access or local
   network domain (i.e. the domain from which the UA receives IP
   service) and possibly the home network domain (i.e. the domain the UA
   registers at).  The local network may, for example, have policies
   that support the access network infrastructure (e.g. in a wireless
   network where bandwidth is scarce, a provider may restrict the
   bandwidth available to an individual user).  The home network may
   have policies that are needed to support services or policies that
   reflect the service level agreement with the user.  Thus, in most
   cases, a UA will receive session-independent policies from one or at
   most two policy servers.

   Setting up session-independent policies involves the following steps:

   1.  A user agent requests session-independent policies from the
       policy servers in the local network and home domain.  A user
       agent typically requests these policies when it starts up or
       connects to a new network domain.





Hilt, et al.            Expires December 25, 2006               [Page 5]


Internet-Draft          Session Policy Framework               June 2006


   2.  The policy server selects the policies that apply to this user
       agent.  The policy server may have general policies that apply to
       all users or maintain separate policies for each individual user.
       The selected policies are returned to the user agent.
   3.  The policy server may update the policies, for example, when
       network conditions change.

3.2.  Policy Subscription

   A UA requests session-independent policies by subscribing to the
   policy server in a domain.  Subscriptions to session-independent
   policies are established using the "ua-profile" event package defined
   in the Framework for SIP User Agent Profile Delivery [4].

   The "ua-profile" event package [4] provides a mechanism to discover
   policy servers in the local network and the home domain.  The "local-
   network" profile-type enables a UA to discover a policy server in the
   local domain; the "user" profile type in the home domain.  A UA
   compliant to this specification SHOULD attempt to discover and
   subscribe to the policy servers in these two domains.

   A UA SHOULD (re-)subscribe to session-independent policies when the
   following events occur:

   o  The UA registers a new AoR or removes a AoR from the set of AoRs
      it has registered.  In these cases, the UA SHOULD establish
      subscriptions for each new AoR using the "user" and the "local-
      network" profile-types.  The UA SHOULD terminate all subscriptions
      for AoRs it has removed.
   o  The UA changes the domain it is connected to.  The UA SHOULD
      terminate all existing subscriptions for the "local-network"
      profile-type.  It SHOULD then create a new subscription for each
      AoR using the "local-network" profile-type.  This way, the UA
      stops receiving policies from the previous local domain and starts
      to receive the policies of the new local domain.  The UA does not
      need to change the subscriptions for "user" profiles.

   If a subscriber is unable to establish a subscription, it SHOULD NOT
   attempt to re-try this subscription, unless one of the above events
   occurs again.  This is to limit the number of SUBSCRIBE requests sent
   within domains that do not support session-independent policies.

   A UA compliant to this specification MUST support the User Agent
   Profile Data Set for Media Policy [3] and the Schema for SIP User
   Agent Profile Data Sets [8].  To indicate that the UA wants to
   receive session-independent policies, it includes the MIME type
   "application/session-policy+xml" in addition to the MIME type of the
   Schema for SIP User Agent Profile Data Sets in the Accept header of a



Hilt, et al.            Expires December 25, 2006               [Page 6]


Internet-Draft          Session Policy Framework               June 2006


   SUBSCRIBE request.

   A policy server MAY send a notification to the subscriber every time
   the session-independent policies covered by the subscription changes.
   The definition of what causes a policy to change is at the discretion
   of the administrator.  A change in the policy may be triggered, for
   example, by a change in the network status, by the change in the time
   of day or by an update of the service level agreement with the
   customer.  The session-independent policies contained in a
   notification MUST represent a complete session-independent policy.
   Deltas to previous policies or partial policies are not supported.


4.  Session-Specific Policies

   Session-specific policies are policies that are created specifically
   for one particular session of a UA.  Thus, session-specific policies
   will typically be different for different sessions.  The session-
   specific policies for a session may change during the course of the
   session.  For example, a user may run out of credit during a session,
   which will cause the network to disallow the transmission all media
   streams from this point on.

4.1.  Architecture

                           domain 1
                        +-----------+
                 /------|   proxy   |----...
      +----+    /       +-----------+
      |    |---/        +-----------+
      |    |            |  policy   |
      | UA |============|  server   |
      |    |            +-----------+
      |    |****        +-----------+
      +----+    *       |  policy   |
                 *******|enforcement|****...
                        +-----------+

      --- SIP Signaling
      === Policy Channel
      *** Media

   Figure 2

   The following entities are needed for session-specific policies (see
   Figure 2): a user agent (UA), a proxy, a policy server and possibly a
   policy enforcement entity.




Hilt, et al.            Expires December 25, 2006               [Page 7]


Internet-Draft          Session Policy Framework               June 2006


   The role of the proxy is to provide a rendezvous mechanism for UAs
   and policy servers.  It conveys the URI of the policy server in its
   domain to UAs and ensures that each UA knows where to retrieve
   policies from.  It does not deliver the actual policies to UAs.

   The policy server is a separate logical entity that may be physically
   co-located with the proxy.  The role of the policy server is to
   deliver session policies to UAs.  The policy server receives session
   information, uses this information to determine the policies that
   apply to the session and returns these policies to the UA.  The
   mechanism for generating policies (i.e. making policy decisions) is
   outside the scope of this specification.  A policy server may, for
   example, query an external entity to get the policies that apply to a
   session or it may directly incorporate a policy decision point and
   generate policies locally.

   A UA receives the URI of a policy server from a proxy.  It uses this
   URI to connect to the policy server.  It provides information about
   the current session to the policy server and receives session
   policies in response.  The UA may also receive policy updates from
   the policy server during the course of a session.

   A network may have a policy enforcement infrastructure in place.
   However, this specification does not make any assumptions about the
   enforcement of session policies and the mechanisms defined here are
   orthogonal a policy enforcement infrastructure.  Their goal is to
   provide a mechanism to convey session information to a policy server
   and to return the policies that apply to a session to the UA.

   In principle, each domain that is traversed by SIP signaling messages
   can define session-specific policies for a session.  Each of these
   domains needs to run a policy server and a proxy that is able to
   rendezvous a UA with the policy server (as shown in Figure 2).
   However, it is expected that session-specific policies will often
   only be provided by the local domain of the user agent.

4.2.  Overview

   The protocol defined in this specification clearly separates SIP
   signaling and the exchange of policies.  SIP signaling is only used
   to rendezvous the UA with the policy server.  From this point on, UA
   and policy server communicate directly with each other over a
   separate policy channel.  This is opposed to a piggyback model, where
   the exchange of policy information between endpoint and a policy
   server in the network is piggybacked onto the SIP signaling messages
   that are exchanged between endpoints.

   The main advantage of using a separate policy channel is that it



Hilt, et al.            Expires December 25, 2006               [Page 8]


Internet-Draft          Session Policy Framework               June 2006


   decouples the exchange of signaling messages between endpoints from
   the exchange of policies between endpoint and policy server.  This
   decoupling provides a number of desirable properties.  It enables the
   use of separate encryption mechanisms on the signaling path (to
   secure the communication between endpoints) and on the policy channel
   (to secure the communication between endpoint and policy server).
   Policies can be submitted directly from the policy server to the
   endpoint and never travel along the signaling path, possibly crossing
   many domains.  Endpoints set up a separate policy channel to each
   policy server and can specifically decide which information they want
   to disclose to which policy server.  Finally, policy servers do not
   need to rely on a SIP signaling message flowing by to send policies
   or policy updates to an endpoint.  A policy server can use the policy
   channel at any time to update session policies as needed.  A
   disadvantage of the separate channel model is that it requires
   additional messages for the exchange of policy information.

   Following this model, signaling for session-specific policies
   involves the following two fundamental tasks:

   1.  UA/policy server rendezvous: a UA setting up a session needs to
       be able to discover the policy servers that are relevant to this
       session.
   2.  Policy channel: once the UA has discovered the relevant policy
       servers for a session, it needs to connect to these servers,
       disclose session information and retrieve the policies that apply
       to this session.

   The setting up session-specific policies over the policy channel
   involves the following steps:

   1.  A user agent submits information about the session it is trying
       to establish to the policy server and asks whether a session
       using these parameters is permissible.
   2.  The policy server generates a policy decision for this session
       and returns the decision to the user agent.  Possible policy
       decisions are (1) to deny the session, (2) to propose changes to
       the session parameters with which the session would be
       acceptable, or (3) to accept the session as it was proposed.
   3.  The policy server can update the policy decision at a later time.
       A policy decision update can, for example, propose additional
       changes to the session (e.g. change the available bandwidth) or
       deny a previously accepted session (i.e. disallow the
       continuation of a session).

   In many cases, the mechanism for session-specific policies will be
   used to disclose session information and return session policies.
   However, some scenarios may only involve the disclosure of session



Hilt, et al.            Expires December 25, 2006               [Page 9]


Internet-Draft          Session Policy Framework               June 2006


   information to a network intermediary.  If an intermediary does not
   intend to return a policy, it can simply accept the session as it was
   proposed.  Similarly, some session-specific policies only apply to
   the offer (and therefore only require the disclosure of the offer)
   whereas others apply to offer and answer.  Both types of policies are
   supported by session-specific policy mechanism.

4.3.  Examples

   This section provides two examples to illustrate the overall
   operation of session-specific policies.  The call flows depict the
   rendezvous mechanism between UA and policy server and indicate the
   points at which the UA exchanges policy information with the policy
   server.

   The example is based on the following scenario: there are two domains
   (domain A and domain B), which both have session-specific policies
   for the UAs in their domain.  Both domains do not provide policies to
   the UAs outside of their domain.  The two domains have a proxy (P A
   and P B) and a policy server (PS A and PS B).  The policies in both
   domains involve the session description offer and answer.

4.3.1.  Offer in Request

   The first call flow depicts an INVITE transaction with the offer in
   the request.  It is assumed that this is the first INVITE request the
   UAC creates in this domain and that it therefore does not have
   previous knowledge about the policy server URIs in this domain.

   (1) UA A sends an INVITE to proxy P A. P A knows that policies apply
   to this session and (2) returns a 488 to UA A. P A includes the URI
   of PS A in the 488 response.  This step is needed since the UAC has
   no prior knowledge about the URI of PS A. (3) UA A uses the URI to
   contact PS A, discloses the session description offer to PS A and (4)
   receives policies for the offer. (5) UA A reformulates the INVITE
   request under consideration of the received policies and includes a
   Policy-Id header to indicate that it has already contacted PS A. P A
   does not reject the INVITE this time and removes the Policy-Id header
   when forwarding the INVITE.  P B adds a Policy-Contact header
   containing the URI of PS B. (6) UA B uses this URI to contact PS B
   and discloses the offer and the answer it is about to send. (7) UA B
   receives policies from PS B and applies them to the offer and answer
   respectively. (8) UA B returns the updated answer in the 200 OK. (9)
   UA A contacts PS A with the answer and (10) retrieves answer policies
   from PS A.






Hilt, et al.            Expires December 25, 2006              [Page 10]


Internet-Draft          Session Policy Framework               June 2006


    UA A              P A              P B             UA B
     |                 |                |                 |
     | INVITE offer    |                |                 |
     |---------------->|                |                 | (1)
     | 488             |                |                 |
     | + Policy-Contact|                |                 |
     |<----------------|                |                 | (2)
     | ACK             |                |                 |
     |---------------->|                |                 |
     |                 | PS A           |                 |
     |                    |             |                 |
     | PolicyChannel      |             |                 |
     | + InfoOffer        |             |                 |
     |------------------->|             |                 | (3)
     | PolicyChannel      |             |                 |
     | + PolicyOffer      |             |                 |
     |<-------------------|             |                 | (4)
     |                    |             |                 |
     |                 |                |                 |
     | INVITE offer'   | INVITE offer'  | INVITE offer    |
     | + Policy-Id     |                | + Policy-Contact|
     |---------------->|--------------->|---------------->| (5)
     |                 |                |                 |
     |                 |           PS B |                 |
     |                 |             |                    |
     |                 |             | PolicyChannel      |
     |                 |             | + InfoOffer        |
     |                 |             | + InfoAnswer       |
     |                 |             |<-------------------| (6)
     |                 |             | PolicyChannel      |
     |                 |             | + PolicyOffer      |
     |                 |             | + PolicyAnswer     |
     |                 |             |------------------->| (7)
     |                 |             |                    |
     |                 |                |                 |
     | OK answer       | OK answer      | OK answer       |
     |<----------------|<---------------|<----------------| (8)
     | ACK                                                |
     |--------------------------------------------------->|
     |                 |                |                 |
     |                    |             |                 |
     | PolicyChannel      |             |                 |
     | + InfoAnswer       |             |                 |
     |------------------->|             |                 | (9)
     | PolicyChannel      |             |                 |
     | + PolicyAnswer     |             |                 |
     |<-------------------|             |                 | (10)
     |                    |             |                 |



Hilt, et al.            Expires December 25, 2006              [Page 11]


Internet-Draft          Session Policy Framework               June 2006


4.3.2.  Offer in Response

   This call flow depicts an INVITE transaction with the offer in the
   response.

   Steps (1) - (8) are analogous to steps (1) - (8) in the previous
   flow.  An important difference is that in steps (9) and (10) UA A
   contacts PS A after receiving the offer in the 200 OK but before
   returning the answer in step (11).  This enables UA A to return the
   final answer, which includes all applicable policies, in the ACK.
   However, it requires that PS A immediately returns a policy to avoid
   a delay in the transmission of the ACK.  This is similar to Flow I in
   [9].

    UA A              P A              P B             UA B
     |                 |                |                 |
     | INVITE          |                |                 |
     |---------------->|                |                 | (1)
     | 488             |                |                 |
     | + Policy-Contact|                |                 |
     |<----------------|                |                 | (2)
     | ACK             |                |                 |
     |---------------->|                |                 |
     |                 | PS A           |                 |
     |                    |             |                 |
     | PolicyChannel      |             |                 |
     |------------------->|             |                 | (3)
     | PolicyChannel      |             |                 |
     |<-------------------|             |                 | (4)
     |                    |             |                 |
     |                 |                |                 |
     | INVITE          | INVITE         | INVITE          |
     | + Policy-Id     |                | + Policy-Contact|
     |---------------->|--------------->|---------------->| (5)
     |                 |                |                 |
     |                 |           PS B |                 |
     |                 |             |                    |
     |                 |             | PolicyChannel      |
     |                 |             | + InfoOffer        |
     |                 |             |<-------------------| (6)
     |                 |             | PolicyChannel      |
     |                 |             | + PolicyOffer      |
     |                 |             |------------------->| (7)
     |                 |             |                    |
     |                 |                |                 |
     | OK offer        | OK offer       | OK offer        |
     |<----------------|<---------------|<----------------| (8)
     |                 |                |                 |



Hilt, et al.            Expires December 25, 2006              [Page 12]


Internet-Draft          Session Policy Framework               June 2006


     |                    |             |                 |
     | PolicyChannel      |             |                 |
     | + InfoOffer        |             |                 |
     | + InfoAnswer       |             |                 |
     |------------------->|             |                 | (9)
     | PolicyChannel      |             |                 |
     | + PolicyOffer      |             |                 |
     | + PolicyAnswer     |             |                 |
     |<-------------------|             |                 | (10)
     |                    |             |                 |
     | ACK answer                                         |
     |--------------------------------------------------->| (11)
     |                 |                |                 |
     |                 |             |                    |
     |                 |             | PolicyChannel      |
     |                 |             | + InfoAnswer       |
     |                 |             |<-------------------| (12)
     |                 |             | PolicyChannel      |
     |                 |             | + PolicyAnswer     |
     |                 |             |------------------->| (13)
     |                 |             |                    |

4.4.  UA/Policy Server Rendezvous

   The first step in setting up session-specific policies is to
   rendezvous the UAs with the relevant policy servers.  This is
   achieved by providing the URIs of all policy servers relevant for a
   session to the UAs.

4.4.1.  UAC Behavior

   When a UA compliant to this specification generates an INVITE or
   UPDATE request, it MUST include a Supported header field with the
   option tag "policy" in the request.

   The UAC may receive a 488 in response to an INVITE or UPDATE request,
   which contains a Policy-Contact header field.  This is a new header
   defined in this specification that contains the URI of a policy
   server.  A 488 response with this header is generated by a proxy to
   convey the URI of the local policy server to the UAC.  The UAC SHOULD
   use this URI to contact the policy server using mechanism defined in
   Section 4.5.  The UAC SHOULD apply the policies received and resend
   the updated request.

   The UAC MUST insert a Policy-Id header into a request if it has
   contacted a policy server for this request.  The Policy-Id header
   MUST include the URIs of all policy servers the UAC has contacted for
   the request.  The Policy-Id header enables a proxy to determine



Hilt, et al.            Expires December 25, 2006              [Page 13]


Internet-Draft          Session Policy Framework               June 2006


   whether the URI of its policy server is already known to the UAC (and
   thus the request can be passed through) or whether the URI still
   needs to be conveyed to the UAC in a 488 response.

   In some cases, a request may traverse multiple domains with session-
   policies in place.  Each of these domains may return a 488 response
   containing a policy server URI.  Since the UAC contacts a policy
   server after receiving a 488 response from a domain and before re-
   sending the request, session policies are always applied to a request
   in the order in which the request traverses through the domains.  The
   UAC SHOULD NOT change this implicit order among policy servers.

   Some types of session policies only apply to the offer whereas other
   policies apply to the offer as well as the answer.  A UA SHOULD
   generally disclose the offer and the answer to the policy server.
   However, the policy server may indicate on the policy channel (after
   receiving the offer) that the disclosure of the answer is not needed
   for this session.  In this case, the UAC MAY skip the disclosure of
   the answer for this particular session.

   Depending on whether or not the UAC has included an offer in the
   INVITE request it has sent to the UAS, it will receive an answer or
   an offer in the response from the UAS.  If the response contains an
   answer (i.e. the request contained an offer), it MUST send the ACK
   before contacting the policy server with the answer.  The UAC MUST
   contact the same policy servers it has contacted for the offer.  If
   the response contains an offer (i.e. the INVITE request was empty),
   the UAC MUST first contact the policy server to retrieve session
   policies and apply these policies before sending the answer in the
   ACK.  The answer in the ACK will therefore already consider the
   relevant policies.

      This approach assumes that the policy server immediately responds
      to a policy request and does not require manual intervention to
      create a policy.  A delay in the response from the policy server
      would delay the transmission of the ACK and could trigger
      retransmissions of the INVITE response (also see the
      recommendations for Flow I in [9]).

4.4.2.  Caching of Policy Server URIs

   A UAC may frequently need to contact the policy server in the local
   domain.  To avoid the retransmission of the local policy server URI
   for each INVITE or UPDATE request, the UAC SHOULD cache the URI of
   the local policy server.  The UAC may receive this URI in a 488 from
   the local proxy after sending an INVITE or UPDATE message.
   Alternatively, the UA may also have received the local policy server
   URI through configuration or other means.  If the UAC has received a



Hilt, et al.            Expires December 25, 2006              [Page 14]


Internet-Draft          Session Policy Framework               June 2006


   local policy server URI through configuration and receives another
   one in a 488 response, it SHOULD overwrite the configured URI with
   the one received in the 488 response.  The UAC SHOULD contact the
   cached local policy server URI when creating a new INVITE or UPDATE
   request, before they are sent.

   Domains can prevent the UAC from caching the local policy server URI.
   This is useful, for example, if the policy server does not need to be
   involved in all sessions or the policy server URI changes from
   session to session.  A proxy can mark the URI of such a local policy
   server as "non-cacheable".  The UA SHOULD NOT cache a non-cacheable
   policy server URI.  It SHOULD remove the current URI from the cache
   when receiving a "non-cacheable" URI.

   The UAC SHOULD NOT cache policy server URIs it has received from
   proxies outside of the local domain.  These policy servers may not be
   relevant for subsequent sessions, which may go to a different
   destination, traversing different domains.

   The UAC SHOULD store the list of policy server URIs is has contacted
   for a session as part of the session state.  The UAC should keep this
   list until the session is terminated.  The UAC SHOULD contact the
   policy server URIs in this list for mid-dialog INVITE or UPDATE
   request.  Caching these URIs avoids the retransmission of policy
   server URIs for each mid-dialog requests.

4.4.3.  UAS Behavior

   An incoming INVITE or UPDATE request may contain a Policy-Contact
   header with a list of policy server URIs.  The UAS SHOULD contact all
   policy server URIs in a Policy-Contact header.  The UAS MUST contact
   the policy server URIs in the order in which they were contained in
   the Policy-Contact header, starting with the topmost value.

   If the UAS receives an ACK containing an answer, it SHOULD contact
   the policy servers again with the answer.  In this case, it MUST
   contact the same policy servers it has contacted for the offer.
   However, the policy server may have indicated in response to the
   offer that the disclosure of the answer is not needed for this
   session.  In this case, the UAS MAY skip the disclosure of the answer
   for this particular session.

4.4.4.  Proxy Behavior

   A proxy provides rendezvous functionality for UAs and the local
   policy server.  This is achieved by conveying the URI of the local
   policy server to the UAC or the UAS (or both) when processing an
   INVITE or UPDATE request.



Hilt, et al.            Expires December 25, 2006              [Page 15]


Internet-Draft          Session Policy Framework               June 2006


   If an INVITE or UPDATE request contains a Supported header field with
   the option tag "policy", the proxy MAY reject the request with a 488
   response to provide the local policy server URI to the UAC.  Before
   rejecting a request, the proxy MUST verify that the request does not
   have a Policy-Id header field, which already contains the local
   policy server URI.  If the request does not have such a header or the
   local policy server URI is not present in this header, then the proxy
   MAY reject the request with a 488.  The proxy MUST insert a Policy-
   Contact header in the 488 response that contains the URI of the local
   policy server.  The proxy MAY add the header field parameter "non-
   cacheable" to prevent the UAC from caching this policy server URI.

   If the local policy server URI is already present in the Policy-Id
   header of an INVITE or UPDATE request, the proxy MUST NOT reject the
   request as described above.  The proxy SHOULD remove this policy
   server URI from the Policy-Id header field before forwarding the
   request.

   The proxy MAY insert a Policy-Contact header field into an INVITE or
   UPDATE request in order to convey the policy server URI to the UAS.
   If the request already contains a Policy-Contact header field, the
   proxy MUST insert the URI ahead of all existing values at the
   beginning of the list.  A proxy MUST NOT change the order of existing
   Policy-Contact header values.

4.4.5.  Header Definition and Syntax

   The Policy-Id header field is inserted into an INVITE or UPDATE
   request by the UAC.  It identifies all policy servers the UAC has
   contacted for this request.  A Policy-Id header value is the URI of a
   policy server.

   The syntax of the Policy-Id header field is:

     Policy-Id        = "Policy-Id" HCOLON absoluteURI
                        *(COMMA absoluteURI)

   The Policy-Contact header field can be inserted into a 488 response
   to an INVITE or UPDATE request by a proxy.  It contains a policy
   server URI that needs to be contacted by the UAC.  A proxy MAY add
   the "non-cacheable" header field parameter to indicate that the UAC
   should not cache the policy server URI.

   The Policy-Contact header field can also be inserted into INVITE and
   UPDATE requests by a proxy.  It contains an ordered list of policy
   server URIs that need to be contacted by the UAS.  The UAS starts to
   process the header field at the topmost value of this list.  New
   header field values are inserted at the top.  The Policy-Contact



Hilt, et al.            Expires December 25, 2006              [Page 16]


Internet-Draft          Session Policy Framework               June 2006


   header field effectively forms a stack.  The "non-cacheable" header
   field parameter MUST NOT be used in a request.

   The syntax of the Policy-Contact header field is:

     Policy-Contact   = "Policy-Contact" HCOLON policyURI
                        *(COMMA policyURI)
     policyURI        = absoluteURI [ SEMI "non-cacheable" ]

   The BNF for absoluteURI is defined in [6].

   Table 1 is an extension of Tables 2 and 3 in [6].  The column 'UPD'
   is for the UPDATE method [5].

     Header field          where   proxy ACK BYE CAN INV OPT REG UPD
     _______________________________________________________________
     Policy-Id               R       rd   -   -   -   o   -   -   o
     Policy-Contact          R       a    -   -   -   o   -   -   o
     Policy-Contact         488      a    -   -   -   o   -   -   o
           Table 1: Policy-Id and Policy-Contact Header Fields

4.5.  Policy Subscription

   The rendezvous mechanism described in the previous section enables
   proxies to deliver the URIs of policy servers to the UAC and UAS.
   This section describes the mechanism for the policy channel, i.e. the
   protocol UAs use to contact the policy servers.  The main task of the
   policy channel is to enable a UA to submit information about the
   session it is trying to establish (i.e. the offer and the answer) to
   a policy server and to receive the resulting session-specific
   policies and possible updates to these policies in response.

   A UA compliant to this specification MUST implement the Event Package
   for Session-Specific Session Policies [2].  It contacts a policy
   server by subscribing to this event package.

   When subscribing to session-specific policies, the UA discloses
   information about the session it is trying to establish to the policy
   server as described in [2].  This information is used by the policy
   server to determine the session-specific policy for this session.
   The policy server returns the policies that apply to this session in
   NOTIFY messages.  It returns an initial set of policies when the
   subscription is established and may notify the UA when there are
   updates to these policies.  Complete call flow examples for session-
   specific policies that include policy channel messages can be found
   in Appendix B.

   A UA SHOULD use the policies it has received from the policy server



Hilt, et al.            Expires December 25, 2006              [Page 17]


Internet-Draft          Session Policy Framework               June 2006


   in the current session (i.e. the session the subscription is for).

   When a UA receives a policy update, it SHOULD apply the update to the
   current session.  If this update causes a change in the session
   description of a session, the UA may need to generate a re-INVITE or
   UPDATE message to re-negotiate the modified session description with
   its peer UA.  For example, if a policy update disallows the use of
   video and video is part of the current session description, then the
   UA will need to create an new session description offer without
   video.  After receiving this offer, the peer UA knows that video
   can't be used any more and responds with the corresponding answer.


5.  Security Considerations

   Session policies can significantly change the behavior of a user
   agent and can therefore be used by an attacker to compromise a user
   agent.  For example, session policies can be used to set up a user
   agent so that it is unable to successfully establish a session (e.g.
   by setting the available bandwidth to zero).  Such a policy can be
   submitted to the user agent during a session, which will cause the UA
   to terminate the session.

   A user agent transmits session information to a policy server for
   session-specific policies.  This session information may contain
   sensitive data the user may not want an eavesdropper or an
   unauthorized policy server to see.  In particular, the session
   information may contain the encryption keys for media streams.  Vice
   versa, session policies may also contain sensitive information about
   the network or service level agreements the service provider may not
   want to disclose to an eavesdropper or an unauthorized user agent.

   User agents should therefore authenticate a policy server before
   accepting a session policy.  Policy servers should authenticate user
   agents before sending a session policy.  This document does not
   define the protocols between user agents and policy servers and
   merely refers to other specifications.  The security considerations
   of these specifications apply and provide the mechanisms needed to
   secure these protocols.

   Administrators should use SIPS URIs as policy server URIs, if
   possible, so that subscriptions to session policies are transmitted
   over TLS.

   This document defines a new mechanism that enables proxies to
   rendezvous UAs and policy servers.  An attacker can use this
   mechanism to refer a UA to compromised policy server.  The UA can
   prevent such an attack from being effective by authenticating policy



Hilt, et al.            Expires December 25, 2006              [Page 18]


Internet-Draft          Session Policy Framework               June 2006


   servers.

   An attacker could intercept SIP messages between the UA and proxy and
   remove the policy headers needed for session-specific policies.  This
   would impede the rendezvous between UA and policy server and, since
   the UA would not contact the policy server, may prevent a UA from
   setting up a session.  This attack can be prevented by using a
   secured transport protocol such as TLS between proxies and UA.


6.  IANA Considerations

6.1.  Registration of the "Policy-Id" Header

      Name of Header: Policy-Id

      Short form: none

      Normative description: Section 4.4.5 of this document

6.2.  Registration of the "Policy-Contact" Header

      Name of Header: Policy-Contact

      Short form: none

      Normative description: Section 4.4.5 of this document

6.3.  Registration of the "policy" SIP Option-Tag

      Name of option: policy

      Description: Support for the Policy-Contact and Policy-Id headers.

      SIP headers defined: Policy-Contact, Policy-Id

      Normative description: This document


Appendix A.  Acknowledgements

   Many thanks to Allison Mankin for the discussions and the suggestions
   for this draft.  Many thanks to everyone who contributed by providing
   feedback on the mailing list and in IETF meetings.


Appendix B.  Session-Specific Policies - Call Flows




Hilt, et al.            Expires December 25, 2006              [Page 19]


Internet-Draft          Session Policy Framework               June 2006


   The following call flows illustrate the overall operation of session-
   specific policies.  The call flows contain all messages needed for
   UA/policy server rendezvous and the policy subscription.

   The following abbreviations are used:

      o: offer
      o': offer modified by a policy
      po: offer policy
      a: answer
      a': answer modified by a policy
      pa: answer policy
      ps uri: policy server URI (in Policy-Contact header)
      ps id: policy server id (in Policy-Id header)

B.1.  Offer in Invite



































Hilt, et al.            Expires December 25, 2006              [Page 20]


Internet-Draft          Session Policy Framework               June 2006


   UA A       P A      PS A      PS B       P B      UA B
     |         |         |         |         |         |
     |(1) INV <o>        |         |         |         |
     |-------->|         |         |         |         |
     |(2) 488 <ps uri>   |         |         |         |
     |<--------|         |         |         |         |
     |(3) ACK  |         |         |         |         |
     |-------->|         |         |         |         |
     |(4) SUBSCRIBE <o>  |         |         |         |
     |------------------>|         |         |         |
     |(5) 200 OK         |         |         |         |
     |<------------------|         |         |         |
     |(6) NOTIFY <po>    |         |         |         |
     |<------------------|         |         |         |
     |(7) 200 OK         |         |         |         |
     |------------------>|         |         |         |
     |(8) INV <ps id, o'>|         |         |         |
     |-------->|         |         |         |         |
     |         |(9) INV <o'>       |         |         |
     |         |---------------------------->|         |
     |         |         |         |         |(10) INV <o', ps uri>
     |         |         |         |         |-------->|
     |         |         |         |(11) SUBSCRIBE <o', a>
     |         |         |         |<------------------|
     |         |         |         |(12) 200 OK        |
     |         |         |         |------------------>|
     |         |         |         |(13) NOTIFY <po, pa>
     |         |         |         |------------------>|
     |         |         |         |(14) 200 OK        |
     |         |         |         |<------------------|
     |         |         |         |         |(15) 200 OK <a'>
     |         |         |         |         |<--------|
     |         |(16) 200 OK <a'>   |         |         |
     |         |<----------------------------|         |
     |(17) 200 OK <a'>   |         |         |         |
     |<--------|         |         |         |         |
     |(18) ACK |         |         |         |         |
     |------------------------------------------------>|
     |(19) SUBSCRIBE <o', a'>      |         |         |
     |------------------>|         |         |         |
     |(20) 200 OK        |         |         |         |
     |<------------------|         |         |         |
     |(21) NOTIFY <pa>   |         |         |         |
     |<------------------|         |         |         |
     |(22) 200 OK        |         |         |         |
     |------------------>|         |         |         |
     |         |         |         |         |         |
     |         |         |         |         |         |



Hilt, et al.            Expires December 25, 2006              [Page 21]


Internet-Draft          Session Policy Framework               June 2006


B.2.  Offer in Response

   UA A       P A      PS A      PS B       P B      UA B
     |         |         |         |         |         |
     |(1) INV  |         |         |         |         |
     |-------->|         |         |         |         |
     |(2) 488 <ps uri>   |         |         |         |
     |<--------|         |         |         |         |
     |(3) ACK  |         |         |         |         |
     |-------->|         |         |         |         |
     |(4) SUBSCRIBE      |         |         |         |
     |------------------>|         |         |         |
     |(5) 200 OK         |         |         |         |
     |<------------------|         |         |         |
     |(6) NOTIFY         |         |         |         |
     |<------------------|         |         |         |
     |(7) 200 OK         |         |         |         |
     |------------------>|         |         |         |
     |(8) INV <ps id>    |         |         |         |
     |-------->|         |         |         |         |
     |         |(9) INV  |         |         |         |
     |         |---------------------------->|         |
     |         |         |         |         |(10) INV <ps uri>
     |         |         |         |         |-------->|
     |         |         |         |(11) SUBSCRIBE <o> |
     |         |         |         |<------------------|
     |         |         |         |(12) 200 OK        |
     |         |         |         |------------------>|
     |         |         |         |(13) NOTIFY <po>   |
     |         |         |         |------------------>|
     |         |         |         |(14) 200 OK        |
     |         |         |         |<------------------|
     |         |         |         |         |(15) 200 OK <o'>
     |         |         |         |         |<--------|
     |         |(16) 200 OK <o'>   |         |         |
     |         |<----------------------------|         |
     |(17) 200 OK <o'>   |         |         |         |
     |<--------|         |         |         |         |
     |(18) SUBSCRIBE <o', a>       |         |         |
     |------------------>|         |         |         |
     |(19) 200 OK        |         |         |         |
     |<------------------|         |         |         |
     |(20) NOTIFY <po, pa>         |         |         |
     |<------------------|         |         |         |
     |(21) 200 OK        |         |         |         |
     |------------------>|         |         |         |
     |(22) ACK <a'>      |         |         |         |
     |------------------------------------------------>|



Hilt, et al.            Expires December 25, 2006              [Page 22]


Internet-Draft          Session Policy Framework               June 2006


     |         |         |         |(23) SUBSCRIBE <o', a'>
     |         |         |         |<------------------|
     |         |         |         |(24) 200 OK        |
     |         |         |         |------------------>|
     |         |         |         |(25) NOTIFY <po, pa>
     |         |         |         |------------------>|
     |         |         |         |(26) 200 OK        |
     |         |         |         |<------------------|
     |         |         |         |         |         |
     |         |         |         |         |         |


7.  References

7.1.  Normative References

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

   [2]  Hilt, V. and G. Camarillo, "A Session Initiation Protocol (SIP)
        Event Package for Session-Specific Session Policies.",
        draft-ietf-sipping-policy-package-01 (work in progress),
        April 2006.

   [3]  Hilt, V., Camarillo, G., and J. Rosenberg, "A User Agent Profile
        Data Set for Media Policy",
        draft-ietf-sipping-media-policy-dataset-01 (work in progress),
        March 2006.

   [4]  Petrie, D., "A Framework for Session Initiation Protocol User
        Agent Profile Delivery", draft-ietf-sipping-config-framework-08
        (work in progress), March 2006.

   [5]  Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE
        Method", RFC 3311, October 2002.

   [6]  Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A.,
        Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP:
        Session Initiation Protocol", RFC 3261, June 2002.

7.2.  Informative References

   [7]  Handley, M. and V. Jacobson, "SDP: Session Description
        Protocol", RFC 2327, April 1998.

   [8]  Petrie, D., Lawrence, S., Dolly, M., and V. Hilt, "A Schema and
        Guidelines for Defining Session Initiation Protocol User Agent
        Profile Data Sets", draft-petrie-sipping-profile-datasets-03



Hilt, et al.            Expires December 25, 2006              [Page 23]


Internet-Draft          Session Policy Framework               June 2006


        (work in progress), October 2005.

   [9]  Rosenberg, J., Peterson, J., Schulzrinne, H., and G. Camarillo,
        "Best Current Practices for Third Party Call Control (3pcc) in
        the Session Initiation Protocol (SIP)", BCP 85, RFC 3725,
        April 2004.













































Hilt, et al.            Expires December 25, 2006              [Page 24]


Internet-Draft          Session Policy Framework               June 2006


Authors' Addresses

   Volker Hilt
   Bell Labs/Lucent Technologies
   101 Crawfords Corner Rd
   Holmdel, NJ  07733
   USA

   Email: volkerh@bell-labs.com


   Gonzalo Camarillo
   Ericsson
   Hirsalantie 11
   Jorvas  02420
   Finland

   Email: Gonzalo.Camarillo@ericsson.com


   Jonathan Rosenberg
   Cisco Systems
   600 Lanidex Plaza
   Parsippany, NJ  07054
   USA

   Email: jdrosen@cisco.com
























Hilt, et al.            Expires December 25, 2006              [Page 25]


Internet-Draft          Session Policy Framework               June 2006


Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.


Disclaimer of Validity

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Copyright Statement

   Copyright (C) The Internet Society (2006).  This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Acknowledgment

   Funding for the RFC Editor function is currently provided by the
   Internet Society.




Hilt, et al.            Expires December 25, 2006              [Page 26]