<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 PUBLIC ''
'reference.RFC.2119.xml'>
<!ENTITY RFC2234 PUBLIC ''
'reference.RFC.2234.xml'>
<!ENTITY RFC3588 PUBLIC ''
'reference.RFC.3588.xml'>
<!ENTITY RFC4005 PUBLIC ''
'reference.RFC.4005.xml'>
<!ENTITY RFC4072 PUBLIC ''
'reference.RFC.4072.xml'>
<!ENTITY RFC3748 PUBLIC ''
'reference.RFC.3748.xml'>
<!ENTITY RFC4282 PUBLIC ''
'reference.RFC.4282.xml'>
<!ENTITY RFC4284 PUBLIC ''
'reference.RFC.4284.xml'>
<!ENTITY RFC4283 PUBLIC ''
'reference.RFC.4283.xml'>
<!ENTITY RFC2486 PUBLIC ''
'reference.RFC.2486.xml'>
<!ENTITY RFC2865 PUBLIC ''
'reference.RFC.2865.xml'>
<!ENTITY RFC5113 PUBLIC ''
'reference.RFC.5113.xml'>
<!ENTITY RFC1034 PUBLIC ''
'reference.RFC.1034.xml'>
<!ENTITY RFC1035 PUBLIC ''
'reference.RFC.1035.xml'>
<!ENTITY RFC3490 PUBLIC ''
'reference.RFC.3490.xml'>
<!ENTITY RFC6408 PUBLIC ''
'reference.RFC.6408.xml'>
<!ENTITY RFC6733 PUBLIC ''
'reference.RFC.6733.xml'>
<!ENTITY RFC5226 PUBLIC ''
'reference.RFC.5226.xml'>
<!ENTITY RFC4006 PUBLIC ''
'reference.RFC.4006.xml'>
<!ENTITY RFC7068 PUBLIC ''
'reference.RFC.7068.xml'>
<!ENTITY RFC5729 PUBLIC ''
'reference.RFC.5729.xml'>
<!ENTITY RFC5905 PUBLIC ''
'reference.RFC.5905.xml'>
<!ENTITY RFC4412 PUBLIC ''
'reference.RFC.4412.xml'>
<!ENTITY RFC7683 PUBLIC ''
'reference.RFC.7683.xml'>

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc ipr="trust200902"

    category="std"
     number="7944" submissionType="IETF" consensus="yes">
  <front>
    <title abbrev="DOIC">Diameter Routing Message Priority</title>

    <author initials="S" surname="Donovan" fullname="Steve Donovan">
      <organization>Oracle</organization>
      <address>
        <postal>
          <street>7460 Warren Parkway</street>
          <city>Frisco</city>
          <region>Texas</region>
          <code>75034</code>
          <country>United States of America</country>
        </postal>
        <email>srdonovan@usdonovans.com</email>
      </address>
    </author>

    <date month="August" year="2016"/>
    <area>Operations and Management</area>
    <workgroup>Diameter Maintenance and Extensions (DIME)</workgroup>
    <keyword>Diameter</keyword>
    <keyword>Overload</keyword>
    <abstract>
      <t>
        When making routing and resource allocation decisions,
        Diameter nodes currently have no generic mechanism to determine
        the relative priority of Diameter messages.
        This document addresses this by defining
        a mechanism to allow Diameter endpoints to indicate the
        relative priority of Diameter transactions.
        With this information, Diameter
        nodes can factor that priority into routing, resource allocation, and overload abatement
        decisions.
      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction" anchor="intro">
      <t>
        The Diameter Overload Indication Conveyance (DOIC) solution <xref target="RFC7683"/>
        for Diameter overload control introduces scenarios where
        Diameter routing decisions made by Diameter nodes can be influenced
        by the overload state of other Diameter nodes.  This includes the scenarios
        where Diameter endpoints and Diameter Agents can throttle requests as
        a result of the target for the request being overloaded.
      </t>
      <t>
        With currently available mechanisms, these Diameter nodes do not have
        a mechanism to differentiate request message priorities when making these
        throttling decisions.  As such, all requests are treated the same, meaning
        that all requests have the same probability of being throttled.
      </t>
      <t>
        There are scenarios where treating all requests the same can cause
        issues. For instance, it might be considered important to reduce the
        probability of transactions involving first responders being throttled
        during overload scenarios caused, for example, by a period of heavy signaling
        resulting from a natural disaster.
      </t>
      <t>
        This document defines a mechanism that allows Diameter nodes to indicate the
        relative priority of Diameter transactions.
        With this information, other Diameter
        nodes can factor the relative priority of requests into routing and throttling
        decisions.
      </t>
      <section title="Applicability" anchor="applicibility">
        <t>
          There are two primary considerations that must be addressed for the mechanism
          described in this document to work effectively.  The first takes into consideration
          the fact that the Diameter base protocol defined in <xref target="RFC6733"/>  is designed
          to transport multiple Diameter applications and that Diameter nodes can be implemented
          that support multiple applications.  In order for the Diameter Routing Message 
          Priority (DRMP) mechanism to work, the
          priorities defined for all messages across all applications used in a Diameter
          administrative domain must be defined in a consistent and coordinated fashion,
          taking the default priority into account.  See
          <xref target="priorities"/> for a discussion of some of the considerations that
          need to be factored into the setting of DRMPs used by Diameter applications.
        </t>
        <t><list><t>
          Note that this consideration does not apply to Diameter networks where all Diameter
          nodes only support a single application.
        </t></list></t>
        <t>
          Without this cross application priority design taken into consideration, it is possible for
          messages for one application to gain unwarranted preferential treatment over messages
          for other applications.
        </t>
        <t>
          This mechanism also depends on all of the messages that carry the DRMP Attribute Value Pair (AVP) that are inserted
          into Diameter messages by trusted nodes within the Diameter administrative domain.  As discussed
          in <xref target="security"/>, misbehaving nodes have the ability to use the DRMP
          mechanism to gain unwarranted preferential treatment.
        </t>
        <t>
          When messages cross Diameter administrative boundaries, care should be taken to either
          strip or modify the DRMP values in these messages.  If the priority definitions
          vary between the two Diameter administrative domains, then it is possible for messages
          from a foreign domain to gain unwarranted preferential treatment.
        </t>
      </section>
    </section>
    <section title="Terminology and Abbreviations" anchor="abbrev">
      <t>
       <list style="hanging">

         <t hangText="Diversion">
         <vspace blankLines="1"/>
         As defined in <xref target="RFC7683"/>.
         An overload abatement treatment where the reacting node selects
         alternate destinations or paths for requests.
         </t>
         <t hangText="DOIC">
           <vspace blankLines="1"/>
           Diameter Overload Indication Conveyance.
         </t>
         <t hangText="DRMP">
           <vspace blankLines="1"/>
           Diameter Routing Message Priority.
         </t>
         <t hangText="Overload Abatement">
         <vspace blankLines="1"/>
         As defined in <xref target="RFC7683"/>.
         Reaction to receipt of an overload report resulting in a reduction
         in traffic sent to the reporting node. Abatement actions include
         diversion and throttling.
         </t>
         <t hangText="Priority">
         <vspace blankLines="1"/>
         The relative importance of a Diameter message.  A lower-priority
         value implies a higher relative importance of the message.
         </t>
         <t hangText="Throttling">
           <vspace blankLines="1"/>
           As defined in <xref target="RFC7683"/>.
          An abatement treatment that limits the number of requests
          sent by the DOIC reacting node.  Throttling can include a Diameter Client
          choosing to not send requests or a Diameter Agent or Server rejecting requests
          with appropriate error responses.  In both cases, the result of the
          throttling is a permanent rejection of the transaction.
          <vspace blankLines="1"/>
         </t>
       </list>
      </t>

    </section>
    <section title="Conventions Used in This Document">
      <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"></xref>.
        </t>
        <t>

   The interpretation from RFC 2119 does not apply for the
   above listed words when they are not used in all caps.
        </t>
      </section>

    <section title="Problem Statement" anchor="overview">
      <t>
        With the introduction of overload control mechanisms, Diameter nodes
        will be required to make decisions regarding which Diameter request messages
        should be throttled as a result of overloaded Diameter nodes.
      </t>
      <t>
        There is currently no generic mechanism to indicate which request messages
        should be given preferential treatment when these throttling decisions are
        made.
      </t>
      <t>
        As a result, all messages are treated equally and, as such,
        have an equal probability of being throttled.
      </t>
      <t>
        There are a number of scenarios where it is appropriate for an application
        to mark a request as being of a higher priority than other application
        requests.  These are discussed in the next section.
      </t>
      <t>
        This document defines a mechanism for applications to indicate priority for
        individual transactions, reducing the probability of those
        transactions being throttled if there are other lower-priority
        transactions that are eligible for throttling treatment.
      </t>
      <t>
        While the primary usage of DRMP-defined priorities is for input to throttling 
        decisions related to Diameter
        overload control, it is also expected that
        the priority information could also be used for other routing-related
        functionality.  This might include giving higher-priority transactions
        preferential treatment when selecting routes.
      </t>
      <t>
        It is also envisioned that DRMP information could be used
        by Diameter endpoints to make resource allocation decisions.  For instance,
        a Diameter Server might choose to use the priority information to treat
        higher-priority requests ahead of lower-priority requests.  It might also
        use the priority information as a reason to fail a request as a
        result of insufficient resources.
      </t>
      <t><list><t>
        Note: There are a number of application-specific definitions indicating
        various views of application-level priority for different requests.
        Using these application-specific priority AVPs as input to throttling and
        other Diameter routing decisions would require Diameter Agents to
        understand all applications and do application-specific parsing of all
        messages in order to determine the priority of individual messages.  This
        is considered an unacceptable level of complexity to put on elements whose
        primary responsibility is to route Diameter messages.
      </t></list></t>
    </section>
    <section title="Use Cases" anchor="usecases">
      <t>
        This section discusses various scenarios where Diameter transactions
        can benefit from the use of priority information.
      </t>
      <t>
        It is important to note that
        for priority information to be reliably usable, the Diameter
        nodes sending and consuming DRMP AVPs must have pre-established trust
        relationships of the sort described in <xref target="security"/>.
      </t>
      <section title="First-Responder-Related Signaling" anchor="first">
        <t>
          Natural disasters can result in
          a considerable increase in usage of network resources.
          This can be made worse if the disaster
          results in a loss of network capacity.
        </t>
        <t>

          The combination of added load and reduced capacity can lead to Diameter
          nodes becoming overloaded and, as a result, the use of DOIC mechanisms
          to request a reduction in traffic.
          In turn, this results in requests being throttled in an attempt to control
          the overload scenario and prevent the overloaded node from
          failing.
        </t>
        <t>
          There is the need for first responders and other individuals responsible
          for handling the after effects of the disaster to be assured that they
          can gain access to the network resources in order to communicate both
          between themselves and with other network resources.
        </t>
        <t>
          Signaling associated with first responders needs to be given a higher
          priority to help ensure they can most effectively do their jobs.
        </t>
        <t>
          The United States Wireless Priority Services (WPS) and Government
          Emergency Telecommunications Service (GETS) are examples of systems
          designed to address the command and control aspects of these first
          responder needs.
        </t>
      </section>
      <section title="Emergency-Call-Related Signaling" anchor="emergency">
        <t>
          Similar to the first responder scenario, there is also signaling associated
          with emergency calls.  Given the critical nature of these emergency calls,
          this signaling should also be given preferential
          treatment when possible.
        </t>
      </section>
      <section title="Differentiated Services">
        <t>
          Operators may desire to differentiate network-based services by providing
          a service level agreement (SLA) that includes preferential Diameter routing
          behavior.  This might, for example, be modeled as Platinum, Gold, and Silver levels of
          service.
        </t>
        <t>
          In this scenario, an operator might offer a Platinum SLA that includes
          ensuring that all signaling for a customer who purchases the Platinum
          service is being marked as having a higher priority than signaling
          associated with Gold and Silver customers.
        </t>
      </section>
      <section title="Application-Specific Priorities">
        <t>
          There are scenarios within Diameter applications where it might be
          appropriate to give a subset of the transactions for the application a
          higher priority than other transactions for that application.
        </t>
        <t>
          For instance, when there is a series of transactions required for a user
          to gain access to network services, it might be appropriate to mark transactions that
          occur later in the series at a higher priority than those that occur
          early in the series.  This would recognize that there was potentially
          significant work done by the network already that would be lost if
          those later transactions were throttled.
        </t>
        <t>
          There are also scenarios where an agent cannot easily differentiate
          a request that starts a session from requests that update or end
          sessions.  In these scenarios, it might be appropriate to mark the
          requests that establish new sessions with a lower priority than updates
          and session ending requests.  This also recognizes that more work has
          already taken place for established sessions, and as a result, it might
          be more harmful from a signaling point of view
          if the session update and session ending requests were
          to be throttled.
        </t>
        <t>
          There are also scenarios where the priority of requests for
          individual command codes within an application depends on the context
          that exists when the request is sent.
          There isn't always information in the message
          from which this context can be determined by Diameter nodes other than
          the node that originates the request.
        </t>
        <t>
          This is similar to the scenario where a series of requests are needed
          to access a network service.  It is different in that the series of requests
          involves different application command codes.  In this scenario, requests with
          the same command code have different implied priorities.
        </t>
        <t><list><t>
          One example of this is in the 3GPP
           application <xref target="S6a"/>
          where an Update Location Request (ULR)
          resulting from a Mobility Management Entity (MME)
          restoration procedure might be given a higher
          priority than a ULR resulting from an initial attach.
        </t></list></t>
      </section>
    </section>
    <section title="Theory of Operation" anchor="theory">
      <t>
        This section outlines the envisioned usage of DRMP.
      </t>
      <t>
        The expected behavior depends on the role (request sender, agent, or request handler)
        of the Diameter node handling the request.
      </t>
      <t>
        The following behavior is expected during the flow of a Diameter transaction.
      </t>

      <t><list style="numbers">
        <t>
          Request sender -- The sender of a request, be it a Diameter Client
          or a Diameter Server, determines the relative priority of the request
          and includes that priority information in the request.  The method for determining
          the relative priority is application specific and is outside the scope
          of this specification.  The request sender also saves the priority
          information with the transaction state.  This will be used when handling the
          answer messages.
        </t>
        <t>
          Agents handling the request -- Agents use the priority information when
          making routing decisions.  This can include determining which requests
          to route first, which requests to throttle, and where the request is
          routed.  For instance, requests with higher priority might have a lower
          probability of being throttled.  The mechanism for how the agent determines
          which requests are candidates to be throttled is implementation dependent and is outside
          the scope of this document.
          Before forwarding request messages, agents generally do not
          modify the priority information present in the received request
          message nor include the priority information when absent in the received request message.
          However, in some scenarios, agents
          can modify the priority information, for example, edge agents modifying the
          priority  values set by an adjacent operator. There might be other
          scenarios where a Diameter endpoint does not support the DRMP
          mechanism, and agents insert the priority information in the request messages 
          for that non-supporting
          endpoint. When forwarding the request messages,
          the agent also saves the transaction
          priority in the transaction state either as locally managed state or using the
          Proxy-Info mechanism defined in <xref target="RFC6733"/>.
          This will be used when handling the
          associated answer message for the transaction.
        </t>
        <t>
          Request handler -- The handler of the request, be it a Diameter Server
          or a Diameter Client, can use the priority information to determine
          how to handle the request.  This could include determining the order
          in which requests are handled and resources that are applied to the handling
          of the request.
        </t>
        <t>
          Answer sender -- The handler of the request is also the sender of the
          answer. The answer sender uses the priority information received in
          the request message when sending the answer.  This implies that answers
          for higher-priority transactions are given preferential treatment over
          lower-priority transactions.  The answer sender also has the option of
          including priority information in the answer message.  This is done
          when the answer message needs to have a different priority than the
          priority carried in the request message.  The priority included by
          the answer sender is application specific.
        </t>
        <t>
          Agent handling the answer -- By default, agents handling answer
          messages use the priority
          information stored with the transaction state to determine the priority
          of relaying the answer message.  However, priority information
          included in the answer message, when present, is used in place of the
          stored priority information.  The use of priority information implies that answers
          for higher-priority transactions are given preferential treatment over
          lower-priority transactions.
          When forwarding the answer messages, agents generally do not
          modify the priority information present in the received answer messages
          nor include the priority information when absent in the received answer messages.
          However, in some scenarios, agents
          can modify the priority information, for example, edge agents modifying the
          priority  values set by an adjacent operator. There might be other
          scenarios where a Diameter endpoint does not support the DRMP
          mechanism, and agents insert the priority information for that non-supporting endpoint.
        </t>
        <t>
          Answer handler -- The answer handler uses the same method as the agent to
          determine the priority of the answer message.  By default,
          the handler of the answer message uses the priority saved in the
          transaction's state.  Priority information in the answer message is used when present.
          The priority is used when allocating resources for processing that occurs after the
          receipt of the answer message.
        </t>
      </list></t>
    </section>
    <section title="Extensibility">
      <t>
        This document does not define extensibility mechanisms that are specific to
        the DRMP mechanism.  As a result, any extension that requires new AVPs will be
        required to use existing Diameter extensibility mechanisms defined
        in <xref target="RFC6733"/>.
      </t>
    </section>
    <section title="Normative Behavior" anchor="behavior">
      <t>
        This section contains the normative behavior associated with DRMP.
      </t>
      <t>
        When routing priority information is available, Diameter nodes SHOULD
        include Diameter routing message priority in the DRMP AVP in all
        Diameter request messages.
      </t>
      <t><list><t>
        Note: The method of determining the priority value included in the
        request is application specific and is not in the scope of this specification.
      </t></list></t>
      <t>
        The priority marking scheme does not require the Diameter Agents to
        understand application-specific AVPs.
      </t>
      <t>
        When available,
        Diameter nodes SHOULD use routing priority information included in the DRMP AVP
        when making Diameter overload throttling decisions.
      </t>
      <t>
        Diameter Agents MAY use routing priority information included in the DRMP AVP
        when relaying request and answer messages.  This includes
        the selection of routes and the ordering of messages relayed.
      </t>
      <t><list><t>
        Note: The priority information included in the DRMP AVP in request messages
        applies to both the request message and, by default, the
        answer message associated with the transaction.
      </t></list></t>
      <t>
        While done only in exceptional circumstances, Diameter Agents MAY
        modify priority information when relaying
        request and answer messages.
      </t>
      <t><list><t>
        Note: There might be scenarios where a Diameter Agent does modify priority information.
        For instance, an edge agent might need to modify the priority values set by an adjacent
        operator.
      </t></list></t>
      <t>
        While done only in exceptional circumstances, Diameter Agents MAY
        add priority information when relaying
        request and answer messages.
      </t>
      <t><list><t>
        Note: There might be scenarios where a Diameter endpoint does not support the
        DRMP mechanism, and agents insert priority information for that non-supporting endpoint.
      </t></list></t>
      <t>
        Diameter endpoints MAY use routing priority information included in the DRMP AVP
        when making resource allocation
        decisions for the transaction associated with the request message that
        contains the DRMP information.
      </t>
      <t>
        Diameter endpoints MAY use routing priority information included in the DRMP AVP
        when making resource allocation
        decisions for the transaction associated with the answer messages using the
        DRMP information associated with the transaction.
      </t>
      <t>
        Diameter endpoints MAY include the DRMP AVP in answer messages.  This is done when
        the priority for the answer message needs to have a different priority than
        the priority carried in the request message.
      </t>
      <t>
        When determining the priority to apply to answer messages, Diameter nodes
        SHOULD use the priority indicated in the DRMP AVP carried in the answer message, if
        it exists.  If there is not DRMP AVP in the answer message, then the Diameter node
        SHOULD use the priority indicated in the
        DRMP AVP of the associated request message.
      </t>
      <t><list><t>
        Note: One method to determine what priority to apply to an answer when there is no
        DRMP AVP in the answer message is to save the priority included in the request message
        in the state associated with the Diameter transaction.  Another is to use the
        Proxy-Info mechanism defined in <xref target="RFC6733"/>.
      </t></list></t>
      <t>
        Diameter nodes MUST have a default priority to apply to transactions that do
        not have an explicit priority set in the DRMP AVP.
      </t>
      <t>
        In order to guarantee consistent handling of messages from non-upgraded
        Diameter Clients, Diameter nodes SHOULD use the PRIORITY_10 priority as
        this default priority value.
      </t>
      <t><list><t>
        PRIORITY_10 is a midrange priority that corresponds
        to "normal" traffic and thus would be a suitable default for most deployments,
        while still allowing different Diameter applications to designate other
        priorities for lower- and higher-priority traffic.
      </t></list></t>
      <t><list><t>
        Note: This does not imply that a DRMP AVP is added to the message.  Rather, the
        message is treated the same as a message that has a DRMP AVP with a priority value
        of PRIORITY_10.
      </t></list></t>
      <t>
        Diameter nodes MUST support the ability for the default priority to be modified
        through local configuration interfaces.
      </t>
      <t><list><t>
        Note: There are scenarios where operators might want to
        specify a different default value for transactions that do not
        have an explicit priority.  In this case, the operator-defined
        local policy would override the use of PRIORITY_10 as
        the default priority.
      </t></list></t>
      <t>
        When using DRMP information, Diameter nodes MUST use the default
        priority for transactions that do not
        have priority specified in a DRMP AVP.
      </t>
      <t><list>
        <t>
          Note: This guidance on the handling of messages without a priority does
          not result in a Diameter Agent inserting a DRMP AVP into the message.  Rather,
          it gives guidance on how that specific transaction should be treated when
          its priority is compared with other requests.  When a Diameter Agent relays
          the request, it will not insert a DRMP AVP with a priority value of 10.
        </t>
      </list></t>
      <t>
        When setting and using priorities, for all integers x,y in [0,15], treat
        PRIORITY_&lt;x> as lower priority than PRIORITY_&lt;y> when y&lt;x.
      </t>
      <t><list><t>
        Note: As a result, PRIORITY_0 is the highest priority.
      </t></list></t>
    </section>
    <section title="Attribute Value Pairs" anchor="avps">

      <t>
       This section describes the encoding and semantics of the Diameter Routing
       Message Priority AVP defined in this document.
      </t>
      <section title="DRMP AVP" anchor="drmpavp">
        <t>
         The DRMP (AVP code 301) is of type Enumerated. The value
         of the AVP indicates the routing message priority for the transaction.
         The following values are defined:
        </t>
        <t>
          <list style="hanging">
            <t hangText="PRIORITY_15 15">
              PRIORITY_15 is the lowest priority.
            </t>
            <t hangText="PRIORITY_14 14">
              PRIORITY_14 is a higher priority than PRIORITY_15 and a lower
              priority than PRIORITY_13.
            </t>
            <t hangText="PRIORITY_13 13">
              PRIORITY_13 is a higher priority than PRIORITY_14 and a lower
              priority than PRIORITY_12.
            </t>
            <t hangText="PRIORITY_12 12">
              PRIORITY_12 is a higher priority than PRIORITY_13 and a lower
              priority than PRIORITY_11.
            </t>
            <t hangText="PRIORITY_11 11">
              PRIORITY_11 is a higher priority than PRIORITY_12 and a lower
              priority than PRIORITY_10.
            </t>
            <t hangText="PRIORITY_10 10">
              PRIORITY_10 is a higher priority than PRIORITY_11 and a lower
              priority than PRIORITY_9.
            </t>
            <t hangText="PRIORITY_9 9">
              PRIORITY_9 is a higher priority than PRIORITY_10 and a lower
              priority than PRIORITY_8.
            </t>
            <t hangText="PRIORITY_8 8">
              PRIORITY_8 is a higher priority than PRIORITY_9 and a lower
              priority than PRIORITY_7.
            </t>
            <t hangText="PRIORITY_7 7">
              PRIORITY_7 is a higher priority than PRIORITY_8 and a lower
              priority than PRIORITY_6.
            </t>
            <t hangText="PRIORITY_6 6">
              PRIORITY_6 is a higher priority than PRIORITY_7 and a lower
              priority than PRIORITY_5.
            </t>
            <t hangText="PRIORITY_5 5">
              PRIORITY_5 is a higher priority than PRIORITY_6 and a lower
              priority than PRIORITY_4.
            </t>
            <t hangText="PRIORITY_4 4">
              PRIORITY_4 is a higher priority than PRIORITY_5 and a lower
              priority than PRIORITY_3.
            </t>
            <t hangText="PRIORITY_3 3">
              PRIORITY_3 is a higher priority than PRIORITY_4 and a lower
              priority than PRIORITY_2.
            </t>
            <t hangText="PRIORITY_2 2">
              PRIORITY_2 is a higher priority than PRIORITY_3 and a lower
              priority than PRIORITY_1.
            </t>
            <t hangText="PRIORITY_1 1">
              PRIORITY_1 is a higher priority than PRIORITY_2 and a lower
              priority than PRIORITY_0.
            </t>
            <t hangText="PRIORITY_0 0">
              Priority 0 is the highest priority.
            </t>
          </list>
        </t>
      </section>
      <section title="Attribute Value Pair Flag Rules">
        <figure>
          <artwork><![CDATA[
                                                      +---------+
                                                      |AVP Flag |
                                                      |Rules    |
                                                      +----+----+
                           AVP   Section              |    |MUST|
    Attribute Name         Code  Defined  Value Type  |MUST| NOT|
   +--------------------------------------------------+----+----+
   |DRMP                    301  9.1      Enumerated  |    | V  |
   +--------------------------------------------------+----+----+
]]>
          </artwork>
        </figure>
      </section>

    </section>
    <section title="Considerations When Defining Application Priorities" anchor="priorities">
      <t>
        As discussed in <xref target="applicibility"/>, it is important that the definition of
        priority values used by all applications within a single Diameter administrative domain
        be done in a consistent and coordinated manner.
      </t>
      <t>
        The following are some things to be considered when defining the DRMPs to be
        used in Diameter networks that support Diameter nodes handling multiple applications.
      </t>
      <t><list style="numbers">
        <t>
          As with any prioritization scheme, it is possible for higher-priority messages to
          block lower-priority messages from ever being handled.  In a Diameter network, this
          will often result in those Diameter transactions being retried.  This can
          result in more traffic than the network would have handled without use of the DRMP
          mechanism.
          <vspace />
          <vspace />
          One potential guideline to prevent unwanted starving of lower-priority messages
          is to have higher-priority messages represent a relatively small
          portion of messages handled by the Diameter network under normal scenarios.
          <list style="empty"><t>
            Note that there are scenarios, such as first responder messages,
            where the blocking of lower-priority messages
            is a requirement.
          </t></list>
        </t>
        <t>
          When setting priorities for any of the use cases outlined in <xref target="usecases"/>,
          it is important to use the same priority values across applications.  For instance, when
          defining priority for the first responder use case discussed in
          <xref target="first"/> and the emergency
          call use case discussed in <xref target="emergency"/>,
          one high-priority value might be used for
          all first responder messages, say PRIORITY_2, and a slightly lower-priority value, say
          PRIORITY_3, might be used for emergency-call-related messages.  These values should be specified
          for these use cases across all applications used within the Diameter administrative domain.
        <list style="empty"><t>
          Note that the values mentioned here are strictly for illustrative purposes.  The actual
          values used for these use cases are likely to be different.
        </t></list>
        </t>
        <t>
          Messages without the DRMP AVP will be given default priority value treatment.  This will
          include messages from Diameter Clients that have not been updated to support the
          DRMP mechanism.  It might also include messages from foreign administrative domains if
          the DRMP AVPs are stripped from messages crossing the Diameter administrative domains.
        </t>
        <t>
          The process used to introduce the DRMP mechanism into a Diameter network
          should also be taken into consideration.  Messages of the same type within the same
          application might get different treatment depending on whether those messages are sent
          from nodes that are upgraded to support the DRMP mechanism versus nodes that have
          not yet been upgraded to support the DRMP mechanism.
        </t>
      </list></t>
    </section>

    <section title="IANA Considerations" anchor="iana">
      <section title="AVP Codes">
        <t>
         The new AVP defined by this specification is listed in
         <xref target="avps"/>. All AVP codes are allocated from the "AVP Codes" subregistry of the 
         "Authentication, Authorization, and Accounting (AAA) Parameters" registry.
        </t>
      </section>

    </section>
    <section title="Security Considerations" anchor="security">
      <t>
        DRMP gives Diameter nodes the ability to influence which requests are
        throttled during overload scenarios.  In addition, DRMP can be used in
        determining the routing decisions for request messages. Improper use of the DRMP mechanism
        could result in the malicious Diameter node gaining preferential treatment,
        by reducing the probability of its requests being throttled, over other
        Diameter nodes.  This would be achieved by the malicious node inserting
        priority values that are artificially high.
      </t>
      <t>
        Diameter does not include features to provide end-to-end
        authentication, integrity protection, or confidentiality.  This opens
        the possibility that malicious or compromised agents in the path of
        a request could modify the DRMP AVP to reflect a priority different
        than that asserted by the sender of the request.
      </t>
      <section title="Potential Threat Modes">
        <t>
         The Diameter protocol involves transactions in the form of requests
         and answers exchanged between clients and servers. These clients and
         servers may be peers; that is, they may share a direct transport (e.g.,
         the Transmission Control Protocol (TCP)
         or Stream Control Transmission Protocol (SCTP))
         connection, or the messages may traverse one or more
         intermediaries, known as Diameter Agents. Diameter nodes use
         Transport Layer Security (TLS),
         Datagram Transport Layer Security (DTLS),
         or IPsec to authenticate peers and to provide confidentiality
         and integrity protection of traffic between peers. Nodes can make
         authorization decisions based on the peer identities authenticated at
         the transport layer.
        </t>
        <t>
         When agents are involved, this presents an effectively transitive
         trust model. That is, a Diameter Client or Server can authorize an
         agent for certain actions, but it must trust that agent to make
         appropriate authorization decisions about its peers, and so on.
         Since confidentiality and integrity protection occurs at the
         transport layer, agents can read, and perhaps modify, any part of a
         Diameter message, including the DRMP AVP.
        </t>
        <t>
         There are several ways an attacker might attempt to exploit the
         DRMP mechanism. A malicious or compromised Diameter node
         might insert invalid priority values resulting in either preferential
         treatment, resulting from higher values, or degraded treatment resulting
         from lower values, for that node.
        </t>
        <t>
          A similar attack involves a malicious or compromised Diameter Agent
          changing the priority value resulting in the sending Diameter node
          getting either preferential or degraded service.
        </t>
        <t>
          The DRMP mechanism can be used to aid in overload throttling decisions.
          When this is the case, then the above attacks are limited in scope to when
          one or more Diameter nodes are in an overloaded state.
        </t>
        <t>
          The DRMP mechanism can also be used to influence the order in which Diameter messages are
          handled by Diameter nodes.  The above attacks have a potentially greater impact
          in this scenario as the priority indication impacts the handling of all
          requests at all times, independent of the overload status of Diameter nodes
          in the Diameter network.
        </t>
      </section>
      <section title="Denial-of-Service Attacks">
        <t>
          The DRMP mechanism does not open direct denial-of-service attack vectors.  Rather,
          it introduces a mechanism where a node can gain unwarranted preferential treatment.
          It also introduces a mechanism where a node can get degraded service in the
          scenario where a rogue agent changes the priority value included in messages.
        </t>
      </section>
      <section title="End-to-End Security Issues">
        <t>
         The lack of end-to-end integrity features in Diameter <xref target="RFC6733"/>
         makes it  difficult to establish trust in
         DRMP AVPs received from non-adjacent nodes. Any agents in the message path may
         insert or modify DRMP AVPs. Nodes must trust that their adjacent peers perform
         proper checks on overload reports from their peers, and so on, creating a transitive-trust
         requirement extending for potentially long chains of nodes. Network operators must
         determine if this transitive trust requirement is acceptable for their deployments. Nodes
         supporting DRMP MUST give operators the ability to select which peers
         are trusted to deliver DRMP AVPs, and whether they are trusted to forward the
         DRMP AVPs from non-adjacent nodes. Diameter nodes MUST strip DRMP AVPs from messages received
         from peers that are not trusted for DRMP purposes.
        </t>
        <t>
         It is expected that work on end-to-end Diameter security  might make it easier to
         establish trust in non-adjacent nodes for DRMP purposes. Readers should be
         reminded, however, that the DRMP mechanism allows Diameter Agents to modify
         AVPs in existing messages that are originated by other
         nodes. If end-to-end security is enabled, there is a risk that such modification could
         violate integrity protection. The details of using any future Diameter end-to-end security
         mechanism with DRMP will require careful consideration and are beyond the
         scope of this document.
        </t>
      </section>
    </section>
  </middle>

  <back>
    <references title="Normative References">

  &RFC2119;
  &RFC6733;
 </references>
    <references title="Informative References">
      &RFC7683;

      <reference anchor="S6a" target="http://www.3gpp.org/ftp/Specs/html-info/29272.htm">
        <front>
          <title>Evolved Packet System (EPS); Mobility Management Entity
            (MME) and Serving GPRS Support Node (SGSN) related interfaces
            based on Diameter protocol
          </title>
          <author>
            <organization>3GPP</organization>
          </author>
          <date month="June" year="2016"/>
        </front>
        <seriesInfo name="3GPP TS 29.272," value="14.0.0"/>
      </reference>

 </references>
 <section title="Contributors" numbered="no">
      <t>
       The following person contributed substantial ideas, feedback, and
       discussion to this document:
      </t>
      <t>
       <list style="symbols">
         <t>Janet P.&nbsp;Gunn</t>
       </list>
      </t>

    </section>
  </back>
</rfc>
