<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes" ?>
<?rfc compact="yes" ?>
<?rfc sortrefs="no" ?>
<rfc ipr="full2026" docName="draft-jennings-sipping-instance-id-00.txt">
<front>
    <title abbrev="SIP UA Instance ID">
	Instance Identifiers for SIP User Agents
    </title>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco Systems, Inc.</organization>
      <address>
	<postal>
	  <street>170 West Tasman Dr.</street>
	  <street>MS: SJC-21/2</street>
          <city>San Jose</city> 
          <region>CA</region> <code>95134</code>
	  <country>USA</country>
 	</postal>
	<phone>+1 408 902 3341</phone>
	<email>fluffy@cisco.com</email>
      </address>
    </author>
    <date month="February" day="7" year="2004" />
    <area>Transport</area>
    <workgroup>SIPPING WG</workgroup>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>SIP Device Instance Identifier</keyword>
    <abstract>
      <t>
There are places in building <xref target="RFC3261">SIP</xref> based
communications systems where it is useful to have a stable identifier for
particular user agents that are used for user communications. This draft defines
a convention for names that can be used to satisfy these needs. </t>
    </abstract>
  </front>
  <middle>
    <section title="Conventions and Definitions">
      <t>
  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
  "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
  interpreted as described in <xref target="RFC2119">RFC-2119</xref>. </t>
</section>

<section title="Introduction and Use Cases">
<t>
There are a few cases in which it is convenient to be able to identify instances of
a user agent. Some examples are described. They all require the name to be
stable across reboots of the device.  </t>
<t> <list>
<t>
In the config framework<xref target="I-D.ietf-sipping-config-framework"/>, a
user agent sends a subscribe to fetch its configuration.  It needs to get the
same configuration each time.  </t>
<t>
A particular user, Alice, has several user agents that all register as Alice. A
registrar wishes to report which user agent are currently registered to a network
management system. For this reporting to make sense, each of Alice's user agents
must have a stable name.  </t>
<t>
A system that is using the dialog package to monitor a particular user agent
would like to be able to assign an alias like "My Office Phone" for display
purposes to that particular user agent.  </t>
<t>
When several presence user agents are providing presence data, it must be
possible to correlate a particular set of data with the particular device that
provided it. </t>
</list> </t>
<t>
In all these cases, the user agent could be a software program running on a
computer with more than one user. </t>

</section>
<section title="Requirements">
<t>
The identifier needs to be unique.  </t>
<t>
Identifiers are needed for user agents that are in dedicated pieces of hardware
such as IP phones.</t>
<t>
Identifiers are needed for software user agents running on multi-user
computers. </t>
<t>
In some of the cases with IP phones, it is desirable for this same identifier to
be recorded as a bar code on the outside of the box that the IP phone comes
in.  </t>

</section>
<section title="Solution">
<t>
User agents that follow the convention of this document MUST put a unique
identifier in a new tag, called "instance", of the Contact header when sending a
SIP request. They MAY omit this for a particular sequence of SIP messages if the
user has requested it be removed for privacy reasons. </t>
<t>
The unique identifier has no real semantic information other than uniqueness. In
cases in which the user agent runs on a single computer and this is the only
user agent on that computer, the MAC address of the primary network card is the
preferred identifier.  In cases in which it is impossible to use the MAC
address, then when the user agent is first run, it should generate a random 64
bit number and use this as the identifier. It MUST store this number in some non
volatile storage that is stable over reboots and power outages. The user agent
SHOULD use the same instance identifier tag even if it is registering different
AOR or contacts. </t>
<t>
If the identifier is a MAC address, it MUST be formatted as the letters "MAC-"
followed by a 12 digit hexadecimal representation of the MAC address. The
address can not include ":", whitespace, or other formatting. If the identifier
is a random number, it MUST be formatted as the letters "RANID-" followed by a
16 digit hexadecimal representation of the number. Note that the identifiers are case
sensitive and all alpha characters are upper case.  </t>
<t>
The MAC and RANDID identify the namespace for the unique identifier. In the
future this unique identifer namespace may be extended with other namespaces
that use unique identifiers from things like USB, Bluetooth, or Firewire.  </t>
<t>
These same identifiers may be used in the user portion of request URIs when that is
appropriate. A SUBSCRIBE for configuration information is a good example. </t>
</section>
<section title="Discussion">
<t>
The contact header in a SIP request identifies an address that can be used to
reach the device that is sending the request. This address may change each time
the device running the user agent gets a new IP address, but it is very
reasonable for the display name to give a unique identifier for what this
instance of the user agent wishes to be known by. Right now SIP does not give
any recommendation on what to place in the field. This document suggests a
naming convention for this.  </t>
<t>
MAC addresses are usually put on the outside of the box for IP phones in a
form that humans can read and also by a barcode scanner. </t>
</section>
<section title="BNF">
<t>
The following ABNF follows the rules in 
<xref target="RFC2234">RFC-2234</xref> and updates the BNF in RFC 3261.</t>

