RFC 2751
Signaled Preemption Priority Policy Element
RFC 2751: Signaled Preemption Priority Policy Element ๐
Title block, bestie: this one is by S. Herzog from IPHighway ๐โโ๏ธ. It's a Standards Track doc, dated January 2000, in the Network Working Group. The title block doesn't list anything it obsoletes or updates.
Status of this Memo ๐
This document is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements. For the current standardization state and status of this protocol, check the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ๐.
Copyright Notice ยฉ๏ธ
Copyright (C) The Internet Society (2000). All Rights Reserved.
Abstract ๐ฆ
This doc describes a preemption priority policy element that signaled policy based admission protocols can use, like [RSVP] and [COPS] ๐.
Preemption priority is a relative importance (a rank) among the flows competing to get admitted into the network. Instead of admitting flows in order of arrival (First Come First Admitted), network nodes can use priorities to preempt some previously admitted low priority flows to make room for a newer, high-priority flow. It's giving main character energy ๐.
Table of Contents ๐บ๏ธ
1 Introduction .....................................................2
2 Scope and Applicability ..........................................3
3 Stateless Policy .................................................3
4 Policy Element Format ............................................4
5 Priority Merging Issues ..........................................5
5.1 Priority Merging Strategies ...................................6
5.1.1 Take priority of highest QoS .................................6
5.1.2 Take highest priority ........................................7
5.1.3 Force error on heterogeneous merge ...........................7
5.2 Modifying Priority Elements ...................................7
6 Error Processing .................................................8
7 IANA Considerations ..............................................8
8 Security Considerations ..........................................8
9 References .......................................................9
10 Author Information .............................................9
Appendix A: Example ...............................................10
A.1 Computing Merged Priority ....................................10
A.2 Translation (Compression) of Priority Elements ...............11
Full Copyright Statement ..........................................12
1. Introduction โจ
Okay so, traditional Capacity based Admission Control (CAC) just lets in new flows until the capacity runs out (First Come First Admitted) ๐ . Policy based Admission Control (PAC) is the glow-up ๐ธ. It tries to make order of arrival matter way less and uses policy based admission criteria instead.
One of the most popular policy criteria is how important a flow is compared to the other flows fighting for admission into a network node. Preemption Priority only kicks in when the flows trying to get through a node are overbooking resources, so that CAC would have to reject some of them. Preemption priority criteria help the node pick the most important flows (highest priority) for admission, while turning away the low priority ones ๐ซถ.
Network nodes that support preemption should consider priorities to preempt some previously admitted low-priority flows in order to make room for a newer, high-priority flow. Literally the whole point ๐ญ.
This document describes the format and applicability of the preemption priority, which is represented as a policy element in [RSVP-EXT] ๐ฆ.
2. Scope and Applicability ๐ง
The Framework document for policy-based admission control [RAP] describes the various components that take part in policy decision making (that's PDP, PEP and LDP) ๐. The whole vibe of PREEMPTION_PRI elements is to be simple, stateless, and light-weight, so they could be implemented internally within a node's LDP (Local Decision Point) ๐.
There are some base assumptions in the usage model for PREEMPTION_PRI elements:
- They are created by PDPs
In a model where PDPs control PEPs at the edge of the policy domain (for example, in border routers), PDPs squish sets of relevant policy rules into one single priority criterion. That priority, expressed in the PREEMPTION_PRI element, can then be passed along to downstream PEPs in the same policy domain. Those PEPs have LDPs but no controlling PDP ๐.
- They can be processed by LDPs
PREEMPTION_PRI elements get processed by the LDPs of nodes that don't have a controlling PDP. LDPs may interpret these objects, forward them as is, or do local merging to forward an equivalent merged PREEMPTION_PRI policy element. LDPs must follow the merging strategy that was encoded by PDPs in the PREEMPTION_PRI objects. (Clearly, a PDP, being a superset of LDP, may act as an LDP as well ๐.)
- They are enforced by PEPs
PREEMPTION_PRI elements work with a node's traffic control module (and capacity admission control) to enforce priorities, and to preempt previously admitted flows when the need arises โญ.
3. Stateless Policy ๐ฆ
Signaled Preemption Priority is stateless, which means it doesn't need past history or external information to be interpreted. So when it's carried in COPS messages for outsourcing policy decisions, these objects are included as COPS Stateless Policy Data Decision objects (see [COSP, COPS-RSVP]) ๐.
4. Policy Element Format ๐
The format of Policy Data objects is defined in [RSVP-EXT]. A single Policy Data object can hold one or more policy elements, each one representing a different (and maybe orthogonal) policy ๐.
The format of the preemption priority policy element looks like this:
+-------------+-------------+-------------+-------------+
| Length (12) | P-Type = PREEMPTION_PRI |
+------+------+-------------+-------------+-------------+
| Flags | M. Strategy | Error Code | Reserved(0) |
+------+------+-------------+-------------+-------------+
| Preemption Priority | Defending Priority |
+------+------+-------------+-------------+-------------+
Here's the breakdown, bestie ๐ :
- Length: 16 bits
Always 12. This is the overall length of the policy element, in bytes.
- P-Type: 16 bits
PREEMPTION_PRI = 3
This value is registered with IANA, see Section 7 ๐ธ.
- Flags: 8 bits
Reserved (always 0).
- Merge Strategy: 8 bit
1 Take priority of highest QoS: recommended
2 Take highest priority: aggressive
3 Force Error on heterogeneous merge
- Reserved: 8 bits
- Error code: 8 bits
0 NO_ERROR Value used for regular PREEMPTION_PRI elements
1 PREEMPTION This previously admitted flow was preempted
2 HETEROGENEOUS This element encountered heterogeneous merge
- Reserved: 8 bits
Always 0.
- Preemption Priority: 16 bit (unsigned)
This is the priority of the new flow, compared with the defending priority of previously admitted flows. Higher values mean higher Priority ๐ฅ.
- Defending Priority: 16 bits (unsigned)
Once a flow gets admitted, its preemption priority becomes irrelevant ๐. Instead, its defending priority is what gets compared with the preemption priority of new flows.
For any specific flow, its preemption priority must always be less than or equal to its defending priority. A wide gap between preemption and defending priority adds stability ๐ง. A moderate preemption priority makes it harder for a flow to preempt others, but once it succeeds, the higher defending priority makes it easier for that flow to avoid getting preempted itself. This is how you balance order dependency and priority โจ.
5. Priority Merging Issues ๐
Let's say two RSVP reservations merge ๐:
F1: QoS=High, Priority=Low
F2: QoS=Low, Priority=High
F1+F2= F3: QoS=High, Priority=???
So F3 should have QoS=High, but what Priority should it take? A few negative side-effects have been spotted that can mess with a merge like this ๐:
Free-Riders:
If F3 takes Priority=High, then F1 got a free ride, borrowing high priority that was only meant for the low QoS F2. If you attach costs to QoS and priority, F1 gets an "expensive" priority without having to "pay" for it ๐ธ.
Denial of Service:
If F3 takes Priority=Low, the merged flow could get preempted or fail even though F2 brought high priority ๐ค.
Denial of service is basically the inverse of the free-rider problem. When flows compete for resources and one flow gets undeserved high priority, it may be able to preempt another flow that actually deserves it. So one free-rider ends up being another flow's denial of service ๐ฅฒ.
Instability:
The mix of preemption priority, killer reservation and blockade state [RSVP] may make admitted flows less stable, where a reservation gets preempted, reinstated, and preempted again over and over ๐.
5.1. Priority Merging Strategies ๐งฉ
When merging happens, LDPs may receive multiple preemption elements, and they must compute the priority of the merged flow using these rules:
- a. Preemption priority and defending priority are merged and computed separately, regardless of each other.
- b. Participating priority elements are selected. All priority elements are checked against their merging strategy to decide whether they should take part in the merged result (as specified below).
- c. The highest priority of all participating priority elements is computed.
The rest of this section covers the different merging strategies that can be specified in the PREEMPTION_PRI element ๐.
5.1.1. Take priority of highest QoS ๐
The PREEMPTION_PRI element only takes part in the merged reservation if it belongs to a flow that contributed to the merged QoS level. In other words, its QoS requirement can't be a subset of another reservation. A simple way to check whether a flow contributed to the merged QoS result is to compute the merged QoS with and without it, then compare the results (though this clearly isn't the most efficient method) ๐ง.
The reasoning here is that the highest QoS flow is the one dominating the merged reservation, so its priority should dominate it too. This approach is the most amenable to preventing priority distortions like free-riders and denial of service ๐ซถ.
This is a recommended merging strategy ๐.
5.1.2. Take highest priority ๐ โโ๏ธ
All PREEMPTION_PRI elements take part in the merged reservation.
This strategy separates priority from QoS level, so it's highly subject to free-riders and its inverse, denial of service ๐ฌ.
This is not a recommended method, but it may be simpler to implement ๐คทโโ๏ธ.
5.1.3. Force error on heterogeneous merge ๐ซ
okay so a PREEMPTION_PRI element is only allowed to join a merged reservation if every other flow in that merge has the same QoS level (homogeneous flows) ๐
the thinking here is that mixed-QoS merges are rare and super complicated to handle, so it's just better to ban them outright ๐ โโ๏ธ
ngl this one can be a denial of service vibe ๐ญ a single receiver asking for an incompatible QoS level can wreck things for every other receiver in the merged reservation
Note: whether flows count as heterogeneous is about the QoS level only (FLOWSPEC values), and it's up to the local (LDP) definition ๐
other kinds of heterogeneous reservations, like conflicting reservation styles, are handled by RSVP and have nothing to do with this PREEMPTION_PRI element
this strategy is a recommended merging strategy when reservation homogeneity is coordinated and enforced across the whole multicast tree ๐ณ it's stricter than Section 5.1.1, but it's way easier to implement โจ
5.2. Modifying Priority Elements ๐ ๏ธ
when POLICY_DATA objects are protected by integrity, LDPs should not try to change them ๐ they have to be forwarded exactly as they are, or their security envelope gets invalidated ๐ in every other case, LDPs may modify and merge incoming PREEMPTION_PRI elements to shrink their size and count, following this rule:
merging happens separately for each merging strategy ๐งฉ
there's no known algorithm that merges PREEMPTION_PRI elements from different merging strategies without losing valuable information that may affect OTHER nodes ๐ค
- for each merging strategy, you take the highest QoS across all participating
PREEMPTION_PRIelements and put it into one outgoingPREEMPTION_PRIelement for that strategy ๐ - this compresses things so you forward at most one
PREEMPTION_PRIelement per merging strategy, no matter how many receivers there are (see the example in Appendix A.2) ๐ฆ
6. Error Processing ๐จ
a PREEMPTION_PRI error object gets sent back toward the appropriate receivers whenever something goes wrong with a PREEMPTION_PRI element ๐
PREEMPTION
when a flow that was already admitted gets preempted, a copy of the preempting flow's PREEMPTION_PRI element is sent back toward the PDP that originated the preempted PREEMPTION_PRI object ๐จ that PDP knows both the preempting and the preempted priorities, so it can build a higher priority PREEMPTION_PRI element to try to bring the preempted flow back ๐
Heterogeneity
when a flow F1 with the Heterogeneous Error merging strategy set in its PREEMPTION_PRI element runs into heterogeneity, the PREEMPTION_PRI element is sent back toward the receivers with the Heterogeneity error code set ๐ซถ
7. IANA Considerations ๐
following the policies in [IANA-CONSIDERATIONS], Standard RSVP Policy Elements (P-type values) are assigned by IETF Consensus action as described in [RSVP-EXT] ๐
PREEMPTION_PRI gets the P-type value 3 ๐
8. Security Considerations ๐
the integrity of PREEMPTION_PRI is guaranteed, like any other policy element, by being encapsulated in a Policy Data object [RSVP-EXT] ๐ก๏ธ
further security mechanisms are not warranted ๐ especially because preemption priority is meant to give simple, quick guidance to routers inside a trusted zone, or at least a single zone where no zone boundaries get crossed ๐งฑ it's giving fortress energy ๐ฐ
9. References ๐
[RSVP-EXT] Herzog, S., "RSVP Extensions for Policy
Control", RFC 2750, January 2000.
[COPS-RSVP] Boyle, J., Cohen, R., Durham, D., Herzog, S.,
Raja, R. and A. Sastry, "COPS usage for RSVP",
RFC 2749, January 2000.
[RAP] Yavatkar, R., et al., "A Framework for Policy
Based Admission Control", RFC 2753, January
2000.
[COPS] Boyle, J., Cohen, R., Durham, D., Herzog, S.,
Raja, R. and A. Sastry, "The COPS (Common Open
Policy Service) Protocol", RFC 2748, January
2000.
[RSVP] Braden, R., ed., et al., "Resource ReSerVation
Protocol (RSVP) - Functional Specification",
RFC 2205, September 1997.
[IANA-CONSIDERATIONS] Alvestrand, H. and T. Narten, "Guidelines for
Writing an IANA Considerations Section in
RFCs", BCP 26, RFC 2434, October 1998.
10. Author Information โ๏ธ
Shai Herzog
IPHighway, Inc.
55 New York Avenue
Framingham, MA 01701
Phone: (508) 620-1141
EMail: herzog@iphighway.com
Appendix A. Example ๐ง
these examples show how merged priority elements get computed, plus how PREEMPTION_PRI elements get translated (compressed) ๐
A.1. Computing Merged Priority ๐งฎ
r1
/ QoS=Hi (Pr=3, St=Highest QoS)
/
s1-----A---------B--------r2 QoS=Low (Pr=4, St=Highest PP)
\ \
\ \ QoS=Low (Pr=7, St=Highest QoS)
r4 r3
QoS=Low (Pr=9, St=Error)
Example 1: Merging preemption priority elements
example one is a multicast scenario with one sender and four receivers, each with their own PREEMPTION_PRI element definition ๐ธ
r1, r2 and r3 merge in B, and the result is priority 4 ๐ฏ
reason: r3's PREEMPTION_PRI doesn't participate (r3 isn't contributing to the merged QoS), so the priority is the highest one from r1 and r2 โจ
r1, r2, r3 and r4 merge in A, and the result is priority 4 again ๐ r4 doesn't participate because its QoS=Low is incompatible with r1's QoS=High ๐ an error PREEMPTION_PRI should be sent back to r4 to tell it that its PREEMPTION_PRI element ran into heterogeneity ๐ซ
A.2. Translation (Compression) of Priority Elements ๐๏ธ
given this set of participating PREEMPTION_PRI elements, the merging node can do the following compression ๐ฅ
From:
(Pr=3, St=Highest QoS)
(Pr=7, St=Highest QoS)
(Pr=4, St=Highest PP)
(Pr=9, St=Highest PP)
(Pr=6, St=Highest PP)
To:
(Pr=7, St=Highest QoS)
(Pr=9, St=Highest PP)
Full Copyright Statement โ๏ธ
Copyright (C) The Internet Society (2000). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement ๐ท
funding for the RFC Editor function is currently provided by the Internet Society ๐
๐ฆ where this page comes from
- ietf: rfc2751 2000-01
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms