<?xml version='1.0' ?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
<rfc ipr='full2026' docName='draft-willis-sip-scvrtdisco-01' >
    <?rfc toc='yes' ?>
    <?rfc tocompact='no' ?>
    <?rfc compact='yes' ?>
    <?rfc subcompact='yes' ?>
    <front> 
      <title abbrev='SIP Ext Header for Service Route Discovery'>
        SIP Extension Header for Service Route Discovery in Private Networks
      </title>
      <author initials='D.' surname='Willis' fullname='Dean Willis'>
        <organization abbrev='dynamicsoft Inc.'>
          dynamicsoft Inc.
        </organization>
        <address>
          <postal>
            <street>5100 Tennyson Parkway</street>
            <street>Suite 1200</street>
            <city>Plano</city>
            <region>TX</region>
            <code>75028</code>
            <country>US</country>
          </postal>
          <phone>+1 972 473 5455</phone>
          <email>dwillis@dynamicsoft.com</email>
          <uri>http://www.dynamicsoft.com/</uri>
        </address>
      </author>
      <author initials='B.' surname='Hoeneisen' fullname='Bernie Hoeneisen'>
           <organization abbrev='Nokia'>
             Nokia
           </organization>
           <address>
             <postal>
                <street>Helsinki, Hiomo 3/6</street>
                <street>P.O. Box 312</street>
                <city>00045 NOKIA Group</city>
                <country>Finland</country>
             </postal>
             <phone>+358-40-821 9 831</phone>
             <email>bernhard.honeisen@nokia.com, b.hoeneisen@ieee.org</email>
             <uri>http://www.nokia.com/</uri>
          </address>
      </author>
      <date month='April' year='2002' />
      <area>Transport</area>
      <workgroup>SIP -- Session Initiation Protocol Working Group</workgroup>
      <keyword>SIP</keyword>
      <keyword>Path</keyword>
      <keyword>REGISTER</keyword>
      <keyword>Contact</keyword>
      <keyword>3GPP</keyword>
      <keyword>service</keyword>
      <keyword>route</keyword>

      <abstract>
        <t>This document proposes a private SIP extension header used
        in conjunction with responses to REGISTER messages to provide
        a mechanism by which a registrar may inform a registering UA
        of a service route that the UA may use to request outbound
        services from the registrar's domain.</t>
      </abstract>
  </front>

  <middle>


    <section title='Background'>

      <t>3GPP established a requirement for discovering home proxies
      during SIP registration and published this requirement in
      [3GPPReq]. Unlike many other network environments, the 3GPP
      network dynamically assigns a home service proxy to each
      address-of-record. This assignment may occur in conjunction with
      a REGISTER operation, or out-of-band as needed to support call
      services when the address-of-record has no registrations. This
      home service proxy may provide both inbound (UA terminated) and
      outbound (UA originated) services.</t>.
 
      <t>The home proxy network routes inbound messages having a
      request-URI targeting the address-of-record associated with the
      UA to the assigned home service proxy by using some sort of
      look-up-mechanism outside the scope of this document. This
      mechanism deals with inbound (UA terminated) messages.</t>

      <t>Outbound (UA originated) messages raise another issue.
      Specifically, "How does the UA know which service proxy to use
      and how to get there?"</t>

      <t>Several mechanisms have been proposed in list discussions,
      including:</t>

      <list style='numbers'>

        <t>Configuration data in the UA. This raises questions of UA
        configuration management and updating, especially if proxy
        assignment is very dynamic as in load-balancing scenarios.</t>

        <t>Use of some other protocol, such as HTTP, to get
        configuration data from a configuration server in the home
        network. While functional, this solution requires additional
        protocol engines, firewall complexity, operations overhead,
        and a significant additional "over the air" traffic.</t>

        <t>Use of lookup tables in the home network, as is done for
        inbound messages. This has a relatively high overhead in terms
        of database operations.</t>

        <t>Returning a 302 response indicating the service proxy as a
        new contact, causing the upstream node processing the 302
        (ostensibly the UA) to retransmit the message toward the
        service proxy. While this shares the database operation of the
        previous alternative, it does explicitly allow for caching the
        302 response thereby potentially reducing the frequency and
        number of database operations.</t>

        <t>Performing an operation equivalent to record-routing a
        REGISTER message between the UA and the associated registrar,
        then storing that route in the UA and reusing it as a service
        route on future messages originating from the UA. While
        efficient, this constrains the service route for proxy
        operations to be congruent with the route taken by the
        REGISTER message.</t>

        <t> Returning service route information as the value of a
        header in the REGISTER response. While similar to the previous
        alternative, this approach grants the ability for the
        registrar to selectively apply knowledge about the topology of
        the home network in constructing the service route.</t>

      </list>
   
      <t>This document discusses this final alternative: using a
      header in the REGISTER response to indicate a service route that
      the UA may wish to use if requesting services from the proxy
      network associated with the registrar generating the
      response.</t>

      <figure anchor='scenario-1'>
        <preamble>Scenario</preamble>
        <artwork><![CDATA[


    UA1----P1-----|    |--R-------|
                  |    |          |  
                  P2---|         DBMS
                  |    |          |
    UA2-----------|    |--HSP-----|
          

        ]]></artwork>
      </figure>

      <t>In this scenario, we have a "home network" containing routing
      proxy P2, registrar R, home service proxy HSP, and database DBMS
      used by both R and HSP. P2 represents the "edge" of the home
      network from a SIP perspective, and might be called an "edge
      proxy". UA1 is an external UA behind proxy P1. UA1 discovers P1
      via DHCP. UA2 is another UA on the Internet, and does not use a
      default outbound proxy. We do not show DNS elements in this
      diagram, but will assume their reasonable availability in the
      discussion.

      The mission is for UA1 to discover HSP so that outbound messages
      from UA1 may be routed (at the discretion of UA1) through HSP,
      thereby receiving outbound services from HSP. </t>

    </section>

    <section title='Discussion of Mechanism'>

      <t>The proposed mechanism uses a private header
      "P-Service-Route" in the REGISTER response to indicate a service
      route that the UA may wish to use if requesting services from
      the proxy network associated with the registrar generating the
      response.</t>

      <t>Simply put, the registrar generates a service route for the
      registering UA and returns it in the response to each successful
      REGISTER request. This service route has the form of a Route
      header that the registering UA may use to send messages through
      the service proxy selected by the registrar. The UA would use
      this route by inserting it as a preloaded Route header in
      messages originated by the UA intended for routing through the
      service proxy.</t>

      <t>The mechanism by which the registrar constructs the header
      value is specific to the local implementation and outside the
      scope of this document.</t>

    </section>
 
    <section title='Applicability Statement'>

      <t>The P-Service-Route mechanism is applicable when:</t>

      <list style='numbers'>
 
        <t>The UA registers with a REGISTRAR in a given domain.</t>

        <t>The domain dynamically assigns a service proxy for the UA.</t>

        <t>The registrar(s) in the domain has/have sufficient
        knowledge of the network topology, policy, and situation such
        that a reasonable service route can be constructed.</t>

        <t>Other mechanisms for proposing a service route to the UA
        are not available or are inappropriate for use within the
        administrative domain.</t>

      </list>
    </section>

    <section title='Syntax'>

      <t>The syntax for the P-Service-Route header is:</t>

      <t>P-Service-Route = "P-Service-Route" HCOLON 1#( p-sr-value)</t>

      <t>p-sr-value = name-addr *( SEMI rr-param )</t>

      <t>rr-param = generic-param</t>

      <t>The allowable usage of headers is described in Table 2 of
      <xref target='SIPbis' />. The following additions to this table
      are needed for P-Service-Route.</t>

      <figure anchor='figure_t2'>
        <preamble>Addition of P-Service-Route to SIP Table 2:</preamble>
        <artwork><![CDATA[

      Header field          where   proxy ACK BYE CAN INV OPT REG PRA
      _______________________________________________________________
      P-Service-Route         R      amr   -   -   -   -   -   o   -
      P-Service-Route        2xx     amr   -   -   -   -   -   o   -


        ]]></artwork>
      </figure>

    </section>

    <section title='Usage'>


      <section title='Procedures at the UA'>
   
        <t>The UA performs a register as usual. The register response
        may contain a "P-Service-Route" header. If so, the UA MAY
        store the value of the P-Service-Route header in an
        association with the address-of-record for which the REGISTER
        message had registered a contact. If the UA supports multiple
        address of records, it may be able to store multiple service
        routes, one per address-of-record.</t>

        <t>The UA MAY choose to exercise a service route for future
        messages associated with a given address-of-record for which a
        service route is known. If so, it appends the given service
        route to any local required Route headers, and uses the result
        as a preloaded Route header in outgoing messages.</t>

      </section>

      <section title='Procedures at the Proxy'>
  
        <t>The P-Service-Route header is treated like any other
        unknown header by intermediate proxies. They simply forward it
        on towards the destination.</t>

      </section>

      <section title='Procedures at the Registrar'>

        <t>When a registrar receives a successful REGISTER message, it
        MAY choose to return a P-Service-Route header in the 200 OK
        response. The determinations of whether to include this header
        into the 200 OK response and what value to insert are a matter
        of local policy and outside the scope of this document. Having
        inserted a P-Service-Route header, the registrar returns the
        200 OK response to the UA in accordance with standard
        procedures.</t>

      </section>


      <section title="Examples of Usage">

        <t> We present example in the context of the scenario
        presented in the Background section earlier in this
        document. The network diagram is replicated below:</t>


        <figure anchor='scenario-1-repeat'>
          <preamble>Scenario</preamble>
          <artwork><![CDATA[

           
  UA1----P1-----|    |--R-------|
                |    |          |  
                P2---|         DBMS
                |    |          |
  UA2-----------|    |--HSP-----|
          

          ]]></artwork>
        </figure>
      </section>
  
      <section title='Example of Mechanism in REGISTER Transaction'>
 
        <t>This example shows the message sequence for UA1 registering
        to HOMEDOMAIN using registrar R. R returns a P-Service-Route
        indicating that UA1 may use home service proxy HSP to receive
        outbound services from HOMEDOMAIN.</t>

        <figure anchor='figure_example_register'>
          <preamble>Message sequence for REGISTER returning 
           P-Service-Route:
          </preamble>
          <artwork><![CDATA[

F1 Register UA1 -> P1

   REGISTER sip:HOMEDOMAIN SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@HOMEDOMAIN <UA1@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
    . . .


F2 Register P1 -> P2

   REGISTER sip:HOMEDOMAIN SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   To: UA@HOMEDOMAIN <UA@HOMEDOMAIN>
   From: UA@REGISTAR <UA@REGISTAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
    . . .


F3 Register P2 -> R

   REGISTER sip:HOMEDOMAIN SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   To: UA@HOMEDOMAIN <UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
    . . .


F4 R executes Register

   R Stores:
   For UA1@P2
   Contact = <sip:UA1@192.0.2.4>


F5 R calculates Service Route

   Statically configured to reference HSP as a Service Route
   P-Service-Route=<sip:HSP;lr>


F6 Register Response r -> P2

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   To: UA@HOMEDOMAIN <sip:UA@P2>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-Service-Route=<sip:HSP;lr>
    . . .


F7 Register Response P2 -> P1

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   To: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-Service-Route=<sip:HSP;lr>
    . . .


F8 Register Response P1 -> UA

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-Service-Route=<sip:HSP;lr>
    . . .


F9 UA stores service route for HOMEDOMAIN

          ]]></artwork>
        </figure>
      </section>

      <section title='Example of Mechanism in INVITE Transaction'>

        <t>This example shows the message sequence for an INVITE
        transaction originating from UA1 eventually arriving at UA2
        using outbound services from HOMEDOMAIN, where UA1 has
        previously registered with HOMEDOMAIN and been informed of a
        service route through HSP. The service being provided by
        HOMEDOMAIN is a "speed dial" service, where the user's private
        speed dial code "Joe" is expanded to "sip:Joe@UA2" by the
        action of HSP. </t>

        <figure anchor='figure_example_invite'>
          <preamble>Message sequence for INVITE using P-Service-Route:</preamble>
          <artwork><![CDATA[

F1 INVITE UA1 -> P1

   INVITE sip:joe  SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Route: <sip:HSP;lr>
    . . .
   (note: P1 is selected using the "outbound proxy" rule in UA1)


F2 INVITE P1 -> P2

   INVITE sip:joe  SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   To: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Route: <sip:HSP;lr>
    . . .
   (note: P2 is selected using a DNS lookup on the domain of HSP)


F3 INVITE P2 -> HSP

   INVITE sip:joe  SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   To: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Record-Route <sip:P2;lr>
   Route: <sip:HSP;lr>
    . . .
   (note: HSP is selected using a DNS lookup for HSP within HOMEDOMAIN)


F4 HSP executes service

   looks up name "sip:joe" in UA1's profile, returns "sip:joe@UA2"
   This will be request-URI of next-hop INVITE


F5 INVITE HSP->P2

   INVITE sip:joe@UA2
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   Via: SIP/2.0/USP HSP:5060;branch=HSP10120323
   To: Joe <sip:joe@UA2>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Record-Route <sip:P2;lr>
   Record-Route <sip:HSP;lr>
    . . .
   (note: P2 selected by outbound proxy rule on HSP)


INVITE propagates toward UA2 as usual.

          ]]></artwork>
        </figure>
      </section>
    </section>

    <section title='Security Considerations'>

      <t>It is possible for proxies between the UA and the registrar
      during the REGISTER transaction to modify the value of
      P-Service-Route returned by the registrar, or to insert a
      P-Service-Route even when one was not returned by the
      registrar. It is also possible for proxies on the INVITE path to
      execute many different attacks. It is therefore desirable to
      apply transitive mutual authentication using sips: or other
      available mechanisms in order to prevent such attacks.  </t>

    </section>

    <section title='IANA Considerations'>

      <t>This document defines the SIP extension header
      "P-Service-Route" which should be included in the registry of
      SIP headers defined in <xref target='SIPbis'>SIP</xref>.  As
      required by the SIP change process <xref
      target='sipchange'>draft-tsvarea-sipchange</xref> the SIP
      extension header name "Service-Route" should also be registered
      in association with this extension.</t>

    </section>

  </middle>

  <back>


      <references title='Normative References'>

        <reference anchor='SIPbis'>
          <front>
            <title>SIP: Session Initiation Protocol 
               draft-ietf-sip-rfc2543bis-09.txt</title>
            <author initials='J' surname='Rosenberg' fullname='J. Rosenberg'>
               <organization>dynamicsoft Inc.</organization>
            </author>
            <date month='March' year='2002' />
          </front>
        </reference>

        <?rfc include="reference.RFC.2026" ?>
        <?rfc include="reference.RFC.2119" ?>
        <?rfc include="reference.RFC.2223" ?>
        <?rfc include="reference.RFC.2543" ?>

      </references>

      <references title='Non-Normative References'>

        <reference anchor='3GPPReq'>
          <front>
            <title>3GPP Requirements On SIP, 
               draft-garcia-sipping-3GPPRequirements.txt</title>
            <author initials='MA' surname='Garcia-Martin' fullname='Miguel
             Angel Garcia-Martin'></author> <date month='March' year='2002' />
          </front>  
        </reference>


        <reference anchor='sipchange'>
          <front>
            <title>SIP Change Process
              draft-tsvarea-sipchange</title>
           <author initials='A' surname='Mankin' fullname='Allison Mankin'>
           </author> <date month='March' year='2002' />
         </front>  
        </reference>

      </references>

  </back>

</rfc>

