One document matched: draft-ietf-dime-app-design-guide-08.xml


<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
 <!ENTITY rfc2629 PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml'>
 <!ENTITY rfc4006 PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4006.xml'>
 <!ENTITY rfc3588 PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3588.xml'>
 <!ENTITY I-D.asveren-dime-dupcons PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.asveren-dime-dupcons.xml'>
 <!ENTITY I-D.ietf-dime-mip6-integrated PUBLIC ''
          'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dime-mip6-integrated.xml'>
 <!ENTITY I-D.ietf-dime-mip6-split PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dime-mip6-split.xml'>
 <!ENTITY I-D.ietf-dime-diameter-qos PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dime-diameter-qos.xml'>
 <!ENTITY I-D.ietf-dime-qos-attributes PUBLIC ''
	  'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dime-qos-attributes.xml'>
 <!ENTITY I-D.ietf-dime-rfc3588bis PUBLIC ''
 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dime-rfc3588bis.xml'>
]>

   <?rfc toc="yes" ?>
   <?rfc symrefs="no" ?>
   <?rfc sortrefs="yes"?>
   <?rfc iprnotified="no" ?>
   <?rfc strict="yes" ?>
   <?rfc compact="yes" ?>
   <?rfc subcompact="yes" ?>

<rfc category="info" ipr="full3978" docName="draft-ietf-dime-app-design-guide-08.txt">
  <front>
    <title>Diameter Applications Design Guidelines</title>


    <!-- ************** VICTOR FAJARDO *************** -->
    <author role="editor" initials="V." surname="Fajardo" fullname="Victor Fajardo">
      <organization>Toshiba America Research Inc.</organization>
      <address>
        <postal>
           <street>One Telcordia Drive, #1S222</street>
           <city>Piscataway</city>
           <region>NJ</region>
           <code>08854</code>
           <country>USA</country>
        </postal>
        <email>vfajardo@tari.toshiba.com</email>
      </address>
    </author>

    <!-- ************** TOLGA ASVEREN *************** -->
    <author initials="T." surname="Asveren" fullname="Tolga Asveren">
      <organization>Sonus Network</organization>
      <address>
       <postal>
         <street>4400 Route 9 South</street>
         <city>Freehold</city>
         <region>NJ</region>
         <code>07728</code>
         <country>USA</country>
       </postal>
       <email>tasveren@sonusnet.com</email>
      </address>
    </author>

    <!-- ************** HANNES TSCHOFENIG *************** -->
    <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
      <organization>Nokia Siemens Networks</organization>
      <address>
        <postal>
          <street>Linnoitustie 6</street>
          <city>Espoo</city>
          <code>02600</code>
          <country>Finland</country>
        </postal>
        <phone>+358 (50) 4871445</phone>
        <email>Hannes.Tschofenig@gmx.net</email>               
        <uri>http://www.tschofenig.priv.at</uri>
      </address>
    </author>

    <!-- ************** GLENN MCGREGOR *************** -->
    <author initials="G." surname="McGregor" fullname="Glenn McGregor">
      <organization>Alcatel-Lucent</organization>
      <address>
        <postal>
         <street>3461 Robin Ln Ste 1</street>
         <city>Cameron Park</city>
         <region>CA</region>
         <code>95682</code>
         <country>USA</country>
        </postal>
        <email>glenn@aaa.lucent.com</email>
      </address>
    </author>

    <!-- ************** JOHN LOUGHNEY *************** -->
    <author initials="J." surname="Loughney" fullname="John Loughney">
      <organization>Nokia Research Center</organization>
      <address>
        <postal>
          <street>955 Page Mill Road</street>
          <city>Palo Alto</city>
          <region>CA</region>
          <code>94304</code>
          <country>US</country>
        </postal>
        <phone>1-650-283-8068</phone>
        <email>john.loughney@nokia.com</email>
      </address>
    </author>

    <date year="2008"/>
    <area>Operations and Management Area</area>
    <workgroup>Diameter Maintanence and Extensions (DIME)</workgroup>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t> The Diameter Base protocol provides updated rules on how to extend Diameter by modifying
        and/or deriving from existing applications or creating entirely new applications. This is a
        companion document to the Diameter Base protocol that further explains and clarifies these
        rules. It is meant as a guidelines document and therefore it does not add, remove or change
        existing rules. </t>
    </abstract>

  </front>

  <middle>

    <!-- ***** Introduction ******* -->
    <section anchor="intro" title="Introduction">
      <t> The Diameter Base protocol document defines rules on how one would extend Diameter (see
        Section 1.2 of <xref target="I-D.ietf-dime-rfc3588bis"/>). In the context of this document,
        extending Diameter means one of the following:<vspace blankLines="1"/>
        <list style="numbers">
          <t>A new functionality is being added to an existing Diameter application without defining
            a new application.<vspace blankLines="1"/></t>
          <t>A new Diameter application is being defined by extending an existing application. <vspace
              blankLines="1"/></t>
          <t>A completely new application is being defined that has nothing in common with existing
            applications. <vspace blankLines="1"/></t>
          <t>A new generic functionality is being defined that can be reused across different
              applications.<vspace blankLines="1"/></t>
        </list> All of these choices are design decisions that can done by any combination of
        reusing existing or defining new commands, AVPs or AVP values. Protocol designers do,
        however, not have total freedom when making their design. A number of rules defined in <xref
          target="I-D.ietf-dime-rfc3588bis"/> place constraints on when an extension demands a new
        Diameter Application to be defined or a new Command Code to be registered. The objective of
        this document is the following:<vspace blankLines="1"/>
        <list style="symbols">
          <t>Clarify updated Diameter extensibility rules in the Diameter Base Protocol. <vspace
              blankLines="1"/></t>
          <t>Clarify usage of certain Diameter functionalitiessi which are not explicitly described in
            the Diameter Base specification.<vspace blankLines="1"/></t>
          <t>Discuss design choices and provide guidelines when defining applications. <vspace
              blankLines="1"/></t>
          <t>Present tradeoffs of design choices.<vspace blankLines="1"/></t>
        </list></t>
    </section>

    <section title="Terminology">
      <t> This document reuses the terminology used in <xref target="I-D.ietf-dime-rfc3588bis"/>.
      </t>
    </section>

    <section anchor="model" title="Overview">
      <t> As it is currently interpreted and practiced, the Diameter Base protocol is a two-layer
        protocol. The lower layer is mainly responsible for managing connections between neighboring
        peers and for message routing. The upper layer is where the Diameter applications reside.
        This model is in line with a Diameter node having an application layer and a peer-to-peer
        delivery layer. The Diameter Base protocol document completely defines the architecture and
        behavior of the message delivery layer and then provides the framework for designing
        Diameter applications on the application layer. This framework includes definitions of
        application sessions and accounting support (see Section 8 and 9 of <xref
          target="I-D.ietf-dime-rfc3588bis"/>). The remainder of this document also treats a
        Diameter node as a single instance of a Diameter message delivery layer and one or more
        Diameter applications using it. </t>

      <t>Extending Diameter can mean the reuse of commands, AVPs and AVP values in any combination
        for the purpose of inheriting the features of an existing Diameter application. This section
        discusses the rules on how such reuse can be done.</t>
      <t>When reusing existing applications, the requirements of the new applications are typically
        not completely unique and hence a lot can be re-used from existing specifications.
        Therefore, there is a greater likelihood of ambiguity on how much of the existing
        application can be reused and what would be the implications for both the new and existing
        application. To broadly categorize, the rules for reusing existing applications can fall
        into two categories, as listed below. </t>
      <t>
        <list style="hanging">
          <t hangText="Minor Extension:"> This, for example, is the case when optional AVPs are
            being defined. In general, this includes everything that is not covered by the next
            category. The standardization effort will be fairly small. <vspace blankLines="1"/></t>
          <t hangText="Major Extension:">Such an extension requires the definition of a new Diameter
            application. The rules outlined in Section 1.2 of <xref
              target="I-D.ietf-dime-rfc3588bis"/> indicate when an extension requires a
            a new Command Code to be registered and when new Diameter applications have
            to be defined. Typically, these types of extensions require a longer and more careful
            effort depending on the degree of re-use. Therefore, the amount of time and effort
            to complete the specification should also be considered by the designer. </t>
        </list>
      </t>
      <t>The subsequent sections provide discussions about the specific Diameter Base protocol
        rules.</t>
    </section>

    <section anchor="reuse-app-new-cmd" title="Adding a new command">
      <t>Adding a new command is considered a major extension and requires a new
        Diameter application to be defined. Adding a new command to an application
        means either defining a completely new command or importing an existing
        command from another application whereby the new application inherits some
        or all of the functionality of the application where the command came from.
        In the former case, the decision to create an new application is
        straightforward since this is typically a result of adding a new
        functionality that does not exist yet. For the latter, the decision will
        depend on whether importing the command in a new application is more
        suitable than simply using the existing application as it is in
        conjunction with any other application. Therefore, a case by case study
        of each application requirement should be applied.</t>
      <t>In general, it is difficult to come to a hard guideline, and so a case by case study of
        each application requirement should be applied. Before adding or importing a command,
        application designers should consider the following:<vspace blankLines="1"/>
        <list style="symbols">
          <t>Can the new functionality be fulfilled by creating a new application independent from
            the existing applications? In this case, both old and new application can work
            independent of, but cooperating with each other.<vspace blankLines="1"/></t>
          <t>Can the existing application be reused without major extensions that requires the
           definition of a new application, e.g. new funtionality introduced by the creation
           of new optional AVPs.<vspace blankLines="1"/></t>
          <t>Care should be taken to avoid a liberal method of importing existing commands 
           that results in a monolithic and hard to manage application which supports many different
          functionalities.<vspace blankLines="1"/></t>
        </list><vspace blankLines="1"/>
      </t>
    </section>

    <section anchor="reuse-app-del-cmd" title="Deleting a Command">
     <t>Although this process is not typical, removing a command to an application requires a
        new Diameter application to be defined. It is unusual to delete an existing
        command from an application for the sake of deleting it or the functionality it
        represents. This normally indicates of a flawed design. An exception might be
        if the intent of the deletion is to create a newer version of the same
        application which is somehow simpler than the previous version.</t>
    </section>

    <section anchor="reuse-commands" title="Reusing Existing Commands">
      <t>This section discusses rules in adding and/or deleting AVPs from an existing command of an
        existing application. The cases described in this section may not necessarily result in the
        creation of new applications.</t>

      <section anchor="reuse-cmd-add-avp" title="Adding AVPs to a Command">
        <t>Based on the rules in <xref target="I-D.ietf-dime-rfc3588bis"/>, AVPs that are added to
          an existing command can be categorized into:<vspace blankLines="1"/>
          <list style="symbols">
            <t>Mandatory to understand AVPs. As defined in <xref target="I-D.ietf-dime-rfc3588bis"
              />, these are AVPs with the M-bit flag set, which means that a Diameter node receiving
              are required to understand not only their values but their semantics. Failure to do
              so will cause an message handling error. This is regardless of whether these AVPs are
              required or optional as specified by the commands ABNF.<vspace blankLines="1"/></t>
            <t>Optional AVPs. [TBD]</t>
          </list></t>
        <t>The rules are strict in the case where the AVPs to be added are mandatory. A mandatory
          AVP cannot be added to or deleted from an existing command with defining a new Diameter
          application. <xref target="I-D.ietf-dime-rfc3588bis"/> states that doing so would require
          the definition of a new application. This falls into the "Major Extensions" category.
          Despite the clarity of the rule, ambiguity still arises when trying to decide whether a
          new AVP being added should be mandatory to begin with. The follow are a few common
          questions that application designers should contemplate when trying to decide: <vspace blankLines="1"/>
          <list style="symbols">
            <t>Is it required for the receiving side to be able to process and understand the AVP
              and its content (rather than just writing it's content into to a file)?<vspace blankLines="1"/></t>
            <t>Do the AVPs change the state machine of the application ?<vspace blankLines="1"/></t>
            <t>Would the presence of the new AVPs (or the newly specified value contained in an
              existing AVP) lead to a different number of roundtrips, effectively changing the state
              machine of the application?<vspace blankLines="1"/></t>
            <t>Would the AVP be used to differentiate between old and new versions of the same
              application whereby the two versions are not backward compatible?<vspace
                blankLines="1"/></t>
            <t>Will it have duality in meaning, i.e., be used to carry application related
              information as well as be used to indicate that the message is for a new
            application?</t>
          </list></t>
        <t>When one of the above questions can be answered with 'yes' then the M-bit has to be set.
           If application designers are contemplating on the use of optional AVPs instead, then
           the following are some of the pitfalls that should be avoided:<vspace blankLines="1"/></t>
        <t>
          <list style="symbols">
            <t>Use of optional AVPs with intersecting meaning. One AVP has partially the same usage
              and meaning as another AVP. The presence of both can lead to confusion. <vspace
                blankLines="1"/></t>
            <t>An optional AVPs with dual purpose, i.e. to carry applications data as well as to
              indicate support for one or more features. This has a tendency to introduce
              interpretation issues.<vspace blankLines="1"/></t>
            <t>Adding one or more optional AVPs and indicating (usually within descriptive text for
              the command) that at least one of them has to be present in the command. This
              essentially circumventing the ABNF and is equivalent to adding a mandatory AVPs to the
                command.<vspace blankLines="1"/></t>
          </list>These practices generally result in interoperability issues and should be avoided
          as much as possible.</t>
      </section>
      <section anchor="reuse-cmd-del-avp" title="Deleting AVPs from a Command">
        <t>When deleting an AVP from a Command the following cases need to be differentiated: 
         <vspace blankLines="1"/>
         <list style="symbols">
            <t>An AVP that is indicated as {} in the ABNF in the Command (with or without the M-bit set).
              In this case the new Command Code and subsequently a new Diameter application 
              has to be specified.<vspace blankLines="1"/></t>
            <t>An AVP that is indicated as [] in the ABNF in the Command (with the M-bit set).
              No new Command Code has to be specified but the definition of a new Diameter
              application is required.<vspace blankLines="1"/></t>
            <t>An AVP that is indicated as [] in the ABNF in the Command (without the M-bit set).
               In this case the AVP can be deleted without consequences.<vspace blankLines="1"/></t>
          </list></t>
        <t>If possible application designers should attempt the reuse the Command ABNF without
          modification and simply ignore (but not delete) any optional AVP that will not be used.
          This is to maintain compatibility with existing applications that will not know about the
          new functionality as well as maintain the integrity of existing dictionaries. </t>
      </section>
    </section>
    <section anchor="reuse-avps" title="Reusing Existing AVPs">
      <t>This section discusses rules in adding, deleting or modifying the specified values of an
        AVP. </t>
      <t>When reusing AVPs in a new application, the AVP flag setting, such as the mandatory flag
        ('M'-bit), has to be re-evaluated for a new Diameter application and, if necessary, even for
        every Command within the application. In general, for AVPs defined outside of the base
        protocol, its mandatory characteristics are tied to its role within an application and
        Command. </t>
    </section>


    <section anchor="new-element-rules" title="Rules for new Applications">
      <t>The general theme of Diameter extensibility is to reuse commands, AVPs and AVP values as
        much as possible. However, some of the extensibility rules described in the previous section
        also apply to scenarios where a designer is trying to define a completely new Diameter
        application.</t>
      <t>This section discusses the case where new applications have requirements that cannot be
        filled by existing applications and would require definition of completely new commands,
        AVPs and/or AVP values. Typically, there is little ambiguity about the decision to create
        these types of applications. Some examples are the interfaces defined for the IP Multimedia
        Subsystem of 3GPP, i.e. Cx/Dx (<xref target="TS29.228"/> and <xref target="TS29.229"/>), Sh
          (<xref target="TS29.328"/> and <xref target="TS29.329"/>) etc.</t>
      <t>Application designers should also follow the theme of Diameter extensibility which in this
        case means to import existing AVPs and AVP values for any newly defined commands. In certain
        cases where accounting will be used, the models described in <xref target="other-accounting"
        /> should also be considered. Though some decisions may be clear, designers should also
        consider certain aspects of defining a new application. Some of these aspects are described in
        following sections.</t>
      <!-- 
        <section anchor="new-element-rules-cmd-alloc" title="Rules in Allocating new Command Codes">
          <t>If the protocol design justifies the allocation of a new command code then
           a new application as well as a new application ID is required. One of the drawbacks
           of <xref target="RFC3588"/> was that it required application designers to go through
           a lengthy expert review process in order to be allocated with a new command code(s).
           This restricts designers who has to follow strict deadlines for delivering their applications.
           Some designers eventually reverted to sub-optimal application design to circumvent this restriction.
           To fix this issue, revisions introduced in <xref target="I-D.ietf-dime-rfc3588bis"/> has
           relaxed the process and introduced a vendor specific command code space that can be allocated
           on a first-come first-serve basis.
          </t>
        </section>
        
      
        <section anchor="new-element-rules-justify" title="Justifying the Allocation of Application-Id">
          <t>Application designers should avoid justifying the allocation of an application ID
            for every new functionality or every minor change that is made to an existing application.
            Proliferation of applications that are very similar can lead to confusion. Application
            designers should always use <xref target="reuse-rules"/> as a basis for justifying allocation
            of a new application ID.
          </t>
        </section>
        
      -->


      <section anchor="new-element-rules-app-id" title="Use of Application-Id in a Message">
        <t>When designing new applications, designers should specify that the application ID carried
          in all session level messages must be the application ID of the application using those
          messages. This includes the session level messages defined in base protocol, i.e.,
          RAR/RAA, STR/STA, ASR/ASA and possibly ACR/ACA in the coupled accounting model, see <xref
            target="other-accounting"/>. Existing specifications may not adhere to this rule for
          historical or other reasons. However, this scheme should be followed to avoid possible
          routing problems for these messages. </t>
        <t>In general, when a new application has been allocated with a new application id and it
          also reuses existing commands with or without modifications (Sec 4.1), it must use the
          newly allocated application id in the header and in all relevant application id AVPs
          (Auth-Application-Id or Acct-Application-Id) present in the commands message body.</t>
        <t>Additionally, application designs using Vendor-Specific-Application-Id AVP should not use
          the Vendor-Id AVP to further dissect or differentiate the vendor-specification application
          id. Diameter routing is not based on the Vendor-Id. As such, the Vendor-ID should not be
          used as an additional input for routing or delivery of messages. In general, the Vendor-Id
          AVP is an informational AVP only and kept for backward compatibility reasons.</t>
      </section>
      <section anchor="new-element-rules-fsm" title="Application Specific Session State Machine">
        <t>Section 8 of <xref target="I-D.ietf-dime-rfc3588bis"/> provides session state machines for
          authentication, authorization and accounting (AAA) services. When a new application is
          being defined that cannot clearly be categorized into any of these services it is
          recommended that the application itself define its own session state machine. The existing
          session state machines defined by <xref target="I-D.ietf-dime-rfc3588bis"/> is not intended
          for general use beyond AAA services, therefore any behavior not covered by that category
          would not fit well. Support for server initiated request is a clear example where an
          application specific session state machine would be needed, for example, the Rw interface
          for ITU-T push model.</t>
      </section>
    </section>

    <section anchor="new-element-rules-e2e-cap"
      title="End-to-End Applications Capabilities Exchange">
      <t>It is also possible that applications can use optional AVPs to exchange application
        specific capabilities and features. These AVPs are exchanged on an end-to-end basis.
        Examples of this can be found in <xref target="I-D.ietf-dime-mip6-integrated"/> and <xref
          target="I-D.ietf-dime-qos-attributes"/>.</t>
      <t>The end-to-end capabilities AVPs can aid in the following cases:<vspace blankLines="1"/>
        <list style="symbols">
          <t>Formalizing the way new functionality is added to existing applications by announcing
            support for it. <vspace blankLines="1"/></t>
          <t>Applications that do not understand these AVP can discard it upon receipt. In such
            case, senders of the AVP can also safely assume the receiving end-point does not support
            any functionality carried by the AVP if it is not present in subsequent
              responses.<vspace blankLines="1"/></t>
          <t>Useful in cases where deployment choices are offered and the generic design can be made
            available for a number of applications.<vspace blankLines="1"/></t>
        </list> Note that this list is not meant to be comprehensive. </t>
    </section>


    <section anchor="other-accounting" title="Diameter Accounting Support">
      <t> Accounting can be treated as an auxiliary application which is used in support of other
        applications. In most cases, accounting support is required when defining new applications.
        This document provides two(2) possible models for using accounting:<vspace blankLines="1"/>
        <list style="hanging">
          <t hangText="Split Accounting Model"><vspace blankLines="1"/> In this model, the
            accounting messages will use the Diameter base accounting application ID (value of 3).
            The design implication for this is that the accounting is treated as an independent
            application, especially during Diameter routing. This means that accounting commands
            emanating from an application may be routed separately from the rest of the other
            application messages. This may also imply that the messages generally end up in a
            central accounting server. A split accounting model is a good design choice when:
              <vspace blankLines="1"/>
            <list style="symbols">
              <t>The application itself will not define its own unique accounting commands.<vspace
                  blankLines="1"/></t>
              <t>The overall system architecture permits the use of centralized accounting for one
                or more Diameter applications.</t>
            </list><vspace blankLines="1"/> Centralizing accounting may have advantages but there
            are also drawbacks. The model assumes that the accounting server can somehow
            differentiate received accounting messages. Since the received accounting messages can
            be for any application and/or service, the accounting server has to be have a method to
            uniquely match accounting messages with applications and/or services being accounted
            for. This may mean defining new AVPs, checking the presence, absence or contents of
            existing AVPs or checking the contents of the accounting records itself. But in general,
            there is no clean and generic scheme for sorting these messages. Therefore, the use of
            this model is recommended only when all received accounting messages can be clearly
            identified and sorted. For most cases, the use of Coupled Accounting Model is
            recommended. <vspace blankLines="1"/>
          </t>
          <t hangText="Coupled Accounting Model"><vspace blankLines="1"/> In this model, the
            accounting messages will use the application ID of the application using the accounting
            service. The design implication for this is that the accounting messages are tightly
            coupled with the application itself; meaning that accounting messages will be routed
            like any other application messages. It would then be the responsibility of the
            application server (application entity receiving the ACR message) to send the accounting
            records carried by the accounting messages to the proper accounting server. The
            application server is also responsible for formulating a proper response (ACA). A
            coupled accounting model is a good design choice when:<vspace blankLines="1"/>
            <list style="symbols">
              <t>The system architecture or deployment will not provide an accounting server that
                supports Diameter.<vspace blankLines="1"/></t>
              <t>The system architecture or deployment requires that the accounting service for the
                specific application should be handled by the application itself.<vspace
                  blankLines="1"/></t>
              <t>The application server is provisioned to use a different protocol to access the
                accounting server; e.g., via LDAP, SOAP etc. This includes attempting to support
                older accounting systems that are not Diameter aware.<vspace blankLines="1"/></t>
            </list> In all cases above, there will generally be no direct Diameter access to the
            accounting server.<vspace blankLines="1"/></t>
        </list> These models provide a basis for using accounting messages. Application designers
        may obviously deviate from these models provided that the factors being addressed here have
        also been taken into account. Though it is not recommended, examples of other methods might
        be defining a new set of commands to carry application specific accounting records. </t>
    </section>

    <section anchor="other-generic" title="Generic Diameter Extensions">
      <t>Generic Diameter extensions are AVPs, commands or applications that are designed to support
        other Diameter applications. They are auxiliary applications meant to improve or enhance the
        Diameter protocol itself or Diameter applications/functionality. Some examples include the
        extensions to support auditing and redundancy (see <xref
          target="I-D.calhoun-diameter-res-mgmt"/>), improvements in duplicate detection scheme (see
          <xref target="I-D.asveren-dime-dupcons"/>), and piggybacking of QoS attributes (see <xref
          target="I-D.ietf-dime-qos-attributes"/>).</t>
      <t>Since generic extensions can cover many aspects of Diameter and Diameter applications, it
        is not possible to enumerate all the probable scenarios in this document. However, some of
        the most common considerations are as follows:<vspace blankLines="1"/>
        <list style="symbols">
          <t>Backward compatibility: Dealing with existing applications that do not understand the
            new extension. Designers also have to make sure that new extensions do not break
            expected message delivery layer behavior.<vspace blankLines="1"/></t>
          <t>Forward compatibility: Making sure that the design will not introduce undue
            restrictions for future applications. Future applications attempting to support this
            feature should not have to go through great lengths to implement any new extensions.
              <vspace blankLines="1"/></t>
          <t>Tradeoffs in signaling: Designers may have to choose between the use of optional AVPs
            piggybacked onto existing commands versus defining new commands and applications.
            Optional AVPs are simpler to implement and may not need changes to existing
            applications; However, the drawback is that the timing of sending extension data will be
            tied to when the application would be sending a message. This has consequences if the
            application and the extensions have different timing requirements. The use of commands
            and applications solves this issue but the tradeoff is the additional complexity of
            defining and deploying a new application. It is left up to the designer to find a good
            balance among these tradeoffs based on the requirements of the extension.<vspace
              blankLines="1"/></t>
        </list>
      </t>
      <t>In practice, it is often the case that the generic extensions use optional AVPs because
        it's simple and not intrusive to the application that would carry it. Peers that do not
        support the generic extensions need not understand nor recognize these optional AVPs.
        However, it is recommended that the authors of the extension specify the context or usage of
        the optional AVPs. As an example, in the case that the AVP can be used only by a specific
        set of applications then the specification must enumerate these applications and the
        scenarios when the optional AVPs will be used. In the case where the optional AVPs can be
        carried by any application, it is should be sufficient to specify such a use case and
        perhaps provide specific examples of applications using them. </t>
      <t>In most cases, these optional AVPs piggybacked by applications would be defined as a
        Grouped AVP and it would encapsulate all the functionality of the generic extension. In
        practice, it is not uncommon that the Grouped AVP will encapsulate an existing AVP that has
        previously been defined as mandatory ('M'-bit set) e.g., 3GPP IMS Cx / Dx interfaces (<xref
          target="TS29.228"/> and <xref target="TS29.229"/>). </t>
    </section>

    <section title="IANA Considerations">
      <t> This document does not require actions by IANA. </t>
    </section>

    <section title="Security Considerations">
      <t> This document does provides guidelines and considerations for extending Diameter and
        Diameter applications. It does not define nor address security related protocols or schemes.
      </t>
    </section>

    <section title="Contributors">
      <t>The content of this document was influenced by a design team created to revisit the
        Diameter extensibility rules. The team consisting of the members listed below was formed in
        February 2008 and finished its work in June 2008. <vspace blankLines="1"/>
        <list style="symbols">
          <t>Avi Lior</t>
          <t>Glen Zorn </t>
          <t>Jari Arkko </t>
          <t>Lionel Morand </t>
          <t>Mark Jones </t>
          <t>Victor Fajardo </t>
          <t>Tolga Asveren </t>
          <t>Jouni Korhonen </t>
          <t>Glenn McGregor </t>
          <t>Hannes Tschofenig</t>
          <t>Dave Frascone</t>
        </list>
      </t>

    </section>

    <section anchor="acks" title="Acknowledgments">
      <t> We greatly appreciate the insight provided by Diameter implementers who have highlighted
        the issues and concerns being addressed by this document.</t>
    </section>

  </middle>

  <back>
    <references title="Normative References"> &rfc4006; &rfc3588;
      &I-D.ietf-dime-mip6-split; &I-D.ietf-dime-mip6-integrated;
      &I-D.ietf-dime-diameter-qos; &I-D.ietf-dime-qos-attributes;
      &I-D.ietf-dime-rfc3588bis; <reference anchor="TS29.228">
        <front>
          <title> IMS Cx and Dx interfaces : signalling flows and message contents </title>
          <author>
            <organization> 3GPP </organization>
          </author>
        </front>
        <seriesInfo name="3GPP TS 29.228 Version 7.0.0" value="2006"/>
      </reference>
      <reference anchor="TS29.229">
        <front>
          <title> IMS Cx and Dx interfaces based on the Diameter protocol; Protocol details </title>
          <author>
            <organization> 3GPP </organization>
          </author>
        </front>
        <seriesInfo name="3GPP TS 29.229 Version 7.0.0" value="2006"/>
      </reference>
      <reference anchor="TS29.328">
        <front>
          <title> IMS Sh interface : signalling flows and message content </title>
          <author>
            <organization> 3GPP </organization>
          </author>
        </front>
        <seriesInfo name="3GPP TS 29.328 Version 6.8.0" value="2005"/>
      </reference>
      <reference anchor="TS29.329">
        <front>
          <title> IMS Sh interface based on the Diameter protocol; Protocol details </title>
          <author>
            <organization> 3GPP </organization>
          </author>
        </front>

        <seriesInfo name="3GPP TS 29.329 Version 6.6.0" value="2005"/>
      </reference>
    </references>

    <references title="Informative References"> &I-D.asveren-dime-dupcons; <reference
        anchor="I-D.calhoun-diameter-res-mgmt">
        <front>
          <title>Diameter Resource Management Extensions</title>

          <author initials="P." surname="Calhoun" fullname="Pat Calhoun">
            <organization/>
          </author>

          <date month="March" year="2001"/>

        </front>

        <seriesInfo name="Internet-Draft" value="draft-calhoun-diameter-res-mgmt-08.txt"/>
        <format type="TXT" target="http://tools.ietf.org/id/draft-calhoun-diameter-res-mgmt-08.txt"
        />
      </reference>
    </references>

  </back>
</rfc>

PAFTECH AB 2003-20262026-04-24 08:05:56