diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc4815.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc4815.txt')
-rw-r--r-- | doc/rfc/rfc4815.txt | 1851 |
1 files changed, 1851 insertions, 0 deletions
diff --git a/doc/rfc/rfc4815.txt b/doc/rfc/rfc4815.txt new file mode 100644 index 0000000..3307cf2 --- /dev/null +++ b/doc/rfc/rfc4815.txt @@ -0,0 +1,1851 @@ + + + + + + +Network Working Group L-E. Jonsson +Request for Comments: 4815 K. Sandlund +Updates: 3095, 3241, 3843, 4019, 4362 G. Pelletier +Category: Standards Track P. Kremer + February 2007 + + + RObust Header Compression (ROHC): + Corrections and Clarifications to RFC 3095 + +Status of This Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The IETF Trust (2007). + +Abstract + + RFC 3095 defines the RObust Header Compression (ROHC) framework and + profiles for IP (Internet Protocol), UDP (User Datagram Protocol), + RTP (Real-Time Transport Protocol), and ESP (Encapsulating Security + Payload). Some parts of the specification are unclear or contain + errors that may lead to misinterpretations that may impair + interoperability between different implementations. This document + provides corrections, additions, and clarifications to RFC 3095; this + document thus updates RFC 3095. In addition, other clarifications + related to RFC 3241 (ROHC over PPP), RFC 3843 (ROHC IP profile) and + RFC 4109 (ROHC UDP-Lite profiles) are also provided. + + + + + + + + + + + + + + + + + +Jonsson, et al. Standards Track [Page 1] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +Table of Contents + + 1. Introduction and Terminology ....................................3 + 2. CRC Calculation and Coverage ....................................4 + 2.1. CRC Calculation ............................................4 + 2.2. Padding Octet and CRC Calculations .........................4 + 2.3. CRC Coverage in CRC Feedback Options .......................5 + 2.4. CRC Coverage of the ESP NULL Header ........................5 + 3. Mode Transition .................................................5 + 3.1. Feedback During Mode Transition to U- and O-Mode ...........5 + 3.1.1. Mode Transition Procedures Allowing Sparse Feedback .6 + 3.1.2. Transition from Reliable to Optimistic Mode .........7 + 3.1.3. Transition to Unidirectional Mode ...................8 + 3.2. Feedback During Mode Transition ............................8 + 3.3. Packet Decoding During Mode Transition .....................9 + 4. Timestamp Encoding ..............................................9 + 4.1. Encoding Used for Compressed TS Bits .......................9 + 4.2. (De)compression of TS without Transmitted TS Bits .........10 + 4.3. Interpretation Intervals for TS Encoding ..................11 + 4.4. Scaled RTP Timestamp Encoding .............................11 + 4.4.1. TS_STRIDE for Scaled Timestamp Encoding ............11 + 4.4.2. TS Wraparound with Scaled Timestamp Encoding .......12 + 4.4.3. Algorithm for Scaled Timestamp Encoding ............12 + 4.5. Recalculating TS_OFFSET ...................................14 + 4.6. TS_STRIDE and the Tsc Flag in Extension 3 .................14 + 4.7. Using Timer-Based Compression .............................15 + 5. List Compression ...............................................15 + 5.1. CSRC List Items in RTP Dynamic Chain ......................15 + 5.2. Multiple Occurrences of the CC Field ......................15 + 5.3. Bit Masks in List Compression .............................16 + 5.4. Headers Compressed with List Compression ..................16 + 5.5. ESP NULL Header List Compression ..........................17 + 5.6. Translation Tables and Indexes for IP Extension Headers ...17 + 5.7. Reference List ............................................17 + 5.8. Compression of AH and GRE Sequence Numbers ................18 + 6. Updating Properties ............................................19 + 6.1. Implicit Updates ..........................................19 + 6.2. Updating Properties of UO-1* ..............................20 + 6.3. Context Updating Properties for IR Packets ................20 + 6.4. RTP Padding Field (R-P) in Extension 3 ....................20 + 6.5. RTP eXtension bit (X) in dynamic part .....................21 + 7. Context management and CID/context Reuse .......................21 + 7.1. Persistence of Decompressor Contexts ......................21 + 7.2. CID/Context Reuse .........................................21 + 7.2.1. Reusing a CID/Context with the Same Profile ........22 + 7.2.2. Reusing a CID/Context with a Different Profile .....23 + 8. Other Protocol Clarifications ..................................23 + 8.1. Meaning of NBO ............................................23 + + + +Jonsson, et al. Standards Track [Page 2] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + 8.2. IP-ID .....................................................23 + 8.3. Extension-3 in UOR-2* Packets .............................24 + 8.4. Multiple Occurrences of the M Bit .........................24 + 8.5. Multiple SN options in one feedback packet ................24 + 8.6. Multiple CRC Options in One Feedback Packet ...............25 + 8.7. Responding to Lost Feedback Links .........................25 + 8.8. UOR-2 in Profile 0x0002 (UDP) and Profile 0x0003 (ESP) ....25 + 8.9. Sequence Number LSB's in IP Extension Headers .............25 + 8.10. Expecting UOR-2 ACKs in O-Mode ...........................26 + 8.11. Context Repairs, TS_STRIDE and TIME_STRIDE ...............26 + 9. ROHC Negotiation ...............................................27 + 10. PROFILES Sub-option in ROHC-over-PPP ..........................27 + 11. Constant IP-ID Encoding in IP-only and UPD-Lite Profiles ......27 + 12. Security Considerations .......................................28 + 13. Acknowledgments ...............................................28 + 14. References ....................................................28 + 14.1. Normative References .....................................28 + 14.2. Informative References ...................................29 + Appendix A. Sample CRC Algorithm ..................................30 + +1. Introduction and Terminology + + RFC 3095 [1] defines the RObust Header Compression (ROHC) framework + and profiles for IP (Internet Protocol) [8][9], UDP (User Datagram + Protocol) [10], RTP (Real-Time Transport Protocol) [11], and ESP + (Encapsulating Security Payload) [12]. During implementation and + interoperability testing of RFC 3095, some ambiguities and common + misinterpretations have been identified, as well as a few errors. + + This document summarizes identified issues and provides corrections + needed for implementations of RFC 3095 to interoperate, i.e., it + constitutes an update to RFC 3095. This document also provides other + clarifications related to common misinterpretations of the + specification. References to RFC 3095 should, therefore, also + include this document. + + In addition, some clarifications and corrections are also provided + for RFC 3241 (ROHC over PPP) [2], RFC 3843 (ROHC IP-only profile) + [4], and RFC 4019 (ROHC UDP-Lite profiles) [5], which are thus also + updated by this document. Furthermore, RFC 4362 (ROHC Link-Layer + Assisted Profile) [7] is implicitly updated by this document, since + RFC 4362 is also based on RFC 3095. + + 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 RFC 2119 [6]. + + + + + +Jonsson, et al. Standards Track [Page 3] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + When a section of this document makes formal corrections, additions + or invalidations to text in RFC 3095, this is clearly summarized. + The text from RFC 3095 that is being addressed is given and labeled + "INCOMPLETE", "INCORRECT", or "INCORRECT AND INVALIDATED", followed + by the correct text labeled "CORRECTED", where applicable. When text + is added that does not simply correct text in previous + specifications, it is given with the label "FORMAL ADDITION". + + In this document, a reference to a section in RFC 3095 [1] is written + as RFC 3095-Section <number>. + +2. CRC Calculation and Coverage + +2.1. CRC Calculation + + RFC 3095-Section 5.9 defines polynomials for 3-, 7-, and 8-bit Cyclic + Redundancy Checks (CRCs), but it does not specify what algorithm is + used. The 3-, 7- and 8-bit CRCs are calculated using the CRC + algorithm defined in [3]. + + A Perl implementation of the algorithm can be found in Appendix A of + this document. + +2.2. Padding Octet and CRC Calculations + + RFC 3095-Section 5.9.1 is incomplete, as it does not mention how to + handle the padding octet in CRC calculations for IR and IR-DYN + packets. Padding isn't meant to be a meaningful part of a packet and + is not included in the CRC calculation. As a result, the CRC does + not cover the Add-CID octet for CID 0, either. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.9.1): + + "The CRC in the IR and IR-DYN packet is calculated over the entire + IR or IR-DYN packet, excluding Payload and including CID or any + Add-CID octet." + + CORRECTED TEXT: + + "The CRC in the IR and IR-DYN packet is calculated over the entire + IR or IR-DYN packet, excluding Payload, Padding and including CID + or any Add-CID octet, except for the add-CID octet for CID 0." + + + + + + + + + +Jonsson, et al. Standards Track [Page 4] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +2.3. CRC Coverage in CRC Feedback Options + + RFC 3095-Section 5.7.6.3 is incomplete, as it does not mention how + the "size" field is handled when calculating the 8-bit CRC used in + the CRC feedback option. Since the "size" field is an extension of + the "code" field, it must be treated in the same way. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.7.6.3): + + "The CRC option contains an 8-bit CRC computed over the entire + feedback payload, without the packet type and code octet, but + including any CID fields, using the polynomial of section 5.9.1." + + CORRECTED TEXT: + + "The CRC option contains an 8-bit CRC computed over the entire + feedback payload including any CID fields but excluding the + packet type, the 'Size' field and the 'Code' octet, using the + polynomial of Section 5.9.1." + +2.4. CRC Coverage of the ESP NULL Header + + RFC 3095-Section 5.8.7 gives the CRC coverage of the ESP NULL [13] + header as "Entire ESP header". This must be interpreted as including + only the initial part of the header (i.e., Security Parameter Index + (SPI) and sequence number), and not the trailer part at the end of + the payload. Therefore, the ESP NULL header has the same CRC + coverage as the ESP header used in the ESP profile (RFC 3095-Section + 5.7.7.7). + +3. Mode Transition + +3.1. Feedback During Mode Transition to U- and O-Mode + + RFC 3095-Section 5.6.1 states that during mode transitions, while the + D_TRANS parameter is I, the decompressor sends feedback for each + received packet. This restrictive behavior prevents the decompressor + from using a sparse feedback algorithm during mode transitions. + + To reduce transmission overhead and computational complexity + (including CRC calculation) associated with feedback packets sent for + each decompressed packet during mode transition, a decompressor MAY + be implemented with slightly modified mode transition procedures + compared to those defined in [1], as described in this section. + + These enhanced procedures should be considered only as a possible + improvement to a decompressor implementation, since interoperability + is not affected in any way. A decompressor implemented according to + + + +Jonsson, et al. Standards Track [Page 5] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + the optimized procedures will interoperate with an RFC 3095 + compressor, as well as a decompressor implemented according to the + procedures described in RFC 3095. + +3.1.1. Mode Transition Procedures Allowing Sparse Feedback + + The purpose of these enhanced transition procedures is to allow the + decompressor to sparsely send feedback for packets decompressed + during the second half of the transition procedure, i.e., after an + appropriate IR/IR-DYN/UOR-2 packet has been received from the + compressor. This is achieved by allowing the decompressor transition + parameter (D_TRANS) to be set to P (Pending) at that stage, as shown + in the transition diagrams of Sections 3.1.2 and 3.1.3 below. + + This enhanced transition, where feedback need not be sent for every + decompressed packet, does however introduce some considerations in + case feedback messages would be lost. Specifically, there is a risk + for a deadlock situation when a transition from R-mode is performed; + if no feedback message successfully reaches the compressor, the + transition is never completed. For transition between U-mode and + O-mode, there is also a small risk for reduced compression + efficiency. + + To avoid this, the decompressor MUST continue to send feedback at + least periodically, as well as when in a Pending transition state. + This is equivalent to enhancing the definition of the D_TRANS + parameter in RFC 3095-Section 5.6.1, to include the definition of a + Pending state: + + - D_TRANS: + Possible values for the D_TRANS parameter are (I)NITIATED, + (P)ENDING, and (D)ONE. D_TRANS MUST be initialized to D, and a + mode transition can be initiated only when D_TRANS is D. While + D_TRANS is I, the decompressor sends a NACK or ACK carrying a CRC + option for each packet received. When D_TRANS is set to P, the + decompressor does not have to send a NACK or ACK for each packet + received, but it MUST continue to send feedback with some + periodicity, and all feedback packets sent MUST include the CRC + option. This ensures that all mode transitions will be completed + also in case of feedback losses. + + The modifications affect transitions to Optimistic and Unidirectional + modes of operation (i.e., the transitions described in RFC 3095- + Section 5.6.5 and RFC 3095-Section 5.6.6) and make those transition + diagrams more consistent with the diagram describing the transition + to R-mode. + + + + + +Jonsson, et al. Standards Track [Page 6] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +3.1.2. Transition from Reliable to Optimistic Mode + + The enhanced procedure for transition from Reliable to Optimistic + mode is shown below: + + Compressor Decompressor + ---------------------------------------------- + | | + | ACK(O)/NACK(O) +-<-<-<-| D_TRANS = I + | +-<-<-<-<-<-<-<-+ | + C_TRANS = P |-<-<-<-+ | + C_MODE = O | | + |->->->-+ IR/IR-DYN/UOR-2(SN,O) | + | +->->->->->->->-+ | + |->-.. +->->->-| D_TRANS = P + |->-.. | D_MODE = O + | ACK(SN,O) +-<-<-<-| + | +-<-<-<-<-<-<-<-+ | + C_TRANS = D |-<-<-<-+ | + | | + |->->->-+ UO-0, UO-1* | + | +->->->->->->->-+ | + | +->->->-| D_TRANS = D + | | + + + + + + + + + + + + + + + + + + + + + + + + + + + +Jonsson, et al. Standards Track [Page 7] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +3.1.3. Transition to Unidirectional Mode + + The enhanced procedure for transition to Unidirectional mode is shown + on the following figure: + + Compressor Decompressor + ---------------------------------------------- + | | + | ACK(U)/NACK(U) +-<-<-<-| D_TRANS = I + | +-<-<-<-<-<-<-<-+ | + C_TRANS = P |-<-<-<-+ | + C_MODE = U | | + |->->->-+ IR/IR-DYN/UOR-2(SN,U) | + | +->->->->->->->-+ | + |->-.. +->->->-| D_TRANS = P + |->-.. | + | ACK(SN,U) +-<-<-<-| + | +-<-<-<-<-<-<-<-+ | + C_TRANS = D |-<-<-<-+ | + | | + |->->->-+ UO-0, UO-1* | + | +->->->->->->->-+ | + | +->->->-| D_TRANS = D + | | D_MODE= U + +3.2. Feedback During Mode Transition + + RFC 3095-Section 5.6.1 states that feedback is always used during + mode transitions. However, the text then continues by making + concrete applications of the rule in an inconsistent way, making it + unclear when CRCs are used. Further, the text does not define how + the compressor should act during mode transitions based on feedback + not protected by CRCs, i.e., whether or not to carry out mode + transition actions. The proper behavior from the compressor is to + perform any action related to mode transitions only when the feedback + is protected by the CRC option. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.6.1): + + "As a safeguard against residual errors, all feedback sent during + a mode transition MUST be protected by a CRC, i.e., the CRC + option MUST be used." + + CORRECTED TEXT: + + "As a safeguard against residual errors, all feedback sent by the + decompressor during a mode transition MUST be protected by a CRC, + i.e., the CRC option MUST be used. The compressor MUST ignore + + + +Jonsson, et al. Standards Track [Page 8] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + feedback information related to mode transition if the feedback + is not protected by the CRC option." + + One more related issue that requires clarifications comes from the + following text at the end of RFC 3095-Section 5.6.1: + + "While D_TRANS is I, the decompressor sends a NACK or ACK carrying + a CRC option for each received packet." + + However, RFC 3095-Section 5.5.2.2 already stated that for R-mode, + feedback is never sent for packets that do not update the context, + i.e., for packets that do not carry a CRC, such as R-0 and R-1*. + + This means that when D_TRANS=I during mode transition, a decompressor + operating in R-mode sends an acknowledgement for each packet it + receives and MUST use the sequence number that corresponds to the + packet that last updated the context, i.e., the decompressor MUST NOT + use the sequence number of the R-0 or the R-1* packet. + +3.3. Packet Decoding During Mode Transition + + The purpose of a mode transition is to ensure that the compressor and + the decompressor coherently move from one mode of operation to + another using a three-way handshake. At one point during the mode + transition, the decompressor acknowledges the reception of one (or + more) IR, IR-DYN or UOR-2 packet(s) that have mode bits set to the + new mode. Packets of type 0 or type 1 that are received up to this + point are decompressed using the old mode, while afterwards they are + decompressed using the new mode. If the enhanced transition + procedures described in Section 3.1 are used, the setting of the + D_TRANS parameter to P represents this breakpoint. The successful + decompression of a packet of type 0 or type 1 completes the mode + transition. + +4. Timestamp Encoding + +4.1. Encoding Used for Compressed TS Bits + + RTP Timestamp (TS) values are always encoded using W-LSB encoding, + both when sent scaled and unscaled. When no TS bits are transmitted + in a compressed packet, TS is always scaled. If a compressed packet + carries an Extension 3 and field(Tsc)=0, the compressed packet must + thus always carry unscaled TS bits. For TS values sent in Extension + 3, W-LSB encoded values are sent using the self-describing variable- + length format (RFC 3095-Section 4.5.6), and this applies to both + scaled and unscaled values. + + + + + +Jonsson, et al. Standards Track [Page 9] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +4.2. (De)compression of TS without Transmitted TS Bits + + When ROHC RTP operates using its most efficient packet types, apart + from packet type identification and the error detection CRC, only RTP + sequence number (SN) bits are transmitted in RTP compressed headers. + All other fields are then omitted either because they are unchanged + or because they can be reconstructed through a function from the SN + (i.e., by combining the transmitted SN bits with state information + from the context). Fields that can be inferred from the SN are the + IP Identification (IP-ID) and the RTP Timestamp (TS). + + IP-ID compression and decompression, both with and without + transmitted IP-ID bits in the compressed header, are well defined in + RFC 3095-Section 4.5.5 (see Section 8.2). For the TS field, however, + RFC 3095 only defines how to decompress based on actual TS bits in + the compressed header, either scaled or unscaled, but not how to + infer the TS from the SN when there are no TS bits present in the + compressed header. + + When no TS bits are received in the compressed header, the scaled TS + value is reconstructed assuming a linear extrapolation from the SN, + i.e., delta_TS = delta_SN * default-slope, where delta_SN and + delta_TS are both signed integers. RFC 3095-Section 5.7 defines the + potential values for default-slope. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.7): + + "If value(Tsc) = 1, Scaled RTP Timestamp encoding is used before + compression (see section 4.5.3), and default-slope(TS) = 1. + + If value(Tsc) = 0, the Timestamp value is compressed as-is, and + default-slope(TS) = value(TS_STRIDE)." + + CORRECTED TEXT: + + "When a compressed header with no TS bits is received, the scaled + TS value is reconstructed assuming a linear extrapolation from + the SN, i.e., delta_TS = delta_SN * default-slope(TS). + + If value(Tsc) = 1, Scaled RTP Timestamp encoding is used before + compression (see Section 4.5.3), and default-slope(TS) = 1. + + If value(Tsc) = 0, the Timestamp value is compressed as-is, and + default-slope(TS) = value(TS_STRIDE). If a packet with no TS + bits is received with Tsc = 0, the decompressor MUST discard the + packet." + + + + + +Jonsson, et al. Standards Track [Page 10] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + INCORRECT AND INVALIDATED RFC 3095 TEXT (Section RFC 3095-5.5.1.2): + + "For example, in a typical case where the string pattern has the + form of non-SN-field = SN * slope + offset, one ACK is enough if + the slope has been previously established by the decompressor + (i.e., only the new offset needs to be synchronized). Otherwise, + two ACKs are required since the decompressor needs two headers to + learn both the new slope and the new offset." + + Consequently, there is no other slope value than the default-slope, + as defined in RFC 3095-Section 5.7. + +4.3. Interpretation Intervals for TS Encoding + + RFC 3095-Section 4.5.4 defines the interpretation interval, p, for + timer-based compression of the RTP timestamp. However, RFC 3095- + Section 5.7 defines a different interpretation interval, which is + defined as the interpretation interval to use for all TS values. It + is thus unclear which p-value to use, at least for timer-based + compression. + + The way this should be interpreted is that the p-value differs + depending on whether or not timer-based compression is enabled. + + For timer-based compression (TIME_STRIDE set to a non-zero value), + the interpretation interval is: + + p = 2^(k-1) - 1 (as per RFC 3095-Section 4.5.4) + + Otherwise, the interpretation interval is: + + p = 2^(k-2) - 1 (as per RFC 3095-Section 5.7) + +4.4. Scaled RTP Timestamp Encoding + + This section redefines the algorithm for scaled RTP timestamp + encoding, defined as a 5-step procedure in RFC 3095-Section 4.5.3. + Two formal errors have been corrected, as described in sub-sections + 4.4.1 and 4.4.2 below, and the whole algorithm has been reworked to + be more concise and to use well-defined terminology. The resulting + text can be found in 4.4.3 below. + +4.4.1. TS_STRIDE for Scaled Timestamp Encoding + + RFC 3095 defines the timestamp stride (TS_STRIDE) as the expected + increase in the timestamp value between two RTP packets with + consecutive sequence numbers. TS_STRIDE is set by the compressor and + + + + +Jonsson, et al. Standards Track [Page 11] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + explicitly communicated to the decompressor, and it is used as the + scaling factor for scaled TS encoding. + + The relation between TS and TS_SCALED, given by the following + equality in RFC 3095-Section 4.5.3, defines the mathematical meaning + of TS_STRIDE: + + TS = TS_SCALED * TS_STRIDE + TS_OFFSET + + TS_SCALED is incompletely written as TS / TS_STRIDE in the + compression step following the above core equality. This formula is + incorrect both because it excludes TS_OFFSET and because it would + prevent a TS_STRIDE value of 0, which is an alternative not excluded + by the definition or by the core equality above. If "/" were a + generally unambiguously defined operation meaning "the integral part + of the result from dividing X by Y", the absence of TS_OFFSET could + be explained, but the formula would still lack a proper output for + TS_STRIDE equal to 0. The formula of "2. Compression" is thus valid + only with the following requirements: + + a) "/" means "the integral part of the result from dividing X by Y" + + b) TS_STRIDE>0 (TS is never sent scaled when TS_STRIDE=0) + +4.4.2. TS Wraparound with Scaled Timestamp Encoding + + RFC 3095-Section 4.5.3 states in points 4 and 5 that the compressor + is not required to initialize TS_OFFSET at wraparound, but that it is + required to increase the number of bits sent for the scaled TS value + when there is a TS wraparound. The decompressor is also required to + detect and cope with TS wraparound, including updating TS_OFFSET. + + This method is not interoperable and not robust. The gain is also + insignificant, as TS wraparound happens very seldomly. Therefore, + the compressor should reinitialize TS_OFFSET upon TS wraparound, by + sending an unscaled TS. + +4.4.3. Algorithm for Scaled Timestamp Encoding + + INCORRECT RFC 3095 TEXT (RFC 3095-Section 4.5.3): + + "1. Initialization: The compressor sends to the decompressor the + value of TS_STRIDE and the absolute value of one or several TS + fields. The latter are used by the decompressor to initialize + TS_OFFSET to (absolute value) modulo TS_STRIDE. Note that + TS_OFFSET is the same regardless of which absolute value is + used, as long as the unscaled TS value does not wrap around; + see 4) below. + + + +Jonsson, et al. Standards Track [Page 12] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + 2. Compression: After initialization, the compressor no longer + compresses the original TS values. Instead, it compresses the + downscaled values: TS_SCALED = TS / TS_STRIDE. The compression + method could be either W-LSB encoding or the timer-based + encoding described in the next section. + + 3. Decompression: When receiving the compressed value of + TS_SCALED, the decompressor first derives the value of the + original TS_SCALED. The original RTP TS is then calculated as + TS = TS_SCALED * TS_STRIDE + TS_OFFSET. + + 4. Offset at wraparound: Wraparound of the unscaled 32-bit TS will + invalidate the current value of TS_OFFSET used in the equation + above. For example, let us assume TS_STRIDE = 160 = 0xA0 and + the current TS = 0xFFFFFFF0. TS_OFFSET is then 0x50 = 80. + Then if the next RTP TS = 0x00000130 (i.e., the increment is + 160 * 2 = 320), the new TS_OFFSET should be 0x00000130 modulo + 0xA0 = 0x90 = 144. The compressor is not required to re- + initialize TS_OFFSET at wraparound. Instead, the decompressor + MUST detect wraparound of the unscaled TS (which is trivial) + and update TS_OFFSET to TS_OFFSET = (Wrapped around unscaled + TS) modulo TS_STRIDE" + + CORRECTED TEXT: + + "1. Initialization and updating of RTP TS scaling function: The + compressor sends to the decompressor the value of TS_STRIDE + along with an unscaled TS. These are both needed by the + decompressor to initialize TS_OFFSET as hdr(TS) modulo + field(TS_STRIDE). Note that TS_OFFSET is the same for any TS + as long as TS_STRIDE does not change and as long as the + unscaled TS value does not wrap around; see 4) below. + + 2. Compression: After initialization, the compressor no longer + compresses the unscaled TS values. Instead, it compresses the + scaled values. The compression method can be either W-LSB + encoding or timer-based encoding. + + 3. Decompression: When receiving a (compressed) TS_SCALED, the + field is first decompressed, and the unscaled RTP TS is then + calculated as TS = TS_SCALED * TS_STRIDE + TS_OFFSET. + + 4. Offset at wraparound: If the value of TS_STRIDE is not equal to + a power of two, wraparound of the unscaled 32-bit TS will + change the value of TS_OFFSET. When this happens, the + compressor SHOULD reinitialize TS_OFFSET by sending unscaled + TS, as in 1 above." + + + + +Jonsson, et al. Standards Track [Page 13] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + INCORRECT AND INVALIDATED RFC 3095 TEXT (RFC 3095-Section 4.5.3): + + The entire point 5, i.e. the entire text starting from "5. + Interpretation interval at wraparound ...", down to and including + the block of text that starts with "Let a be the number of LSBs" + and that ends with "...interpretation interval is b." is incorrect + and is thus invalid. + +4.5. Recalculating TS_OFFSET + + TS can be sent unscaled if the TS value change does not match the + established TS_STRIDE, but the TS_STRIDE might still stay unchanged. + To ensure correct decompression of subsequent packets, the + decompressor MUST therefore always recalculate TS_OFFSET (RTP TS + modulo TS_STRIDE) when a packet with an unscaled TS value is + received. + +4.6. TS_STRIDE and the Tsc Flag in Extension 3 + + The Tsc flag in Extension 3 indicates whether or not TS is scaled. + The value of the Tsc flag thus applies to all TS bits, as well as if + there are no TS bits in the extension itself. When TS is scaled, it + is always scaled using context(TS_STRIDE). The legend for Extension + 3 in RFC 3095-Section 5.7.5 incorrectly states that value(TS_STRIDE) + is used for scaled TS. + + If TS_STRIDE is present in Extension 3, as indicated by the Tss flag + being set, the compressed header SHOULD carry unscaled TS bits; i.e., + the Tsc flag SHOULD NOT be set when Tss is set since an unscaled TS + is needed together with TS_STRIDE to recalculate the TS_OFFSET. If + TS_STRIDE is included in a compressed header with scaled TS, the + decompressor must ignore and discard field(TS_STRIDE). + + INCORRECT RFC 3095 TEXT (RFC 3095-Section 5.7.5): + + "Tsc: Tsc = 0 indicates that TS is not scaled; + Tsc = 1 indicates that TS is scaled according to section + 4.5.3, using value(TS_STRIDE). + Context(Tsc) is always 1. If scaling is not desired, the + compressor will establish TS_STRIDE = 1." + + CORRECTED TEXT: + + "Tsc: Tsc = 0 indicates that TS is not scaled; + Tsc = 1 indicates that TS is scaled according to Section + 4.5.3, using context(TS_STRIDE). + + + + + +Jonsson, et al. Standards Track [Page 14] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + Context(Tsc) is always 1. If scaling is not desired, the + compressor will establish TS_STRIDE = 1. + + If field(Tsc) = 1, and if TSS = 1 (meaning that TS_STRIDE is + present in the extension), field(TS_STRIDE) MUST be ignored + and discarded." + + When the compressor re-establishes a new value for TS_STRIDE using + Extension 3, it should send unscaled TS bits together with TS_STRIDE. + +4.7. Using Timer-Based Compression + + Timer-based compression of the RTP timestamp, as described in RFC + 3095-Section 4.5.4, may be used to reduce the number of transmitted + timestamp bits (bytes) needed when the timestamp cannot be inferred + from the SN. Timer-based compression is only used for decompression + of compressed headers that contains a TS field; otherwise, when no + timestamp bits are present, the timestamp is linearly inferred from + the SN (see Section 4.2 of this document). + + Whether or not to use timer-based compression is controlled by the + TIME_STRIDE control field, which can be set by either an IR, an IR- + DYN, or a compressed packet with Extension 3. Before timer-based + compression can be used, the decompressor has to inform the + compressor (on a per-channel basis) about its clock resolution by + sending a CLOCK feedback option for any CID on the channel. The + compressor can then initiate timer-based compression by sending (on a + per-context basis) a non-zero TIME_STRIDE to the decompressor. When + the compressor is confident that the decompressor has received the + TIME_STRIDE value, it can switch to timer-based compression. + +5. List Compression + +5.1. CSRC List Items in RTP Dynamic Chain + + RFC 3095-Section 5.7.7.6 defines the static and dynamic parts of the + RTP header. This section indicates a 'Generic CSRC list' field in + the dynamic chain, which has a variable length (see RFC 3095-Section + 5.8.6). This field is always at least one octet in size, even if the + list is empty (as opposed to the CSRC list in the uncompressed RTP + header, which is not present when the RTP CC field is set to 0). + +5.2. Multiple Occurrences of the CC Field + + The static and the dynamic parts of the RTP header are defined in RFC + 3095-Section 5.7.7.6. In the dynamic part, a CC field indicates the + number of CSRC items present in the 'Generic CSRC list'. Another CC + field also appears within the 'Generic CSRC list' (RFC 3095-Section + + + +Jonsson, et al. Standards Track [Page 15] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + 5.8.6.1), because Encoding Type 0 is always used in the dynamic + chain. Both CC fields have the same meaning: the value of the CC + field determines the number of XI items in the CSRC list for Encoding + Type 0, and it is not used otherwise. Therefore, the following + applies: + + FORMAL ADDITION TO RFC 3095: + + "The first octet in the dynamic part of the RTP header contains a + CC field, as defined in Section 5.7.7.6. A second occurrence + appears in the 'Generic CSRC list', which is also in the dynamic + part of the RTP header, where Encoding Type 0 is used according + to the format defined in RFC 3095-5.8.6.1. + + The compressor MUST set both occurrences of the CC field to the + same value. + + The decompressor MUST use the value of the CC field from the + Encoding Type 0 within the Generic CRSC list, and it MUST thus + ignore the first occurrence of the CC field." + +5.3. Bit Masks in List Compression + + The insertion and/or removal schemes, described in RFC 3095-Sections + 5.8.6.2 - 5.8.6.4, use bit masks to indicates insertion or removal + positions within the reference list. The size of the bit mask can be + 7 bits or 15 bits. + + The compressor MAY use a 7-bit mask, even if the reference list has + more than seven items, provided that changes to the list are only + applied to items within the first seven items of the reference list, + leaving items with an index not covered by the 7-bit mask unchanged. + The decompressor MUST NOT modify items with an index not covered by + the 7-bit mask, when a 7-bit mask is received for a reference list + that contains more than seven items. + +5.4. Headers Compressed with List Compression + + In RFC 3095-Section 5.8, it states that headers that can be part of + extension header chains "include" AH [14], ESP NULL [13], minimal + encapsulation (MINE) [15], GRE [16][17], and IPv6 [9] extensions. + This list of headers that can be compressed is correct, but the word + "include" should not be there, since only the header types listed can + actually be handled. It should further be noted that for the Minimal + Encapsulation (MINE) header, there is no explicit discussion of how + to compress it, as the header is sent either uncompressed or fully + compressed away. + + + + +Jonsson, et al. Standards Track [Page 16] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +5.5. ESP NULL Header List Compression + + Due to the offset of the fields in the trailer part of the ESP + header, a compressor MUST NOT compress packets containing more than + one NULL ESP [13] header, unless the second-outermost header is + treated as a regular ESP [12] header and the packets are compressed + using profile 0x0003. + +5.6. Translation Tables and Indexes for IP Extension Headers + + RFC 3095-Section 5.8.4 describes how list indexes are associated to + list items and how table lists are built for IP extension headers. + The text incorrectly states that one index per type is used, since + the same type can appear several times with different content in one + single chain. + + In IP extension header list compression, an index is associated with + each individual extension header of an extension header chain. When + there are multiple non-identical occurrences of the same extension + type (Protocol Number) within a header chain, each MUST be given its + own index. + + In the case where there are multiple identical occurrences of the + same extension type, the compressor can associate them to the same + index. When the value of an item whose index occurs more than once + in the list is updated, the compressor MUST send the value for each + occurrence of that index in the list. + + When content of extension headers changes, an implementation can + choose to either use a different index or update the existing one. + Some extensions can be compressed away even when some fields change, + as those changes can be conveyed to the decompressor implicitly (e.g. + sequence numbers in extension headers that can be inferred from the + RTP SN) or explicitly (e.g., as part of the 'IP extension header(s)' + field in Extension 3). + + When there is more than one IP header, there is more than one list of + extension headers, and a translation table is maintained for each + list independently of one another. + +5.7. Reference List + + A list compressed using encoding type 1 (insertion), type 2 + (removal), or type 3 (removal/insertion) uses a coding scheme that is + based on the use of a reference list in the context (identified as + ref_id). + + + + + +Jonsson, et al. Standards Track [Page 17] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + While it could seem to be a fair choice to send a type 1 list when + ref_id is an empty list, there is nothing gained in doing so with + respect to using a type 0 list. Sending a type 2 list when ref_id is + an empty list would lead to a failure, while sending a type 3 list + has very little meaning. All these alternatives could be seen as + possible, based on how list compression is specified in RFC 3095. + + If these alternatives were allowed, a decompressor would become + required to maintain a sliding window of ref_id lists in R-mode, even + for the case where no items are sent in the compressed list, and this + is not a desirable requirement. Using list encoding type 1, type 2, + and type 3 is therefore only allowed for non-empty reference lists. + + FORMAL ADDITION TO RFC 3095: + + "Regardless of the operating mode, for list encoding of type 1, + type 2, and type 3 lists, ref_id MUST refer to a non-empty list." + +5.8. Compression of AH and GRE Sequence Numbers + + RFC 3095-Section 5.8.4.2 and RFC 3095-Section 5.8.4.4 describe how to + compress the Authentication Header (AH) [14] and the Generic Routing + Encapsulation (GRE) [16][17] header. Both these sections present a + possibility to omit the AH/GRE sequence number in the compressed + header, under certain circumstances. However, the specific + conditions for omitting the AH/GRE sequence number, as well as the + concrete compression and decompression procedures to apply, are not + clearly defined to guarantee robustness and facilitate interoperable + implementation. + + Proper rules are provided for the ESP case, i.e.,: + + "Sequence Number: Not sent when the offset from the sequence + number of the compressed header is constant, when the compressor + has confidence that the decompressor has established the correct + offset. When the offset is not constant, the sequence number may + be compressed by sending LSBs" + + The same logic applies to the AH/GRE sequence numbers. + + INCORRECT RFC 3095 TEXT (RFC 3095-Section 5.8.4.2): + + "If the sequence number in the AH linearly increases as the RTP + Sequence Number increases, and the compressor is confident that + the decompressor has obtained the pattern, the sequence number in + AH need not be sent. The decompressor applies linear + extrapolation to reconstruct the sequence number in the AH." + + + + +Jonsson, et al. Standards Track [Page 18] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + CORRECTED TEXT: + + "The AH sequence number can be omitted from the compressed header + when the offset from the sequence number (SN) of the compressed + header is constant, when the compressor has confidence that the + decompressor has established the correct offset." + + INCORRECT RFC 3095 TEXT (RFC 3095-Section 5.8.4.4): + + "If the sequence number in the GRE header linearly increases as + the RTP Sequence Number increases and the compressor is confident + that the decompressor has received the pattern, the sequence + number in GRE need not be sent. The decompressor applies linear + extrapolation to reconstruct the sequence number in the GRE + header." + + CORRECTED TEXT: + + "The GRE sequence number can be omitted from the compressed header + when the offset from the sequence number (SN) of the compressed + header is constant, when the compressor has confidence that the + decompressor has established the correct offset." + +6. Updating Properties + +6.1. Implicit Updates + + A context updating packet that contains compressed sequence number + information may also carry information about other fields; in such + cases, these fields are updated according to the content of the + packet. The updating packet also implicitly updates inferred fields + (e.g., RTP Timestamp) according to the current mode and the + appropriate mapping function of the updated and inferred fields. + + An updating packet thus updates the reference values of all header + fields, either explicitly or implicitly, except for the UO-1-ID + packet (see Section 6.2 of this document). In UO-mode, all packets + are updating packets, while in R-mode, all packets with a CRC are + updating packets. + + For example, a UO-0 packet contains the compressed RTP sequence + number (SN). Such a packet also implicitly updates RTP timestamp, + IPv4 ID, and sequence numbers of IP extension headers. + + + + + + + + +Jonsson, et al. Standards Track [Page 19] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +6.2. Updating Properties of UO-1* + + RFC 3095-Section 5.7.3 states that the values provided in extensions + carried by a UO-1-ID packet do not update the context, except for SN, + TS, or IP-ID fields. However, RFC 3095-Section 5.8.1 correctly + states that the translation table in the context is updated whenever + an (Index, item) pair is received, something that is contradicted by + the statement in RFC 3095-5.7.3 because the UO-1-ID packet can carry + Extension 3 with (Index, item) pair items within the 'Compressed CSRC + list' field. In addition to this contradiction, the text does not + mention what to do with the other sequence numbers inferred from the + SN, which are also to be implicitly updated. The updating properties + of UO-1* as stated by RFC 3095-Section 5.7.3 are thus incomplete. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.7.3): + + "Values provided in extensions, except those in other SN, TS, or + IP-ID fields, do not update the context." + + CORRECTED TEXT: + + "UO-1-ID packets only updates TS, SN, IP-ID, and sequence numbers + of IP extension headers. Other values provided in extensions do + not update the context. + + The decompressor MUST update its translation table whenever an + (Index, item) pair is received, as per RFC 3095-Section 5.8.1, + and this rule applies also to UO-1-ID packets." + +6.3. Context Updating Properties for IR Packets + + IR packets do not clear the whole context, but update all fields + carried in the IR header. Similarly, an IR without a dynamic chain + simply updates the static part of the context, while the rest of the + context is left unchanged. + + A consequence of this is that fields that are not updated by the IR + packet, e.g., the translation tables for list compression, MUST NOT + be invalidated by the decompressor when it assumes context damage. + +6.4. RTP Padding Field (R-P) in Extension 3 + + RFC 3095-Section 5.7.5 defines the properties of RTP header flags and + fields in Extension 3. These get updated when the rtp flag of the + Extension 3 is set, i.e., when rtp = 1; otherwise, they are not + updated. However, it is unclear how Extension 3 updates the R-P bit + in the context. + + + + +Jonsson, et al. Standards Track [Page 20] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.7.5): + + "R-P: RTP Padding bit, absolute value (presumed zero if absent)." + + CORRECTED TEXT: + + "R-P: RTP Padding bit. If R-PT = 1, R-P is the absolute value of + the RTP padding bit and this value updates context(R-P). If + R-PT = 0, context(R-P) is updated to zero." + +6.5. RTP eXtension bit (X) in dynamic part + + RFC 3095-Section 5.7.7.6 defines the properties of the RTP header + flags and fields in the RTP part of the dynamic chain of IR and IR- + DYN packets. However, it is unclear how the X bit is updated in the + context. + + INCOMPLETE RFC 3095 TEXT (RFC 3095-Section 5.7.7.6): + + "X: Copy of X bit from RTP header (presumed 0 if RX = 0)" + + CORRECTED TEXT: + + "X: X bit from RTP header. If RX = 1, X is the X bit from the RTP + header and this value updates context(X). If RX = 0, + context(X) is updated to zero." + +7. Context management and CID/context Reuse + +7.1. Persistence of Decompressor Contexts + + As part of the negotiated channel parameters, compressor and + decompressor have, through the MAX_CID parameter, agreed on the + highest context identification (CID) number to be used. By agreeing + on MAX_CID, the decompressor also agrees to provide memory resources + to host at least MAX_CID+1 contexts, and an established context with + a CID within this negotiated space MUST be kept by the decompressor + until either the CID gets reused, or the channel is taken down or + renegotiated. + +7.2. CID/Context Reuse + + As part of the channel negotiation, the maximal number of active + contexts supported is negotiated between the compressor and the + decompressor through the MAX_CID parameter. The value of MAX_CID can + differ significantly from one link application to another, as well as + the load in terms of the number of packet streams to compress. The + lifetime of a ROHC channel can also vary, from almost permanent to + + + +Jonsson, et al. Standards Track [Page 21] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + rather short-lived. However, in general, it is not expected that + resources will be allocated for more contexts than what can + reasonably be expected to be active concurrently over the link. As a + consequence hereof, context identifiers (CIDs) and context memory are + resources that will have to be reused by the compressor as part of + what can be considered normal operation. + + How context resources are reused is left unspecified in RFC 3095 [1] + and subsequent 3095-based ROHC specifications. This document does + not intend to change that, i.e., ROHC resource management is still + considered an implementation detail. However, reusing a CID and its + allocated memory is not always as simple as initiating a context with + a previously unused CID. Because some profiles can be operating in + various modes where packet formats vary depending on current mode, + care has to be taken to ensure that the old context data will be + completely and safely overwritten, eliminating the risk of undesired + side effects from interactions between old and new context data. + This document therefore points out some important core aspects to + consider when implementing resource management in ROHC compressors + and decompressors. + + On a high level, CID/context reuse can be of two kinds, either reuse + for a new context based on the same profile as the old context, or + for a new context based on a different profile. These cases are + discussed separately in the following two sub-sections. + +7.2.1. Reusing a CID/Context with the Same Profile + + For multi-mode profiles, such as those defined in RFC 3095 [1], mode + transitions are performed using a decompressor-initiated handshake + procedure, as defined in RFC 3095-Section 5.6. When a CID/context is + reused for a new context based on the same profile as the old + context, the current mode of operation SHOULD be inherited from the + old to the new context. Specifically, the compressor SHOULD continue + to operate using the mode of operation of the old context also with + the new context. The reason for this is that there is no reliable + way for the compressor to inform the decompressor that a CID/context + reuse is happening. The decompressor can thus not be expected to + clear the context memory for the CID (see Section 6.3), and there is + no way to trigger a safe mode switching (which requires the + decompressor-initiated handshake procedure). + + The rule of mode inheritance applies also when the + CONTEXT_REINITIALIZATION signal (RFC 3095-Section 6.3.1) is used to + reinitiate an entire context. + + + + + + +Jonsson, et al. Standards Track [Page 22] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +7.2.2. Reusing a CID/Context with a Different Profile + + When a CID is reused for a new context based on a different profile + than the old context, both the compressor and the decompressor MUST + start operation with that context in the initial mode of the profile + (if it is a multi-mode profile). This applies both to IR-initiated + new contexts and profile downgrades with IR-DYN (e.g., the profile + 0x0001 -> profile 0x0002 downgrade in RFC 3095-Section 5.11.1). + + Type 0 and type 1 packets have different formats in U/O- and R-mode, + and these R-mode packets have no CRC. When initiating a new context + on a reused R-mode CID, there is a risk that the decompressor will + misinterpret compressed packets if the initiating IR packets are + lost. + + A CID for a context currently operating in R-mode SHOULD therefore + not be reused for a new context based on a different profile than the + old context. A compressor doing otherwise should minimize the risk + for misinterpretation of R-0/R-1 by, e.g., not using packets of types + beginning with 00 or 10 before it is highly confident that the new + context has successfully been initiated at the decompressor. + +8. Other Protocol Clarifications + +8.1. Meaning of NBO + + In IPv4 dynamic part (RFC 3095-Section 5.7.7.4), if the 'NBO' bit is + set, it means that network byte order is used. + +8.2. IP-ID + + According to RFC 3095-Section 5.7, IP-ID means the compressed value + of the IPv4 header's 'Identification' field. Compressed packets + contain this compressed value (IP-ID), while IR packets with dynamic + chain and IR-DYN packets transmit the original, uncompressed + Identification field value. The IP-ID field always represents the + Identification value of the innermost IPv4 header whose corresponding + RND flag is not 1. + + If RND or RND2 is set to 1, the corresponding IP-ID(s) is (are) sent + as 16-bit uncompressed Identification value(s) at the end of the + compressed base header, according to the IP-ID description (see the + beginning of RFC 3095-Section 5.7). When there is no compressed IP- + ID, i.e., for IPv6 or when all IP Identification information is sent + as is (as indicated by RND/RND2 being set to 1), the decompressor + ignores IP-ID bits sent within compressed base headers. + + + + + +Jonsson, et al. Standards Track [Page 23] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + When RND=RND2=0, IP-ID is compressed, i.e., expressed as an SN offset + and byte-swapped if NBO=0. This is the case also when 16 bits of + IP-ID is sent in Extension 3. + + When RND=0 but no IP-ID bits are sent in the compressed header, the + SN offset for IP-ID stays unchanged, meaning that Offset_m equals + Offset_ref, as described in Section 4.5.5. This is further expressed + in a slightly different way (with the same meaning) in Section 5.7, + where it is said that "default-slope(IP-ID offset) = 0", meaning, if + no bits are sent for IP-ID, its SN offset slope defaults to 0. + +8.3. Extension-3 in UOR-2* Packets + + Some flags of the IP header in the extension (e.g., NBO or RND) may + change the interpretation of fields in UOR-2* packets. In such + cases, when a flag changes in Extension 3, a decompressor MUST re- + parse the UOR-2* packet. + +8.4. Multiple Occurrences of the M Bit + + The RTP header part of Extension 3, as defined by RFC 3095-Section + 5.7.5, includes a one-bit field for the RTP Marker bit. This field + is also present in all compressed base header formats except for UO- + 1-ID; meaning, there may be two occurrences of the field within one + single compressed header. In such cases, the two M fields must have + the same value. + + FORMAL ADDITION TO RFC 3095: + + "When there are two occurrences of the M field in a compressed + header (both in the compressed base header and in the RTP part of + Extension 3), the compressor MUST set both these occurrences of + the M field to the same value. + + At the decompressor, if the two M field values of such a packet + are not identical, the packet MUST be discarded." + +8.5. Multiple SN options in one feedback packet + + The length of the sequence number field in the original ESP [12] + header is 32 bits. The format of the SN feedback option (RFC 3095- + Section 5.7.6.6) allows for 8 additional SN bits to the 12 SN bits of + the FEEDBACK-2 format (RFC 3095-Section 5.7.6.1). One single SN + feedback option is thus not enough for the decompressor to send back + all the 32 bits of the ESP sequence number in a feedback packet, + unless it uses multiple SN options in one feedback packet. + + + + + +Jonsson, et al. Standards Track [Page 24] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + RFC 3095-Section 5.7.6.1 declares that a FEEDBACK-2 packet can + contain a variable number of feedback options, and the options can + appear in any order. + + When processing multiple SN options in one feedback packet, the SN + would be given by concatenating the fields. + +8.6. Multiple CRC Options in One Feedback Packet + + Although it is not useful to have more than one single CRC option in + a feedback packet, having multiple CRC options is still allowed. If + multiple CRC options are included, all such CRC options MUST be + identical, as they will be calculated over the same header; the + compressor MUST otherwise discard the feedback packet. + +8.7. Responding to Lost Feedback Links + + Although this is neither desirable or expected, it may happen that a + link used to carry feedback between two associated instances becomes + unavailable. If the compressor can be notified of such an event, the + compressor SHOULD restart compression for each flow that is operating + in R-mode. When restarting compression, the compressor SHOULD use a + different CID for each flow being restarted; this is useful to avoid + the possibility of misinterpreting the type of the compressed header + for the packet type identifiers that are common to both U/O-mode and + R-mode, when the flow is restarted in U-mode (see also Section 7.2). + + Generally, feedback links are not expected to disappear once present, + but it should be noted that this might be the case for certain link + technologies. + +8.8. UOR-2 in Profile 0x0002 (UDP) and Profile 0x0003 (ESP) + + One single new format is defined for UOR-2 in profile 0x0002 and + profile 0x0003, which replaces all three (UOR-2, UOR-2-ID, UOR-2-TS) + formats from profile 0x0001. The same UOR-2 format is thus used + independent of whether or not there are IP headers with a + corresponding RND=1. This also applies to the IP profile [4] and the + IP/UDP-Lite profile [5]. + +8.9. Sequence Number LSB's in IP Extension Headers + + In RFC 3095-Section 5.8.5, formats are defined for compression of IP + extension header fields. These include compressed sequence number + fields, and these fields contain the "LSB of sequence number". These + sequence numbers are not "LSB-encoded" as, e.g., the RTP sequence + number, but are the LSB's of the uncompressed fields. + + + + +Jonsson, et al. Standards Track [Page 25] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +8.10. Expecting UOR-2 ACKs in O-Mode + + Usage of UOR-2 ACKs in O-mode, as discussed in RFC 3095-Section + 5.4.1.1.2, is optional. A decompressor can also send ACKs for + purposes other than to acknowledge the UOR-2, without having to + continue sending ACKs for all UOR-2. Similarly, a compressor + implementation can ignore UOR-2s ACKs for the purpose of adapting the + optimistic approach strategies. + + It is thus NOT RECOMMENDED to use the optional ACK mechanism in O- + mode, either in compressor or in decompressor implementations. + + Using an incorrect expectation on UOR-2 ACKs as a basis for + compressor behavior will significantly degrade the compression + performance. This is because UOR-2 ACKs can be sent from a + decompressor for other purposes than to acknowledge the UOR-2 packet, + e.g., to send feedback such as clock resolution, or to initiate a + mode transition. If an implementation does use the optional + acknowledgment algorithm described in Section 5.4.1.1.2, it must make + sure to set the k_3 and n_3 parameters to much larger values than 1 + to ensure that the compressor performance is not degraded due to the + problem described above. + +8.11. Context Repairs, TS_STRIDE and TIME_STRIDE + + The 7-bit CRC used to verify the outcome of the decompression attempt + covers the original uncompressed header. The CRC verification thus + excludes TS_STRIDE and TIME_STRIDE, as these fields are not part of + the original uncompressed header. + + The UOR-2 packet type can be used to update the value of the + TS_STRIDE and/or the TIME_STRIDE, with the Extension 3. However, + these fields are not used for decompression of the RTP TS field for + this packet type and their respective value is thus not verified, + either implicitly or explicitly. + + When the compressor receives a negative acknowledgement, it thus + cannot determine whether the failure may be caused by an unsuccessful + update to the TS_STRIDE and/or the TIME_STRIDE field(s), for which a + previous header that last attempted to update their value had + previously been acknowledged. + + FORMAL ADDITION TO RFC 3095: + + "When the compressor receives a NACK and uses the UOR-2 header + type to repair the decompressor context, it SHOULD include fields + that update the value of both the TS_STRIDE and the TIME_STRIDE + whose value it has updated at least once since the establishment + + + +Jonsson, et al. Standards Track [Page 26] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + of that context, i.e., since the CID was first associated with + its current profile. + + When the compressor receives a static-NACK, it MUST include in + the IR header fields for both the TS_STRIDE and the TIME_STRIDE + whose value it has updated at least once since the establishment + of that context, i.e., since the CID was first associated with + its current profile." + +9. ROHC Negotiation + + RFC 3095-Section 4.1 states that the link layer must provide means to + negotiate, e.g., the channel parameters listed in RFC 3095-Section + 5.1.1. One of these parameters is the PROFILES parameter, which is a + set of non-negative integers where each integer indicates a profile + supported by the decompressor. + + Each profile is identified by a 16-bit value, where the 8 LSB bits + indicate the actual profile, and the 8 MSB bits indicate the variant + of that profile (see RFC 3095-Section 8). In the ROHC headers sent + over the link, the profile used is identified only with the 8 LSB + bits, which means that the compressor and decompressor must have + agreed on which variant to use for each profile. + + The negotiation protocol must thus be able to communicate to the + compressor the set of profiles supported by the decompressor. When + multiple variants of the same profile are available, the negotiation + protocol must provide the means for the decompressor to know which + variant will be used by the compressor. This basically means that + the PROFILES set after negotiation MUST NOT include more than one + variant of a profile. + +10. PROFILES Sub-option in ROHC-over-PPP + + The logical union of sub-options for IPCP and IPV6CP negotiations, as + specified by ROHC over PPP [2], cannot be used for the PROFILES + suboption, as the whole union would then have to be considered within + each of the two IPCP negotiations to avoid getting an ambiguous + profile set. An implementation of RFC 3241 MUST therefore ensure + that the same profile set is negotiated for both IPv4 and IPv6 + (IPCP/IPV6CP). + +11. Constant IP-ID Encoding in IP-only and UPD-Lite Profiles + + In the ROHC IP-only profile, Section 3.3 of RFC 3843 [4], a mechanism + for encoding of a constant Identification value in IPv4 (constant + IP-ID) is defined. This mechanism is also used by the ROHC UDP-Lite + profiles, RFC 4019 [5]. + + + +Jonsson, et al. Standards Track [Page 27] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + The "Constant IP-ID" mechanism applies to both the inner and outer IP + header, when present, meaning that there will be both a SID and a + SID2 context value. + +12. Security Considerations + + This document provides a number of corrections and clarifications to + [1], but it does not make any changes with regard to the security + aspects of the protocol. As a consequence, the security + considerations of [1] apply without additions. + +13. Acknowledgments + + The authors would like to thank Vicknesan Ayadurai, Carsten Bormann, + Mikael Degermark, Zhigang Liu, Abigail Surtees, Mark West, Tommy + Lundemo, Alan Kennington, Remi Pelland, Lajos Zaccomer, Endre Szalai, + Mark Kalmanczhelyi, and Arpad Szakacs for their contributions and + comments. Thanks also to the committed document reviewers, Carl + Knutsson and Biplab Sarkar, who reviewed the document during working + group last-call. + +14. References + +14.1. Normative References + + [1] Bormann, C., Burmeister, C., Degermark, M., Fukushima, H., + Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le, K., Liu, + Z., Martensson, A., Miyazaki, A., Svanbro, K., Wiebke, T., + Yoshimura, T., and H. Zheng, "RObust Header Compression (ROHC): + Framework and four profiles: RTP, UDP, ESP, and uncompressed", + RFC 3095, July 2001. + + [2] Bormann, C., "Robust Header Compression (ROHC) over PPP", RFC + 3241, April 2002. + + [3] Simpson, W., "PPP in HDLC-like Framing", STD 51, RFC 1662, July + 1994. + + [4] Jonsson, L-E. and G. Pelletier, "RObust Header Compression + (ROHC): A Compression Profile for IP", RFC 3843, June 2004. + + [5] Pelletier, G., "RObust Header Compression (ROHC): Profiles for + User Datagram Protocol (UDP) Lite", RFC 4019, April 2005. + + [6] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + + + + +Jonsson, et al. Standards Track [Page 28] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +14.2. Informative References + + [7] Jonsson, L-E., Pelletier, G., and K. Sandlund, "RObust Header + Compression (ROHC): A Link-Layer Assisted Profile for + IP/UDP/RTP", RFC 4362, January 2006. + + [8] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981. + + [9] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) + Specification", RFC 2460, December 1998. + + [10] Postel, J., "User Datagram Protocol", STD 6, RFC 768, August + 1980. + + [11] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, + "RTP: A Transport Protocol for Real-Time Applications", STD 64, + RFC 3550, July 2003. + + [12] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, + December 2005. + + [13] Glenn, R. and S. Kent, "The NULL Encryption Algorithm and Its + Use With IPsec", RFC 2410, November 1998. + + [14] Kent, S., "IP Authentication Header", RFC 4302, December 2005. + + [15] Perkins, C., "Minimal Encapsulation within IP", RFC 2004, + October 1996. + + [16] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P. Traina, + "Generic Routing Encapsulation (GRE)", RFC 2784, March 2000. + + [17] Dommety, G., "Key and Sequence Number Extensions to GRE", RFC + 2890, September 2000. + + + + + + + + + + + + + + + + + +Jonsson, et al. Standards Track [Page 29] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +Appendix A. Sample CRC Algorithm + + #!/usr/bin/perl -w + use strict; + #================================= + # + # ROHC CRC demo - Carsten Bormann cabo@tzi.org 2001-08-02 + # + # This little demo shows the four types of CRCs in use in RFC 3095, + # the specification for robust header compression. Type your data in + # hexadecimal form and then press Control+D. + # + #--------------------------------- + # + # utility + # + sub dump_bytes($) { + my $x = shift; + my $i; + for ($i = 0; $i < length($x); ) { + printf("%02x ", ord(substr($x, $i, 1))); + printf("\n") if (++$i % 16 == 0); + } + printf("\n") if ($i % 16 != 0); + } + + #--------------------------------- + # + # The CRC calculation algorithm. + # + sub do_crc($$$) { + my $nbits = shift; + my $poly = shift; + my $string = shift; + + my $crc = ($nbits == 32 ? 0xffffffff : (1 << $nbits) - 1); + for (my $i = 0; $i < length($string); ++$i) { + my $byte = ord(substr($string, $i, 1)); + for( my $b = 0; $b < 8; $b++ ) { + if (($crc & 1) ^ ($byte & 1)) { + $crc >>= 1; + $crc ^= $poly; + } else { + $crc >>= 1; + } + $byte >>= 1; + } + } + + + +Jonsson, et al. Standards Track [Page 30] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + + printf "%2d bits, ", $nbits; + printf "CRC: %02x\n", $crc; + } + + #--------------------------------- + # + # Test harness + # + $/ = undef; + $_ = <>; # read until EOF + my $string = ""; # extract all that looks hex: + s/([0-9a-fA-F][0-9a-fA-F])/$string .= chr(hex($1)), ""/eg; + dump_bytes($string); + + #--------------------------------- + # + # 32-bit segmentation CRC + # Note that the text implies that this is complemented like for PPP + # (this differs from 8-, 7-, and 3-bit CRCs) + # + # C(x) = x^0 + x^1 + x^2 + x^4 + x^5 + x^7 + x^8 + x^10 + + # x^11 + x^12 + x^16 + x^22 + x^23 + x^26 + x^32 + # + do_crc(32, 0xedb88320, $string); + + #--------------------------------- + # + # 8-bit IR/IR-DYN CRC + # + # C(x) = x^0 + x^1 + x^2 + x^8 + # + do_crc(8, 0xe0, $string); + + #--------------------------------- + # + # 7-bit FO/SO CRC + # + # C(x) = x^0 + x^1 + x^2 + x^3 + x^6 + x^7 + # + do_crc(7, 0x79, $string); + + #--------------------------------- + # + # 3-bit FO/SO CRC + # + # C(x) = x^0 + x^1 + x^3 + # + do_crc(3, 0x6, $string); + + + +Jonsson, et al. Standards Track [Page 31] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +Authors' Addresses + + Lars-Erik Jonsson + Optand 737 + SE-831 92 Ostersund, Sweden + Phone: +46 70 365 20 58 + EMail: lars-erik@lejonsson.com + + Kristofer Sandlund + Ericsson AB + Box 920 + SE-971 28 Lulea, Sweden + Phone: +46 8 404 41 58 + EMail: kristofer.sandlund@ericsson.com + + Ghyslain Pelletier + Ericsson AB + Box 920 + SE-971 28 Lulea, Sweden + Phone: +46 8 404 29 43 + EMail: ghyslain.pelletier@ericsson.com + + Peter Kremer + Conformance and Software Test Laboratory + Ericsson Hungary + H-1300 Bp. 3., P.O. Box 107, HUNGARY + Phone: +36 1 437 7033 + EMail: peter.kremer@ericsson.com + + + + + + + + + + + + + + + + + + + + + + + +Jonsson, et al. Standards Track [Page 32] + +RFC 4815 Corrections and Clarifications to RFC 3095 February 2007 + + +Full Copyright Statement + + Copyright (C) The IETF Trust (2007). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND + THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at + ietf-ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + +Jonsson, et al. Standards Track [Page 33] + |