<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3575 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3575.xml">
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY RFC2865 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2865.xml">
<!ENTITY RFC2866 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2866.xml">
<!ENTITY RFC3162 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3162.xml">
<!ENTITY RFC6158 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6158.xml">
<!ENTITY I-D.draft-ietf-radext-radius-extensions SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-radext-radius-extensions-06.xml">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-halwasia-radext-capability-negotiation-01"
     ipr="trust200902">
  <front>
    <title abbrev="Capability Negotiation in RADIUS">Capability Negotiation in
    RADIUS</title>

    <author fullname="Alan DeKok" initials="A." surname="DeKok">
      <organization>FreeRADIUS</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <email>aland@deployingradius.com</email>
      </address>
    </author>

    <author fullname="Gaurav Halwasia" initials="G." surname="Halwasia">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>Cessna Business Park, Sarjapura Marathalli Outer Ring
          Road</street>

          <city>Bangalore</city>

          <region>KARNATAKA</region>

          <code>560 087</code>

          <country>India</country>
        </postal>

        <phone>+91 80 4429 2703</phone>

        <email>ghalwasi@cisco.com</email>
      </address>
    </author>

    <author fullname="Satyanarayana Danda" initials="S." surname="Danda">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>Cessna Business Park, Sarjapura Marathalli Outer Ring
          Road</street>

          <city>Bangalore</city>

          <region>KARNATAKA</region>

          <code>560 087</code>

          <country>India</country>
        </postal>

        <phone>+91 80 4429 2684</phone>

        <email>sdanda@cisco.com</email>
      </address>
    </author>

    <author fullname="Manoj Kumar" initials="M." surname="Kumar">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>Cessna Business Park, Sarjapura Marathalli Outer Ring
          Road</street>

          <city>Bangalore</city>

          <region>KARNATAKA</region>

          <code>560 087</code>

          <country>India</country>
        </postal>

        <phone>+91 80 4429 2635</phone>

        <email>magoyal@cisco.com</email>
      </address>
    </author>

    <date day="8" month="October" year="2012"/>

    <abstract>
      <t>This document describes procedure and mechanism to exchange and
      negotiate capabilities between RADIUS client and RADIUS server.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>

      <t>RADIUS-specific terminology is borrowed from <xref target="RFC2865"/>
      and <xref target="RFC2866"/>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>Remote Authentication Dial In User Service (RADIUS) <xref
      target="RFC2865"/> and <xref target="RFC2866"/> is widely used protocol
      for Authentication, Authorization and Accounting. There are quite a lot
      of extensions which are being done on RADIUS protocol and considering
      that RADIUS is being deployed quite extensively, it would be nice if
      RADIUS Client and Server can negotiate the capability to support those
      extensions. This specification recommends and envision each proposed
      capability to be as precise and narrowly defined as possible and having
      said that we envision fairly large number of capabilities rather than
      few broadly defined ones. For example <xref
      target="I-D.ietf-radext-radius-extensions"/> proposes extended
      attributes space along with few other extensions and it would be nice if
      RADIUS Client and Server can signal and negotiate support for 'extended
      attributes'. This document describes procedure and mechanism to exchange
      and negotiate capabilities between RADIUS client and RADIUS server.</t>

      <section title="Solution Description">
        <t>This specification proposes to define two new RADIUS packet types
        to negotiate capabilities between RADIUS client and RADIUS server as
        defined in section 2. It also proposes to define 3 new attributes to
        be carried inside new RADIUS packet types. New RADIUS packets to
        negotiate capability has been chosen as it has minimal impact on the
        RADIUS security model and existing implementations. Following sections
        describes the new RADIUS packet types and attributes and describes
        their usage in negotiating capabilities. As per this specification
        Capability-Request RADIUS packets MUST NOT be proxied.</t>
      </section>
    </section>

    <section title="RADIUS Packets">
      <t>This document defines following new RADIUS packet type to enable
      capability negotiation between RADIUS client and server.</t>

      <section title="Capability-Request RADIUS Packet">
        <t><figure>
            <artwork><![CDATA[   Capability-Request RADIUS Packets are sent to a RADIUS server to 
   convey the capabilities RADIUS client intends to add and withdraw.

   A summary of the Capability-Request packet format is shown below.  
   The fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |  Identifier   |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Request Authenticator                     |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Attributes ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-

   Code

      TBA1 - Capability-Request.

   Identifier

      The Identifier field MUST be changed whenever the content of the
      Attributes field changes, and whenever a valid reply has been
      received for a previous request.  For retransmissions, the
      Identifier MUST remain unchanged.

   Request Authenticator

      The Request Authenticator value MUST be changed each time a new
      Identifier is used. It is calculated the same way as calculated 
      for Access-Request RADIUS Packet as described in section 3 of 
      RFC2865.

   Attributes

      The Attribute field is variable in length, and contains the list
      of Attributes that are required.
]]></artwork>
          </figure></t>
      </section>

      <section title="Capability-Response RADIUS Packet">
        <t/>

        <figure>
          <artwork><![CDATA[   Capability-Withdraw RADIUS Packets are sent to a RADIUS client in 
   response to Capability-Request packet from RADIUS client.

   A summary of the Capability-Withdraw packet format is shown below.  
   The fields are transmitted from left to right.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |  Identifier   |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Response Authenticator                    |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Attributes ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-

   Code

      TBA2 - Capability-Response.

   Identifier

      The Identifier field is a copy of the Identifier field of the
      Capability-Request which caused this Capability-Response.

   Response Authenticator

      The Response Authenticator value is calculated from the 
      Capability-Request value. It is calculated the same way 
      as calculated for Access-Accept RADIUS Packet similar to 
      as described in section 3 of RFC2865.

   Attributes

      The Attribute field is variable in length, and contains the list
      of Attributes that are required.

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

    <section title="RADIUS Attributes">
      <t>This document defines following new RADIUS attributes to enable
      capability negotiation between RADIUS client and server.</t>

      <section title="Capability-Add Attribute">
        <t><figure>
            <artwork><![CDATA[
   This attribute indicates the capability which the client wants to add. 

      The format of the Capability-Add Attribute is:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |     Length    |              Value            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Value (cont.)        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type

      TBA3 - Capability-Add

   Length

      6

   Value

      Enumerated Data Type in 4-Octet unsigned integer defined in
      [RFC6158]. This field contains the capability-id as specified
      in section 4 of this document.

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

      <section title="Capability-Withdraw Attribute">
        <t><figure>
            <artwork><![CDATA[   This attribute indicates the capability which the client wants to
   withdraw. 

      The format of the Capability-Withdraw Attribute is:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |     Length    |              Value            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Value (cont.)        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type

      TBA4 - Capability-Withdraw

   Length

      6

   Value

      Enumerated Data Type in 4-Octet unsigned integer defined in
      [RFC6158]. This field contains the capability-id as specified
      in section 4 of this document.]]></artwork>
          </figure></t>
      </section>

      <section title="Capability-Ack Attribute">
        <t><figure>
            <artwork><![CDATA[   This attribute indicates the capability which the server wants to
   Acknowledge. 

      The format of the Capability-Ack Attribute is:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |     Length    |              Value            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Value (cont.)        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type

      TBA5 - Capability-Ack

   Length

      6

   Value

      Enumerated Data Type in 4-Octet unsigned integer defined in
      [RFC6158]. This field contains the capability-id as specified
      in section 4 of this document.]]></artwork>
          </figure></t>
      </section>
    </section>

    <section title="RADIUS Capability-Id">
      <t>Value field of Capability-Add and Capability-Withdraw attributes
      defined above contains the Capability-Id of the capability RADIUS client
      wants to negotiate with RADIUS server. This document does not define any
      new capability and it's associated Capability-Id. Any specification
      which wants to use this mechanism of capability negotiation MUST define
      a new capability. Each new capability MUST be registered with IANA to
      get a capability-id from capability-id registry.</t>
    </section>

    <section title="RADIUS Client Behavior ">
      <t>RADIUS Client willing to negotiate capabilities SHOULD send
      Capability-Request RADIUS Packet (defined in section 2) towards the
      RADIUS Server. RADIUS Client MUST include Capability-Add Attribute in
      Capability-Request RADIUS Packet for the capability client wants to
      add/negotiate. Client can also include Capability-Withdraw Attribute in
      the RADIUS packet in case it wants to withdraw the capability it has
      negotiated earlier. Client MUST NOT add the Capability-Withdraw
      Attribute in the Capability-Request RADIUS Packet in case it has not
      negotiated the corresponding attribute earlier. Client can include
      multiple Capability-Add and/or Capability-Withdraw Attributes in the
      same Capability-Request RADIUS Packet. RADIUS client MUST add atleast
      one Capability-Add and/or Capability-Withdraw Attribute in
      Capability-Request RADIUS Packet. Client MUST NOT include the
      Capability-Add and Capability-Withdraw Attribute for the same capability
      in the same Capability-Request RADIUS Packet.</t>

      <t>Apart from including Capability-Add and/or Capability-Withdraw
      Attributes in the Capability-Request RADIUS Packet, Client can include
      NAS-Identifier <xref target="RFC2865"/> or one of the
      NAS-IP-Address<xref target="RFC2865"/>/NAS-IPv6-Address <xref
      target="RFC3162"/> for the porpose of RADIUS server to identify
      client.</t>
    </section>

    <section title="RADIUS Server Behavior ">
      <t>RADIUS Server implementing this specification MUST respond back with
      Capability-Response RADIUS Packet after receiving a valid
      Capability-Request RADIUS Packet from the RADIUS Client. As specified in
      section 5, Client will advertise it's capabilities by including
      Capability-Add and/or Capability-Withdraw Attributes in the same
      Capability-Request RADIUS Packet. RADIUS Server will find out the common
      set of agreed upon capabilities based upon the intersection in between
      capabilities received from client and it's own capabilities. RADIUS
      Server MUST include a Capability-Ack Attribute for each of the agreed
      upon capabilities in the Capability-Response RADIUS Packet. RADIUS
      Server MUST NOT include Capability-Ack attributes for all those
      capabilities which is does not want to support/share with RADIUS Client.
      If the RADIUS Server does not support any of the capabilities specified
      in Capability-Request RADIUS Packet, it SHOULD send back a empty
      Capability-Response RADIUS Packet without including any Capability-Ack
      attribute.</t>

      <t>RADIUS Server implementation which does not support capability
      negotiation specified in this specification MUST silently discard
      Capability-Request RADIUS Packet received from RADIUS Client.</t>
    </section>

    <section title="Example">
      <t>Following example figure shows the sequence of message exchanges
      which happens between RADIUS Client and RADIUS Server to negotiate a
      capabilities.<figure>
          <artwork><![CDATA[
     +-+-+-+-+-+                                               +-+-+-+-+-+
     |  CLIENT |                                               |  SERVER |
     +-+-+-+-+-+                                               +-+-+-+-+-+
         |                                                         |
         | Capability-Request(Capability-Add(X),Capability-Add(Y), |
         |                    NAS-IP-Address)                      |
         |-------------------------------------------------------->|
         |                                                         |
         |  Capability-Response(Capability-Ack(Y))                 |
         |<--------------------------------------------------------|
    
         Figure 1: Capability Negotiation between Client and Server

     Capability X = 'Understands 64-Bit Integers'

     Capability Y = 'Supports Larger than 4K RADIUS packets']]></artwork>
        </figure></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>The authors request that Packet Type, Attribute Types and Attribute
      Values defined in this document be registered by by the Internet
      Assigned Numbers Authority (IANA) from the RADIUS namespaces as
      described in the "IANA Considerations" section of RFC 3575 <xref
      target="RFC3575"/>, in accordance with BCP 26 <xref target="RFC5226"/>.
      For RADIUS packets, attributes and registries created by this document
      IANA is requested to place them at
      http://www.iana.org/assignments/radius-types.</t>

      <t>This document defines the following RADIUS messages:</t>

      <figure>
        <artwork><![CDATA[-  Capability-Request

-  Capability-Response]]></artwork>
      </figure>

      <t>This document defines the following attributes:</t>

      <figure>
        <artwork><![CDATA[-  Capability-Add

-  Capability-Withdraw

-  Capability-Ack]]></artwork>
      </figure>

      <t>Additionally, IANA is requested to create the following new
      registries listed in the subsections below.</t>

      <section title="New Registry: Capability-Identifier">
        <t>This document also defines an Capabality-Identifier registry (used
        in the value field of Capability-Add, Capability-Withdraw and
        Capability-Ack Attributes). IANA is requested to just allocate space
        for this registry and this document does not request IANA to allocate
        any value from this registry.</t>

        <t>Requests to IANA for a new value for a Capability Identifier will
        be approved by Expert Review. A designated expert will be appointed by
        the IESG.</t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This document defines new RADIUS message types and new Attribute
      types, but otherwise makes no changes to the security of the RADIUS
      protocol.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t/>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;

      &RFC3575;

      &RFC5226;

      &RFC2865;

      &RFC3162;

      &RFC6158;

      &I-D.draft-ietf-radext-radius-extensions;
    </references>

    <references title="Informative References">
      &RFC2866;
    </references>
  </back>
</rfc>