<figure><artwork>
   contact-params = c-p-q / c-p-expires / c-p-instance 
                    / contact-extentions
   c-p-intance = "instance" EQUAL uniq-ident
   UHEX  =  DIGIT / %x41-46 ;uppercase A-F
   MAC  =  %x4d.41.43 ; MAC in caps
   RANDID  = %x52.41.4e.44.49.44 ; RANDID in caps
   uniq-ident = ( mac-ident / rand-ident )
   mac-ident = MAC "-" 12UHEX
   rand-ident = RANDID "-" 16UHEX
</artwork></figure>

</section>
<section title="Example">
<t>
The following are some valid Contact headers: </t>

<figure><artwork>
Contact: &lt;sip:alice@host22.example.com&gt;;instance=MAC-123456789ABC 
Contact: &lt;sip:alice@host22.example.com&gt;;instance=
         RANDID-0123456789ABCDEF
</artwork></figure>

</section>
<section title="Security Consideration">
<t>
The unique identifer reveals further privacy related information to other people
that see the SIP signalling. Currently user agents put an IP address or DNS
name in the contact header, so the amount of extra information this reveals is
very minimal. The MAC address may reveal the manufacturer of the user
agent.  </t>

</section>
<section title="Open Issues">
<t>
Would this be better in an "Instance-ID" header? </t>
<t>
Would this be better in the User-Agent header? Some systems are doing
already doing this. </t>
<t>
Is 64 bits the right size for the random identifier? </t>
<t>
Is requiring upper case appropriate? </t>
</section>
<section title="Acknowledgments">
<t>
Many thank for the useful comments and improvements from Louis Pratt, Steve
Levy, Rohan Mahy, and Randy Baird as well as the list discussion from Jonathan
Rosenberg. </t>
</section>
</middle>
<back>

 <references title="Normative References">

<reference anchor='RFC2234'>

<front>
<title abbrev='ABNF for Syntax Specifications'>Augmented BNF for Syntax
Specifications: ABNF</title>
<author initials='D.H.' surname='Crocker' fullname='David H. Crocker'>
<organization>Internet Mail Consortium</organization>
<address>
<postal>
<street>675 Spruce Dr.</street>
<city>Sunnyvale</city>
<region>CA</region>
<code>94086</code>
<country>US</country></postal>
<phone>+1 408 246 8253</phone>
<facsimile>+1 408 249 6205</facsimile>
<email>dcrocker@imc.org</email></address></author>
<author initials='P.' surname='Overell' fullname='Paul Overell'>
<organization>Demon Internet Ltd</organization>
<address>
<postal>
<street>Dorking Business Park</street>
<street>Dorking</street>
<city>Surrey</city>
<region>England</region>
<code>RH4 1HN</code>
<country>UK</country></postal>
<email>paulo@turnpike.com</email></address></author>
<date month='November' year='1997' /></front>

<seriesInfo name='RFC' value='2234' />
</reference>


<reference anchor='RFC3261'>

<front>
<title>SIP: Session Initiation Protocol</title>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'>
<organization /></author>
<author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'>
<organization /></author>
<author initials='G.' surname='Camarillo' fullname='G. Camarillo'>
<organization /></author>
<author initials='A.' surname='Johnston' fullname='A. Johnston'>
<organization /></author>
<author initials='J.' surname='Peterson' fullname='J. Peterson'>
<organization /></author>
<author initials='R.' surname='Sparks' fullname='R. Sparks'>
<organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'>
<organization /></author>
<author initials='E.' surname='Schooler' fullname='E. Schooler'>
<organization /></author>
<date month='June' year='2002' /></front>

<seriesInfo name='RFC' value='3261' />
</reference>


<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement
Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date month='March' year='1997' />
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      The key words &quot;MUST&quot;, &quot;MUST NOT&quot;,
      &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
      &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;,
      &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be
      interpreted as described in RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' /> <seriesInfo name='RFC' value='2119' />
<format type='HTML' octets='14486'
target='http://xml.resource.org/public/rfc/html/rfc2119.html' /> <format
type='XML' octets='5661'
target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>

    </references>
  <references title='Informative References'>

<reference anchor='I-D.ietf-sipping-config-framework'>
<front>
<title>A Framework for SIP User Agent Configuration</title>

<author initials='D' surname='Petrie' fullname='Dan Petrie'>
    <organization />
</author>

<date month='March' day='3' year='2003' />
</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-sipping-config-framework-00'
/> <format type='TXT'
target='http://www.ietf.org/internet-drafts/draft-ietf-sipping-config-framework-00.txt'
/>
</reference>

	</references>
  </back>
</rfc>
