RFC5225 日本語訳

5225 RObust Header Compression Version 2 (ROHCv2): Profiles for RTP,UDP, IP, ESP and UDP-Lite. G. Pelletier, K. Sandlund. April 2008. (Format: TXT=246120 bytes) (Status: PROPOSED STANDARD)
プログラムでの自動翻訳です。
RFC一覧
英語原文

Network Working Group                                       G. Pelletier
Request for Comments: 5225                                   K. Sandlund
Category: Standards Track                                       Ericsson
                                                              April 2008

コメントを求めるワーキンググループG.ペレティア要求をネットワークでつないでください: 5225年のK.Sandlundカテゴリ: 標準化過程エリクソン2008年4月

             RObust Header Compression Version 2 (ROHCv2):
              Profiles for RTP, UDP, IP, ESP and UDP-Lite

強健なヘッダー圧縮バージョン2(ROHCv2): RTP、UDP、IP、超能力、およびUDP-Liteのためのプロフィール

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.

このドキュメントは、インターネットコミュニティにインターネット標準化過程プロトコルを指定して、改良のために議論と提案を要求します。 このプロトコルの標準化状態と状態への「インターネット公式プロトコル標準」(STD1)の現行版を参照してください。 このメモの分配は無制限です。

Abstract

要約

   This document specifies ROHC (Robust Header Compression) profiles
   that efficiently compress RTP/UDP/IP (Real-Time Transport Protocol,
   User Datagram Protocol, Internet Protocol), RTP/UDP-Lite/IP (User
   Datagram Protocol Lite), UDP/IP, UDP-Lite/IP, IP and ESP/IP
   (Encapsulating Security Payload) headers.

このドキュメントは効率的に、RTP/UDP/IP(リアルタイムのTransportプロトコル、ユーザー・データグラム・プロトコル、インターネットプロトコル)を圧縮するROHC(強健なHeader Compression)プロフィールを指定します、RTP/UDP-Lite/IP(ユーザー・データグラム・プロトコルLite)、UDP/IP、UDP-Lite/IP、IPと超能力/IP(Security有効搭載量を要約する)ヘッダー。

   This specification defines a second version of the profiles found in
   RFC 3095, RFC 3843 and RFC 4019; it supersedes their definition, but
   does not obsolete them.

この仕様はRFC3095、RFC3843、およびRFC4019で見つけられたプロフィールの第2のバージョンを定義します。 それは、彼らの定義に取って代わりますが、それらを時代遅れにしません。

   The ROHCv2 profiles introduce a number of simplifications to the
   rules and algorithms that govern the behavior of the compression
   endpoints.  It also defines robustness mechanisms that may be used by
   a compressor implementation to increase the probability of
   decompression success when packets can be lost and/or reordered on
   the ROHC channel.  Finally, the ROHCv2 profiles define their own
   specific set of header formats, using the ROHC formal notation.

ROHCv2プロフィールは圧縮終点の振舞いを治める規則とアルゴリズムに多くの簡素化を紹介します。 また、それはROHCチャンネルの上にパケットを失われている、そして/または、再命令できるとき減圧成功の確率を増加させるのにコンプレッサー実現で使用されるかもしれない丈夫さメカニズムを定義します。 最終的に、ROHCの正式な記法を使用して、ROHCv2プロフィールはそれら自身の特定のヘッダー形式を定義します。

Pelletier & Sandlund        Standards Track                     [Page 1]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[1ページ]

Table of Contents

目次

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   4
   3.  Acronyms  . . . . . . . . . . . . . . . . . . . . . . . . . .   7
   4.  Background (Informative)  . . . . . . . . . . . . . . . . . .   7
     4.1.  Classification of Header Fields . . . . . . . . . . . . .   7
     4.2.  Improvements of ROHCv2 over RFC 3095 Profiles . . . . . .   8
     4.3.  Operational Characteristics of ROHCv2 Profiles  . . . . .  10
   5.  Overview of the ROHCv2 Profiles (Informative) . . . . . . . .  10
     5.1.  Compressor Concepts . . . . . . . . . . . . . . . . . . .  11
       5.1.1.  Optimistic Approach . . . . . . . . . . . . . . . . .  11
       5.1.2.  Tradeoff between Robustness to Losses and to
               Reordering  . . . . . . . . . . . . . . . . . . . . .  11
       5.1.3.  Interactions with the Decompressor Context  . . . . .  13
     5.2.  Decompressor Concepts . . . . . . . . . . . . . . . . . .  14
       5.2.1.  Decompressor State Machine  . . . . . . . . . . . . .  14
       5.2.2.  Decompressor Context Management . . . . . . . . . . .  17
       5.2.3.  Feedback Logic  . . . . . . . . . . . . . . . . . . .  19
   6.  ROHCv2 Profiles (Normative) . . . . . . . . . . . . . . . . .  19
     6.1.  Channel Parameters, Segmentation, and Reordering  . . . .  19
     6.2.  Profile Operation, Per-context  . . . . . . . . . . . . .  20
     6.3.  Control Fields  . . . . . . . . . . . . . . . . . . . . .  21
       6.3.1.  Master Sequence Number (MSN)  . . . . . . . . . . . .  21
       6.3.2.  Reordering Ratio  . . . . . . . . . . . . . . . . . .  21
       6.3.3.  IP-ID Behavior  . . . . . . . . . . . . . . . . . . .  22
       6.3.4.  UDP-Lite Coverage Behavior  . . . . . . . . . . . . .  22
       6.3.5.  Timestamp Stride  . . . . . . . . . . . . . . . . . .  22
       6.3.6.  Time Stride . . . . . . . . . . . . . . . . . . . . .  22
       6.3.7.  CRC-3 for Control Fields  . . . . . . . . . . . . . .  23
     6.4.  Reconstruction and Verification . . . . . . . . . . . . .  23
     6.5.  Compressed Header Chains  . . . . . . . . . . . . . . . .  24
     6.6.  Header Formats and Encoding Methods . . . . . . . . . . .  25
       6.6.1.  baseheader_extension_headers  . . . . . . . . . . . .  26
       6.6.2.  baseheader_outer_headers  . . . . . . . . . . . . . .  26
       6.6.3.  inferred_udp_length . . . . . . . . . . . . . . . . .  26
       6.6.4.  inferred_ip_v4_header_checksum  . . . . . . . . . . .  26
       6.6.5.  inferred_mine_header_checksum . . . . . . . . . . . .  27
       6.6.6.  inferred_ip_v4_length . . . . . . . . . . . . . . . .  28
       6.6.7.  inferred_ip_v6_length . . . . . . . . . . . . . . . .  28
       6.6.8.  Scaled RTP Timestamp Compression  . . . . . . . . . .  29
       6.6.9.  timer_based_lsb . . . . . . . . . . . . . . . . . . .  30
       6.6.10. inferred_scaled_field . . . . . . . . . . . . . . . .  31
       6.6.11. control_crc3_encoding . . . . . . . . . . . . . . . .  32
       6.6.12. inferred_sequential_ip_id . . . . . . . . . . . . . .  33
       6.6.13. list_csrc(cc_value) . . . . . . . . . . . . . . . . .  34
     6.7.  Encoding Methods with External Parameters as Arguments  .  38
     6.8.  Header Formats  . . . . . . . . . . . . . . . . . . . . .  40

1. 序論. . . . . . . . . . . . . . . . . . . . . . . . 4 2。 用語. . . . . . . . . . . . . . . . . . . . . . . . . 4 3。 頭文字語. . . . . . . . . . . . . . . . . . . . . . . . . . 7 4。 バックグラウンド(有益な).74.1。 ヘッダーフィールド. . . . . . . . . . . . . 7 4.2の分類。 RFC3095の上のROHCv2の改良は.84.3の輪郭を描きます。 ROHCv2の操作上の特性は.105の輪郭を描きます。 ROHCv2の概観は(有益)の.105.1の輪郭を描きます。 コンプレッサー概念. . . . . . . . . . . . . . . . . . . 11 5.1.1。 楽観的なアプローチ. . . . . . . . . . . . . . . . . 11 5.1.2。 損失と、そして、Reordering. . . . . . . . . . . . . . . . . . . . . 11 5.1.3への丈夫さの間の見返り。 減圧装置文脈. . . . . 13 5.2との相互作用。 減圧装置概念. . . . . . . . . . . . . . . . . . 14 5.2.1。 減圧装置州のマシン. . . . . . . . . . . . . 14 5.2.2。 減圧装置文脈管理. . . . . . . . . . . 17 5.2.3。 フィードバック論理. . . . . . . . . . . . . . . . . . . 19 6。 ROHCv2は(標準)の.196.1の輪郭を描きます。 チャンネルパラメタ、分割、およびReordering. . . . 19 6.2。 操作、1文脈あたり.206.3の輪郭を描いてください。 分野. . . . . . . . . . . . . . . . . . . . . 21 6.3.1を制御してください。 一連番号(MSN). . . . . . . . . . . . 21 6.3.2を習得してください。 比率. . . . . . . . . . . . . . . . . . 21 6.3.3をReorderingします。 IP-IDの振舞い. . . . . . . . . . . . . . . . . . . 22 6.3.4。 UDP-Lite適用範囲の振舞い. . . . . . . . . . . . . 22 6.3.5。 タイムスタンプストライド. . . . . . . . . . . . . . . . . . 22 6.3.6。 時間ストライド. . . . . . . . . . . . . . . . . . . . . 22 6.3.7。 制御フィールド. . . . . . . . . . . . . . 23 6.4へのCRC-3。 再建と検証. . . . . . . . . . . . . 23 6.5。 圧縮されたヘッダーチェインズ. . . . . . . . . . . . . . . . 24 6.6。 ヘッダーFormatsとEncoding Methods、.256.6、.1. baseheader_拡大_ヘッダー、.266.6、.2. baseheaderの_の外側の_ヘッダー、.266.6、.3. 推論された_のudp_長さ、.266.6、.4. 推論された_ip_v4_ヘッダー_チェックサム、.266.6、.5. 推論された_私のもの_ヘッダー_チェックサム、.276.6、.6. 推論された_ip_v4_の長さ、.286.6、.7. 推論された_ip_v6_の長さ、.286.6、.8 スケーリングされたRTP Timestamp Compression、.296.6、.9. タイマ_が_lsbを基礎づけた、.306.6、.10. 推論された_が_分野をスケーリングした、.316.6、.11. コントロール_crc3_コード化、.326.6、.12. 推論された_連続した_ip_イド、.336.6、.13. リスト_csrc(cc_値).346.7 議論. 38 6.8として外部のパラメタで方法をコード化します。 ヘッダー形式. . . . . . . . . . . . . . . . . . . . . 40

Pelletier & Sandlund        Standards Track                     [Page 2]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[2ページ]

       6.8.1.  Initialization and Refresh Header Format (IR) . . . .  40
       6.8.2.  Compressed Header Formats (CO)  . . . . . . . . . . .  41
     6.9.  Feedback Formats and Options  . . . . . . . . . . . . . . 100
       6.9.1.  Feedback Formats  . . . . . . . . . . . . . . . . . . 100
       6.9.2.  Feedback Options  . . . . . . . . . . . . . . . . . . 102
   7.  Security Considerations . . . . . . . . . . . . . . . . . . . 104
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . 105
   9.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . 105
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . . 106
     10.1. Normative References  . . . . . . . . . . . . . . . . . . 106
     10.2. Informative References  . . . . . . . . . . . . . . . . . 107
   Appendix A.    Detailed Classification of Header Fields . . . . . 108
     A.1.  IPv4 Header Fields  . . . . . . . . . . . . . . . . . . . 109
     A.2.  IPv6 Header Fields  . . . . . . . . . . . . . . . . . . . 112
     A.3.  UDP Header Fields   . . . . . . . . . . . . . . . . . . . 113
     A.4.  UDP-Lite Header Fields  . . . . . . . . . . . . . . . . . 114
     A.5.  RTP Header Fields . . . . . . . . . . . . . . . . . . . . 115
     A.6.  ESP Header Fields . . . . . . . . . . . . . . . . . . . . 117
     A.7.  IPv6 Extension Header Fields  . . . . . . . . . . . . . . 117
     A.8.  GRE Header Fields . . . . . . . . . . . . . . . . . . . . 118
     A.9.  MINE Header Fields  . . . . . . . . . . . . . . . . . . . 119
     A.10. AH Header Fields  . . . . . . . . . . . . . . . . . . . . 120
   Appendix B.    Compressor Implementation Guidelines . . . . . . . 121
     B.1.  Reference Management  . . . . . . . . . . . . . . . . . . 121
     B.2.  Window-based LSB Encoding (W-LSB)  . . .  . . . . . . . . 121
     B.3.  W-LSB Encoding and Timer-based Compression  . . . . . . . 122

6.8.1. 初期設定、.2にヘッダー形式(IR). . . . 40 6.8をリフレッシュしてください。 圧縮されたヘッダーは(CO). . . . . . . . . . . 41 6.9をフォーマットします。 フィードバック形式とオプション. . . . . . . . . . . . . . 100 6.9.1。 フィードバックは.2に.100 6.9をフォーマットします。 フィードバックオプション. . . . . . . . . . . . . . . . . . 102 7。 セキュリティ問題. . . . . . . . . . . . . . . . . . . 104 8。 IANA問題. . . . . . . . . . . . . . . . . . . . . 105 9。 承認. . . . . . . . . . . . . . . . . . . . . . 105 10。 参照. . . . . . . . . . . . . . . . . . . . . . . . . 106 10.1。 引用規格. . . . . . . . . . . . . . . . . . 106 10.2。 有益な参照. . . . . . . . . . . . . . . . . 107付録A.はヘッダーフィールド. . . . . 108A.1の分類を詳しく述べました。 IPv4ヘッダーフィールド. . . . . . . . . . . . . . . . . . . 109A.2。 IPv6ヘッダーフィールド. . . . . . . . . . . . . . . . . . . 112A.3。 UDPヘッダーフィールド. . . . . . . . . . . . . . . . . . . 113A.4。 UDP-Liteヘッダーフィールド. . . . . . . . . . . . . . . . . 114A.5。 RTPヘッダーフィールド. . . . . . . . . . . . . . . . . . . . 115A.6。 超能力ヘッダーフィールド. . . . . . . . . . . . . . . . . . . . 117A.7。 IPv6拡大ヘッダーフィールド. . . . . . . . . . . . . . 117A.8。 GREヘッダーフィールド. . . . . . . . . . . . . . . . . . . . 118A.9。 ヘッダーフィールド. . . . . . . . . . . . . . . . . . . 119A.10を採掘してください。 ああ、ヘッダーフィールド. . . . . . . . . . . . . . . . . . . . 120付録B.コンプレッサー実施要綱. . . . . . . 121B.1。 参照管理. . . . . . . . . . . . . . . . . . 121B.2。 (W-LSB). . . . . . . . . . . 121B.3をコード化する窓のベースのLSB。 W-LSBのコード化していてタイマベースの圧縮. . . . . . . 122

Pelletier & Sandlund        Standards Track                     [Page 3]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[3ページ]

1.  Introduction

1. 序論

   The ROHC WG has developed a header compression framework on top of
   which various profiles can be defined for different protocol sets or
   compression requirements.  The ROHC framework was first documented in
   [RFC3095], together with profiles for compression of RTP/UDP/IP
   (Real-Time Transport Protocol, User Datagram Protocol, Internet
   Protocol), UDP/IP, IP and ESP/IP (Encapsulating Security Payload)
   headers.  Additional profiles for compression of IP headers [RFC3843]
   and UDP-Lite (User Datagram Protocol Lite) headers [RFC4019] were
   later specified to complete the initial set of ROHC profiles.

ROHC WGは上異なったプロトコルセットか圧縮要件のために様々なプロフィールを定義できるヘッダー圧縮枠組みを開発しました。 ROHC枠組みは最初に[RFC3095]に記録されました、RTP/UDP/IP(リアルタイムのTransportプロトコル、ユーザー・データグラム・プロトコル、インターネットプロトコル)の圧縮のためのプロフィールと共に、UDP/IP、IPと超能力/IP(Security有効搭載量を要約する)ヘッダー。 IPヘッダー[RFC3843]とUDP-Lite(ユーザー・データグラム・プロトコルLite)ヘッダー[RFC4019]の圧縮のための追加プロフィールは、後でROHCプロフィールの始発を完成するために指定されました。

   This document defines an updated version for each of the above
   mentioned profiles, and the definitions depend on the ROHC framework
   as found in [RFC4995].  The framework is required reading to
   understand the profile definitions, rules, and their role.

このドキュメントはそれぞれの上記のプロフィールのためのアップデートされたバージョンを定義します、そして、定義は[RFC4995]で見つけられるようにROHC枠組みによります。 枠組みはプロフィール定義、規則、およびそれらの役割を理解する必読書です。

   Specifically, this document defines header compression schemes for:

明確に、このドキュメントは以下のためにヘッダー圧縮技術を定義します。

   o RTP/UDP/IP      : profile 0x0101
   o UDP/IP          : profile 0x0102
   o ESP/IP          : profile 0x0103
   o IP              : profile 0x0104
   o RTP/UDP-Lite/IP : profile 0x0107
   o UDP-Lite/IP     : profile 0x0108

o RTP/UDP/IP: プロフィール0x0101o UDP/IP: プロフィール0x0102o超能力/IP: プロフィール0x0103o IP: プロフィール0x0104o RTP/UDP-Lite/IP: プロフィール0x0107o UDP-Lite/IP: プロフィール0x0108

   Each of the profiles above can compress the following type of
   extension headers:

それぞれの上記のプロフィールは以下のタイプの拡張ヘッダーを圧縮できます:

   o  AH [RFC4302]

o ああ[RFC4302]

   o  GRE [RFC2784][RFC2890]

o GRE[RFC2784][RFC2890]

   o  MINE [RFC2004]

o 私のもの[RFC2004]

   o  IPv6 Destination Options header[RFC2460]

o IPv6 Destination Optionsヘッダー[RFC2460]

   o  IPv6 Hop-by-hop Options header[RFC2460]

o ホップによるIPv6 Hop Optionsヘッダー[RFC2460]

   o  IPv6 Routing header [RFC2460]

o IPv6ルート設定ヘッダー[RFC2460]

2.  Terminology

2. 用語

   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 [RFC2119].

キーワード“MUST"、「必須NOT」が「必要です」、“SHALL"、「」、“SHOULD"、「「推薦され」て、「5月」の、そして、「任意」のNOTはRFC2119[RFC2119]で説明されるように本書では解釈されることであるべきですか?

Pelletier & Sandlund        Standards Track                     [Page 4]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[4ページ]

   This document is consistent with the terminology found in the ROHC
   framework [RFC4995] and in the formal notation for ROHC [RFC4997].
   In addition, this document uses or defines the following terms:

ROHC[RFC4997]において、このドキュメントはROHC枠組み[RFC4995]と正式な記法で見つけられる用語と一致しています。 さらに、このドキュメントは、次の用語を使用するか、または定義します:

   Acknowledgment Number

確認応答番号

      The Acknowledgment Number identifies what packet is being
      acknowledged in the RoHCv2 feedback element (See Section 6.9).
      The value of this field normally corresponds to the Master
      Sequence Number (MSN) of the header that was last successfully
      decompressed, for the compression context (CID) for which the
      feedback information applies.

Acknowledgment Numberは、どんなパケットがRoHCv2フィードバック要素で承認されているかを特定します(セクション6.9を見てください)。 通常、この分野の値は最後に首尾よく減圧されたヘッダーのMaster Sequence Number(MSN)に対応しています、フィードバック情報が適用される圧縮文脈(CID)のために。

   Chaining of Items

項目の推論

      A chain of items groups fields based on similar characteristics.
      ROHCv2 defines chain items for static, dynamic and irregular
      fields.  Chaining is achieved by appending an item to the chain
      for each header in its order of appearance in the uncompressed
      packet.  Chaining is useful to construct compressed headers from
      an arbitrary number of any of the protocol headers for which a
      ROHCv2 profile defines a compressed format.

項目のチェーンは同様の特性に基づく分野から構成されています。 ROHCv2は静的で、ダイナミックで不規則な分野とチェーンの品目を定義します。 推論は、解凍されたパケットの外観の注文における各ヘッダーのために商品をチェーンに追加することによって、達成されます。 推論は、ROHCv2プロフィールが圧縮形式を定義するプロトコルヘッダーのどれかの特殊活字の数字から圧縮されたヘッダーを組み立てるために役に立ちます。

   CRC-3 Control Fields Validation

CRC-3制御フィールド合法化

      The CRC-3 control fields validation refers to the validation of
      the control fields.  This validation is performed by the
      decompressor when it receives a Compressed (CO) header that
      contains a 3-bit Cyclic Redundancy Check (CRC) calculated over
      control fields.  This 3-bit CRC covers controls fields carried in
      the CO header as well as specific control fields in the context.
      In the formal definition of the header formats, this 3-bit CRC is
      labeled "control_crc3" and uses the control_crc3_encoding (See
      also Section 6.6.11).

CRC-3制御フィールド合法化は制御フィールドの合法化について言及します。 制御フィールドの上で計算された3ビットのCyclic Redundancy Check(CRC)を含むCompressed(CO)ヘッダーを受けるとき、この合法化は減圧装置によって実行されます。 この3ビットのCRCは文脈の特定の制御フィールドと同様にCOヘッダーで運ばれたコントロール野原を覆っています。 ヘッダー形式の公式の定義では、この3ビットのCRCは「_crc3"を制御してください。そうすれば、用途はコントロール_crc3_コード化を制御(また、セクション6.6.11を見てください)」とラベルされます。

   Delta

デルタ

      The delta refers to the difference in the absolute value of a
      field between two consecutive packets being processed by the same
      compression endpoint.

デルタは同じ圧縮終点によって処理される2つの連続したパケットの間の分野の絶対値の違いについて言及します。

   Reordering Depth

深さをReorderingします。

      The number of packets by which a packet is received late within
      its sequence due to reordering between the compressor and the
      decompressor, i.e., reordering between packets associated with the
      same context (CID).  See the definition of sequentially late
      packet below.

パケットが遅くコンプレッサーと減圧装置の間で再命令するため系列の中に受け取られるパケットの数、すなわち、パケットの間の再命令は同じ文脈(CID)と交際しました。 以下の連続して遅いパケットの定義を見てください。

Pelletier & Sandlund        Standards Track                     [Page 5]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[5ページ]

   ROHCv2 Header Types

ROHCv2ヘッダータイプ

      ROHCv2 profiles use two different header types: the Initialization
      and Refresh (IR) header type, and the Compressed (CO) header type.

ROHCv2プロフィールは2つの異なったヘッダータイプを使用します: 初期設定、Refresh(IR)ヘッダータイプ、およびCompressed(CO)ヘッダータイプ。

   Sequentially Early Packet

連続して早いパケット

      A packet that reaches the decompressor before one or several
      packets that were delayed over the channel, where all of the said
      packets belong to the same header-compressed flow and are
      associated to the same compression context (CID).  At the time of
      the arrival of a sequentially early packet, the packet(s) delayed
      on the link cannot be differentiated from lost packet(s).

1時以前減圧装置に達するパケットか前述のパケットのすべてが同じヘッダーによって圧縮された流れに属すチャンネルの上に遅れて、同じ圧縮文脈(CID)に関連づけられるいくつかのパケット。 連続して早いパケットの到着時点で、無くなっているパケットとリンクに遅れるパケットは区別できません。

   Sequentially Late Packet

連続して遅いパケット

      A packet is late within its sequence if it reaches the
      decompressor after one or several other packets belonging to the
      same CID have been received, although the sequentially late packet
      was sent from the compressor before the other packet(s).  How the
      decompressor detects a sequentially late packet is outside the
      scope of this specification, but it can for example use the MSN
      for this purpose.

1か同じCIDに属す他のいくつかのパケットを受け取った後に減圧装置に達するなら、パケットは系列の中で遅れています、他のパケットの前のコンプレッサーから連続して遅いパケットを送りましたが。 この仕様の範囲の外に減圧装置がどう連続して遅いパケットを検出するかがありますが、例えば、それはこのためにMSNを使用できます。

   Timestamp Stride (ts_stride)

タイムスタンプストライド(t_ストライド)

      The timestamp stride (ts_stride) is the expected increase in the
      timestamp value between two RTP packets with consecutive sequence
      numbers.  For example, for a media encoding with a sample rate of
      8 kHz producing one frame every 20 ms, the RTP timestamp will
      typically increase by n * 160 (= 8000 * 0.02), for some integer n.

タイムスタンプストライド(t_ストライド)は連続した一連番号がある2つのRTPパケットの間のタイムスタンプ値の予想された増加です。 通常、8kHzの見本郵送料率が1つを生産しているメディアコード化が20ms毎を縁どっているので例えばRTPタイムスタンプはn*160(8000*0.02と等しい)増加するでしょう、何らかの整数nのために。

   Time Stride (time_stride)

時間ストライド(時間_ストライド)

      The time stride (time_stride) is the time interval equivalent to
      one ts_stride, e.g., 20 ms in the example for the RTP timestamp
      increment above.

時間ストライド(時間_ストライド)は1つのt_ストライドに同等な時間間隔です、例えば、RTPタイムスタンプ増分のための上記の例の20ms。

Pelletier & Sandlund        Standards Track                     [Page 6]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[6ページ]

3.  Acronyms

3. 頭文字語

   This section lists most acronyms used for reference, in addition to
   those defined in [RFC4995].

このセクションは[RFC4995]で定義されたものに加えて参照に使用されるほとんどの頭文字語を記載します。

   AH       Authentication Header.
   ESP      Encapsulating Security Payload.
   GRE      Generic Routing Encapsulation.
   FC       Full Context state (decompressor).
   IP       Internet Protocol.
   LSB      Least Significant Bits.
   MINE     Minimal Encapsulation in IP.
   MSB      Most Significant Bits.
   MSN      Master Sequence Number.
   NC       No Context state (decompressor).
   OA       Optimistic Approach.
   RC       Repair Context state (decompressor).
   ROHC     Header compression framework (RFC 4995).
   ROHCv2   Set of header compression profiles defined in this document.
   RTP      Real-time Transport Protocol.
   SSRC     Synchronization source. Field in RTP header.
   CSRC     Contributing source.  The RTP header contains an optional
            list of contributing sources.
   TC       Traffic Class.  Field in the IPv6 header.  See also TOS.
   TOS      Type Of Service.  Field in the IPv4 header.  See also TC.
   TS       RTP Timestamp.
   TTL      Time to Live.  Field in the IPv4 header.
   UDP      User Datagram Protocol.
   UDP-Lite User Datagram Protocol Lite.

ああ、認証ヘッダー。 セキュリティ有効搭載量を要約する超能力。 GRE一般ルーティングのカプセル化。 FC Full Contextは(減圧装置)を述べます。 IPインターネットプロトコル。 LSB最下位ビット。 IPで最小量のカプセル化を採掘してください。 MSB最上位ビット。 MSNは系列番号を習得します。 NCノーContextは(減圧装置)を述べます。 OAの楽観的なアプローチ。 RC Repair Contextは(減圧装置)を述べます。 ROHC Header圧縮枠組み(RFC4995)。 本書では定義されたヘッダー圧縮プロフィールのROHCv2 Set。 RTPのリアルタイムのトランスポート・プロトコル。 SSRC Synchronizationソース。 RTPヘッダーでは、さばきます。 CSRC Contributingソース。 RTPヘッダーは貢献しているソースの任意のリストを含んでいます。 Tc交通のクラス。 IPv6ヘッダーでは、さばきます。 また、TOSを見てください。 サービスのTOSタイプ。 IPv4ヘッダーでは、さばきます。 また、TCを見てください。 t、RTPタイムスタンプ。 生きるTTL時間。 IPv4ヘッダーでは、さばきます。 UDPユーザー・データグラム・プロトコル。 UDP-Liteユーザー・データグラム・プロトコルLite。

4.  Background (Informative)

4. バックグラウンド(有益)です。

   This section provides background information on the compression
   profiles defined in this document.  The fundamentals of general
   header compression and of the ROHC framework may be found in sections
   3 and 4 of [RFC4995], respectively.  The fundamentals of the formal
   notation for ROHC are defined in [RFC4997].  [RFC4224] describes the
   impacts of out-of-order delivery on profiles based on [RFC3095].

このセクションは本書では定義された圧縮プロフィールに関する基礎的な情報を提供します。 一般的なヘッダー圧縮とROHC枠組みの原理は[RFC4995]のセクション3と4でそれぞれ見つけられるかもしれません。 ROHCに、正式な記法の原理は[RFC4997]で定義されます。 [RFC4224]は[RFC3095]に基づくプロフィールの上に不適切な配送の影響について説明します。

4.1.  Classification of Header Fields

4.1. ヘッダーフィールドの分類

   Section 3.1 of [RFC4995] explains that header compression is possible
   due to the fact that there is much redundancy between field values
   within the headers of a packet, especially between the headers of
   consecutive packets.

[RFC4995]のセクション3.1は、ヘッダー圧縮がパケットのヘッダーの中に分野値の間には、多くの冗長があるという事実のために可能であると説明します、連続したパケットのヘッダーの特に間で。

   Appendix A lists and classifies in detail all the header fields
   relevant to this document.  The appendix concludes with

付録Aは、詳細にこのドキュメントに関連しているすべてのヘッダーフィールドを記載して、分類します。 付録は締めくくります。

Pelletier & Sandlund        Standards Track                     [Page 7]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[7ページ]

   recommendations on how the various fields should be handled by header
   compression algorithms.

多岐がヘッダー圧縮アルゴリズムでどう扱われるべきであるかにおける推薦。

   The main conclusion is that most of the header fields can easily be
   compressed away since they never or seldom change.  A small number of
   fields however need more sophisticated mechanisms.

主な結論はめったにない変化しないので容易にヘッダーフィールドの大部分を遠くに圧縮できるということです。 しかしながら、少ない数の分野が、より精巧なメカニズムを必要とします。

   These fields are:

これらの分野は以下の通りです。

   - IPv4 Identification        (16 bits) - IP-ID
   - ESP Sequence Number        (32 bits) - ESP SN
   - UDP Checksum               (16 bits) - Checksum
   - UDP-Lite Checksum          (16 bits) - Checksum
   - UDP-Lite Checksum Coverage (16 bits) - CCov
   - RTP Marker                 ( 1 bit ) - M-bit
   - RTP Sequence Number        (16 bits) - RTP SN
   - RTP Timestamp              (32 bits) - TS

- IPv4 Identification(16ビット)--IP-ID--超能力Sequence Number(32ビット)--ESP SN--UDP Checksum(16ビット)--チェックサム--UDP-Lite Checksum(16ビット)--チェックサム--UDP-Lite Checksum Coverage(16ビット)--CCov--RTP Marker(1ビット)--M-ビット--RTP Sequence Number(16ビット)--RTP SN--RTP Timestamp(32ビット)--TS

   In particular, for RTP, the analysis in Appendix A reveals that the
   values of the RTP Timestamp (TS) field usually have a strong
   correlation to the RTP Sequence Number (SN), which increments by one
   for each packet emitted by an RTP source.  The RTP M-bit is expected
   to have the same value most of the time, but it needs to be
   communicated explicitly on occasion.

RTPに関して、特に、Appendix Aでの分析は、通常、RTP Timestamp(TS)分野の値がRTP Sequence Number(SN)に強い相関関係を持っているのを明らかにします。(各パケットあたり1つによる増分はRTPソースでRTP Sequence Numberを放ちました)。 RTP M-ビットには同じ値がたいていあると予想されますが、それは、時々明らかにコミュニケートする必要があります。

   For UDP, the Checksum field cannot be inferred or recalculated at the
   receiving end without violating its end-to-end properties, and is
   thus sent as-is when enabled (mandatory with IPv6).  The same applies
   to the UDP-Lite Checksum (mandatory with both IPv4 and IPv6), while
   the UDP-Lite Checksum Coverage may in some cases be compressible.

UDPに関しては、Checksum野原を犠牲者に終わりから終わりへの特性に違反しないで推論できないか、再計算できないで、可能にすると(IPv6によって義務的な)、このようにしてそのままで送ります。 同じくらいはUDP-Lite Checksum(IPv4とIPv6の両方によって義務的な)に適用されます、UDP-Lite Checksum Coverageがいくつかの場合圧縮性であるかもしれませんが。

   For IPv4, a similar correlation as that of the RTP TS to the RTP SN
   is often observed between the Identifier field (IP-ID) and the master
   sequence number (MSN) used for compression (e.g., the RTP SN when
   compressing RTP headers).

IPv4に関しては、RTP SNへのRTP TSのものとしての同様の相関関係がIdentifier分野(IP-ID)と圧縮に使用されるマスター一連番号(MSN)の間でしばしば観測される、(例えば、RTP SN、いつ、RTPヘッダーを圧縮します)

4.2.  Improvements of ROHCv2 over RFC 3095 Profiles

4.2. RFC3095プロフィールの上のROHCv2の改良

   The ROHCv2 profiles can achieve compression efficiency and robustness
   that are both at least equivalent to RFC 3095 profiles [RFC3095],
   when used under the same operating conditions.  In particular, the
   size and bit layout of the smallest compressed header (i.e., PT-0
   format U/O-0 in RFC 3095, and pt_0_crc3 in ROHCv2) are identical.

ROHCv2プロフィールはともにRFC3095プロフィール[RFC3095]に少なくとも同等な圧縮効率と丈夫さを達成できます、同じ運転条件の下で使用されると。 最も小さい圧縮されたヘッダー(すなわち、PT-0はRFC3095でU/O-0をフォーマットして、ROHCv2で_Pt0_crc3をフォーマットする)のサイズと噛み付いているレイアウトは特に、同じです。

   There are a number of differences and improvements between profiles
   defined in this document and their earlier version defined in RFC
   3095.  This section provides an overview of some of the most
   significant improvements:

本書では定義されたプロフィールとRFC3095で定義されたそれらの以前のバージョンの間には、多くの違いと改良があります。 このセクションは最も顕著な改良のいくつかの概観を提供します:

Pelletier & Sandlund        Standards Track                     [Page 8]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[8ページ]

   Tolerance to reordering

再命令への寛容

      Profiles defined in RFC 3095 require that the channel between
      compressor and decompressor provide in-order delivery between
      compression endpoints.  ROHCv2 profiles, however, can handle
      robustly and efficiently a limited amount of reordering after the
      compression point as part of the compression algorithm itself.  In
      addition, this improved support for reordering makes it possible
      for ROHCv2 profiles to handle prelink reordering more efficiently.

RFC3095で定義されたプロフィールは、コンプレッサーと減圧装置の間のチャンネルが圧縮終点の間にオーダーにおける配送を提供するのを必要とします。 しかしながら、ROHCv2プロフィールは強壮に効率的に圧密点の後に圧縮アルゴリズム自体の一部として再命令する数量限定を扱うことができます。 さらに、再命令するこの改良されたサポートで、ROHCv2プロフィールが、より効率的にprelink reorderingを扱うのが可能になります。

   Operational logic

操作上の論理

      Profiles in RFC 3095 define multiple operational modes, each with
      different updating logic and compressed header formats.  ROHCv2
      profiles operate in unidirectional operation until feedback is
      first received for a context (CID), at which point bidirectional
      operation is used; the formats are independent of what operational
      logic is used.

RFC3095のプロフィールはそれぞれ異なったアップデート論理と圧縮されたヘッダー形式で複数の操作上のモードを定義します。 ROHCv2プロフィールは単方向の操作で最初に文脈(CID)のためにフィードバックを受け取るまで運転して、双方向の操作はそのポイントで使用されています。 どんな操作上の論理が使用されるかから形式は独立しています。

   IP extension header

IP拡張ヘッダー

      Profiles in RFC 3095 compress IP Extension headers using list
      compression.  ROHCv2 profiles instead treat extension headers in
      the same manner as other protocol headers, i.e., using the
      chaining mechanism; it thus assumes that extension headers are not
      added or removed during the lifetime of a context (CID), otherwise
      compression has to be restarted for this flow.

RFC3095のプロフィールは、リスト圧縮を使用することでIP Extensionヘッダーを圧縮します。 すなわち、ROHCv2プロフィールは代わりに推論メカニズムを使用することで他のプロトコルヘッダーとして同じ方法による拡張ヘッダーを扱います。 その結果、それは拡張ヘッダーが文脈(CID)の生涯加えられもしませんし、取り除かれもしないで、さもなければ、圧縮がこの流れのために再開されなければならないと仮定します。

   IP encapsulation

IPカプセル化

      Profiles in RFC 3095 can compress at most two levels of IP
      headers.  ROHCv2 profiles can compress an arbitrary number of IP
      headers.

RFC3095のプロフィールは2つのレベルのIPヘッダーを高々圧縮できます。 ROHCv2プロフィールはIPヘッダーの特殊活字の数字を圧縮できます。

   List compression

リスト圧縮

      ROHCv2 profiles do not support reference-based list compression.

ROHCv2プロフィールは参照ベースのリスト圧縮を支持しません。

   Robustness and repairs

丈夫さと修理

      ROHCv2 profiles do not define a format for the IR-DYN packet;
      instead, each profile defines a compressed header that can be used
      to perform a more robust context repair using a 7-bit CRC
      verification.  This also implies that only the IR header can
      change the association between a CID and the profile it uses.

ROHCv2プロフィールはIR-DYNパケットのために書式を定義しません。 代わりに、各プロフィールは7ビットのCRC検証を使用することで、より体力を要している文脈修理を実行するのに使用できる圧縮されたヘッダーを定義します。 また、これは、IRヘッダーだけがCIDとそれが使用するプロフィールとの協会を変えることができるのを含意します。

Pelletier & Sandlund        Standards Track                     [Page 9]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[9ページ]

   Feedback

フィードバック

      ROHCv2 profiles mandate a CRC in the format of the FEEDBACK-2,
      while this is optional in RFC 3095.  A different set of feedback
      options is also used in ROHCv2 compared to RFC 3095.

ROHCv2プロフィールはFEEDBACK-2の形式でCRCを強制しますが、これはRFC3095で任意です。 また、RFC3095と比べて、異なったセットのフィードバックオプションはROHCv2で使用されます。

4.3.  Operational Characteristics of ROHCv2 Profiles

4.3. ROHCv2プロフィールの操作上の特性

   Robust header compression can be used over different link
   technologies.  Section 4.4 of [RFC4995] lists the operational
   characteristics of the ROHC channel.  The ROHCv2 profiles address a
   wide range of applications, and this section summarizes some of the
   operational characteristics that are specific to these profiles.

異なったリンク技術の上で体力を要しているヘッダー圧縮を使用できます。 [RFC4995]のセクション4.4はROHCチャンネルの操作上の特性を記載します。 ROHCv2プロフィールはさまざまなアプリケーションを記述します、そして、このセクションはこれらのプロフィールに特定の操作上の特性のいくつかをまとめます。

   Packet length

パケット長

      ROHCv2 profiles assume that the lower layer indicates the length
      of a compressed packet.  ROHCv2 compressed headers do not contain
      length information for the payload.

ROHCv2プロフィールは、下層が圧縮されたパケットの長さを示すと仮定します。 圧縮されたヘッダーがするROHCv2はペイロードのための長さの情報を含んでいません。

   Out-of-order delivery between compression endpoints

圧縮終点の間の不適切な配送

      The definition of the ROHCv2 profiles places no strict requirement
      on the delivery sequence between the compression endpoints, i.e.,
      packets may be received in a different order than the compressor
      has sent them and still have a fair probability of being
      successfully decompressed.

ROHCv2プロフィールの定義は圧縮終点の間にどんな厳しい要件も配送系列に置きません、すなわち、コンプレッサーがそれらを送って、まだ首尾よく減圧されるという公正な確率に送るのと異なったオーダーにパケットを受け取るかもしれません。

      However, frequent out-of-order delivery and/or significant
      reordering depth will negatively impact the compression
      efficiency.  More specifically, if the compressor can operate
      using a proper estimate of the reordering characteristics of the
      path between the compression endpoints, larger headers can be sent
      more often to increase the robustness against decompression
      failures due to out-of-order delivery.  Otherwise, the compression
      efficiency will be impaired from an increase in the frequency of
      decompression failures and recovery attempts.

しかしながら、頻繁な不適切な配送、そして/または、重要な再命令の深さは否定的に圧縮効率に影響を与えるでしょう。 より明確に、コンプレッサーが圧縮終点の間の経路の再命令の特性の適切な見積りを使用することで作動できるなら、よりしばしば不適切な配送のため減圧失敗に対して丈夫さを増加させるように、より大きいヘッダーを送ることができます。 さもなければ、圧縮効率は減圧失敗と回復試みの頻度の増加から損なわれるでしょう。

5.  Overview of the ROHCv2 Profiles (Informative)

5. ROHCv2プロフィールの概観(有益)です。

   This section provides an overview of concepts that are important and
   useful to the ROHCv2 profiles.  These concepts may be used as
   guidelines for implementations but they are not part of the normative
   definition of the profiles, as these concepts relate to the
   compression efficiency of the protocol without impacting the
   interoperability characteristics of an implementation.

このセクションはROHCv2プロフィールに重要で役に立つ概念の概観を提供します。 これらの概念は実現にガイドラインとして使用されるかもしれませんが、それらはプロフィールの標準の定義の一部ではありません、これらの概念が実現の相互運用性の特性に影響を与えないでプロトコルの圧縮効率に関連するとき。

Pelletier & Sandlund        Standards Track                    [Page 10]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[10ページ]

5.1.  Compressor Concepts

5.1. コンプレッサー概念

   Header compression can be conceptually characterized as the
   interaction of a compressor with a decompressor state machine, one
   per context.  The responsibility of the compressor is to convey the
   information needed to successfully decompress a packet, based on a
   certain confidence regarding the state of the decompressor context.

減圧装置州のマシン、1文脈あたり1つとのコンプレッサーの相互作用として概念的にヘッダー圧縮を特徴付けることができます。 コンプレッサーの責任は首尾よくパケットを減圧するのに必要である情報を伝えることです、減圧装置文脈の状態に関する、ある信用に基づいて。

   This confidence is obtained from the frequency and the type of
   information the compressor sends when updating the decompressor
   context from the optimistic approach (Section 5.1.1), and optionally
   from feedback messages (See Section 6.9), received from the
   decompressor.

楽観的なアプローチ(セクション5.1.1)から減圧装置文脈を任意にアップデートするときコンプレッサーがフィードバックメッセージから送る頻度と情報の種類からこの信用を得ます(セクション6.9を見てください)、減圧装置から、受け取られています。

5.1.1.  Optimistic Approach

5.1.1. 楽観的なアプローチ

   A compressor always uses the optimistic approach when it performs
   context updates.  The compressor normally repeats the same type of
   update until it is fairly confident that the decompressor has
   successfully received the information.  If the decompressor
   successfully receives any of the headers containing this update, the
   state will be available for the decompressor to process smaller
   compressed headers.

文脈最新版を実行するとき、コンプレッサーはいつも楽観的なアプローチを使用します。 減圧装置が首尾よく知らせを聞いたのは、かなり自信があるまで、通常、コンプレッサーが同じタイプのアップデートを繰り返します。 減圧装置が首尾よくこのアップデートを含むヘッダーのどれかを受けると、減圧装置が、より小さい圧縮されたヘッダーを処理するように、状態は利用可能になるでしょう。

   If field X in the uncompressed header changes value, the compressor
   uses a header type that contains an encoding of field X until it has
   gained confidence that the decompressor has received at least one
   packet containing the new value for X.  The compressor normally
   selects a compressed format with the smallest header that can convey
   the changes needed to achieve confidence.

解凍されたヘッダーの分野Xが値を変えるなら、コンプレッサーは減圧装置がX.のために新しい値を含む少なくとも1つのパケットを受けたのが自信を得るまで分野Xのコード化を含むヘッダータイプを使用します。通常、コンプレッサーは信用を達成するのが必要である変化を運ぶことができる最も小さいヘッダーとの圧縮形式を選択します。

   The number of repetitions that is needed to obtain this confidence is
   normally related to the packet loss and out-of-order delivery
   characteristics of the link where header compression is used; it is
   thus not defined in this document.  It is outside the scope of this
   specification and is left to implementors to decide.

通常、この信用を得るのに必要である繰返し数はヘッダー圧縮が使用されているリンクのパケット損失と不適切な配送の特性に関連します。 それはこのようにして本書では定義されません。 それは、この仕様の範囲の外にあって、決めるのが作成者に残されます。

5.1.2.  Tradeoff between Robustness to Losses and to Reordering

5.1.2. 損失と、そして、Reorderingへの丈夫さの間の見返り

   The ability of a header compression algorithm to handle sequentially
   late packets is mainly limited by two factors: the interpretation
   interval offset of the sliding window used for lsb encoded fields
   [RFC4997], and the optimistic approach (See Section 5.1.1) for seldom
   changing fields.

ヘッダー圧縮アルゴリズムが連続して遅いパケットを扱う能力は2つの要素によって主に制限されます: lsbに使用される引窓の解釈間隔オフセットは、めったに職業を替えないように分野[RFC4997]、および楽観的なアプローチをコード化しました(セクション5.1.1を見ます)。

Pelletier & Sandlund        Standards Track                    [Page 11]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[11ページ]

   lsb encoded fields:

lsbは分野をコード化しました:

      The interpretation interval offset specifies an upper limit for
      the maximum reordering depth, by which is it possible for the
      decompressor to recover the original value of a dynamically
      changing (i.e., sequentially incrementing) field that is encoded
      using a window-based lsb encoding.  Its value is typically bound
      to the number of lsb compressed bits in the compressed header
      format, and thus grows with the number of bits transmitted.
      However, the offset and the lsb encoding only provide robustness
      for the field that it compresses, and (implicitly) for other
      sequentially changing fields that are derived from that field.

解釈間隔オフセットは深さを再命令する最大に上限を指定します、どれがそれであるかで、窓のベースのlsbコード化を使用することでコード化されるダイナミックに変化している(すなわち、連続して増加します)分野の元の値を回復する減圧装置において、可能です。 値はlsbの数へのバウンドが通常、圧縮されたヘッダー形式でビットを圧縮して、その結果、ビットの数に応じて伝えられるのに成長するということです。 しかしながら、オフセットとlsbコード化はそれが圧縮する分野に丈夫さを提供するだけです、そして、(それとなく、)他の連続して変化している分野において、その分野からそれを得ます。

      This is shown in the figure below:

これは以下の図に示されます:

         <--- interpretation interval (size is 2^k) ---->
         |------------------+---------------------------|
      v_ref-p             v_ref              v_ref + (2^k-1) - p
       Lower                                          Upper
       Bound                                          Bound
         <--- reordering --> <--------- losses --------->

<。--- 解釈間隔(サイズは2^kです)---->|------------------+---------------------------| _+ _審判v_審判(2^k-1)に対する審判p--p Lower Upper Bound Bound<に対して--- 再命令--><。--------- 損失--------->。

         where p is the maximum negative delta, corresponding to the
         maximum reordering depth for which the lsb encoding can recover
         the original value of the field;

pが最大の否定的デルタであるところでは深さを再命令するlsbコード化が分野の元の値を回復できる最大に対応すること。

         where (2^k-1) - p is the maximum positive delta, corresponding
         to the maximum number of consecutive losses for which the lsb
         encoding can recover the original value of the field;

どこ(2^k-1)--pは最大の積極的なデルタです、lsbコード化が分野の元の値を回復できる連敗の最大数に対応しています。

         where v_ref is the reference value, as defined in the lsb
         encoding method in [RFC4997].

どこに、基準値は方法をコード化するlsbで定義されるように[RFC4997]に_審判に反対していますか?

      There is thus a tradeoff between the robustness against reordering
      and the robustness against packet losses, with respect to the
      number of MSN bits needed and the distribution of the
      interpretation interval between negative and positive deltas in
      the MSN.

見返りはその結果、パケット損失に反対して再命令に対する丈夫さと丈夫さの間にいます、MSNの否定的で積極的なデルタの間のビットが必要としたMSNの数と解釈間隔の分配に関して。

   Seldom changing fields

めったに職業を替えません。

      The optimistic approach (Section 5.1.1) provides the upper limit
      for the maximum reordering depth for seldom changing fields.

楽観的なアプローチ(セクション5.1.1)は、めったに職業を替えないように深さを再命令する最大に上限を提供します。

   There is thus a tradeoff between compression efficiency and
   robustness.  When only information on the MSN needs to be conveyed to
   the decompressor, the tradeoff relates to the number of compressed

その結果、圧縮効率と丈夫さの間には、見返りがあります。 MSNの唯一の情報が、減圧装置まで運ばれる必要があるとき、見返りは圧縮されることの数に関連します。

Pelletier & Sandlund        Standards Track                    [Page 12]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[12ページ]

   MSN bits in the compressed header format.  Otherwise, the tradeoff
   relates to the implementation of the optimistic approach.

圧縮されたヘッダー形式のMSNビット。 さもなければ、見返りは楽観的なアプローチの実現に関連します。

   In particular, compressor implementations should adjust their
   optimistic approach strategy to match both packet loss and reordering
   characteristics of the link over which header compression is applied.
   For example, the number of repetitions for each update of a non-lsb
   encoded field can be increased.  The compressor can ensure that each
   update is repeated until it is reasonably confident that at least one
   packet containing the change has reached the decompressor before the
   first packet sent after this sequence.

特に、コンプレッサー実現は、パケット損失とヘッダー圧縮が付けられるリンクの再命令の特性の両方を合わせるようにそれらの楽観的なアプローチ戦略を調整するべきです。 例えば、非lsbのコード化された分野のそれぞれのアップデートの繰返し数は増加できます。 コンプレッサーは、この系列の後に発信する前に変化を含む少なくとも1つのパケットが減圧装置に達したのに、合理的に自信があるまで各アップデートが繰り返されるのを確実にすることができます。

5.1.3.  Interactions with the Decompressor Context

5.1.3. 減圧装置文脈との相互作用

   The compressor normally starts compression with the initial
   assumption that the decompressor has no useful information to process
   the new flow, and sends Initialization and Refresh (IR) packets.

コンプレッサーは、通常、新しい流れを処理するために減圧装置には役に立つ情報が全くないという初期の仮定から圧縮を始めて、(IR)パケットを初期設定とRefreshに送ります。

   Initially, when sending the first IR packet for a compressed flow,
   the compressor does not expect to receive feedback for that flow,
   until such feedback is first received.  At this point, the compressor
   may then assume that the decompressor will continue to send feedback
   in order to repair its context when necessary.  The former is
   referred to as unidirectional operation, while the latter is called
   bidirectional operation.

初めは圧縮された流れのために最初のIRパケットを送るとき、コンプレッサーは、その流れのために反響を調べると予想しません、最初にそのようなフィードバックを受け取るまで。 そして、ここに、コンプレッサーは、減圧装置が、必要であるときに、文脈を修理するためにフィードバックを送り続けると仮定するかもしれません。 前者は単方向の操作と呼ばれますが、後者は双方向の操作と呼ばれます。

   The compressor can then adjust the compression level (i.e., what
   header format it selects) based on its confidence that the
   decompressor has the necessary information to successfully process
   the compressed headers that it selects.

そして、コンプレッサーは首尾よく、それが選ぶ圧縮されたヘッダーを処理するために減圧装置には必要事項があるという信用に基づく圧縮レベル(すなわち、それが選択するすべてのヘッダー形式)を調整できます。

   In other words, the responsibilities of the compressor are to ensure
   that the decompressor operates with state information that is
   sufficient to successfully decompress the type of compressed
   header(s) it receives, and to allow the decompressor to successfully
   recover that state information as soon as possible otherwise.  The
   compressor therefore selects the type of compressed header based on
   the following factors:

言い換えれば、コンプレッサーの責任は減圧装置が首尾よくそれが受ける圧縮されたヘッダーのタイプを減圧して、そうでなければ、減圧装置ができるだけ早く首尾よくその州の情報を回復するのを許容するために十分な州の情報で作動するのを保証することです。 したがって、コンプレッサーは以下の要素に基づく圧縮されたヘッダーのタイプを選びます:

   o  the outcome of the encoding method applied to each field;

o 各分野に適用されたコード化方法の結果。

   o  the optimistic approach, with respect to the characteristics of
      the channel;

o チャンネルの特性に関する楽観的なアプローチ。

   o  the type of operation (unidirectional or bidirectional), and if in
      bidirectional operation, feedback received from the decompressor
      (ACKs, NACKs, STATIC-NACK, and options).

o 双方向の操作で操作(単方向の、または、双方向の)のタイプであり、フィードバックは減圧装置(ACKs、NACKs、STATIC-ナック、およびオプション)から受信されました。

Pelletier & Sandlund        Standards Track                    [Page 13]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[13ページ]

   Encoding methods normally use previous value(s) from a history of
   packets whose headers it has previously compressed.  The optimistic
   approach is meant to ensure that at least one compressed header
   containing the information to update the state for a field is
   received.  Finally, feedback indicates what actions the decompressor
   has taken with respect to its assumptions regarding the validity of
   its context (Section 5.2.2); it indicates what type of compressed
   header the decompressor can or cannot decompress.

通常、方法をコード化して、それが以前にヘッダーを圧縮したパケットの歴史から前の値を使用してください。 楽観的なアプローチは、状態を分野にアップデートする情報を含む少なくとも1個の圧縮されたヘッダーが受け取られているのを保証することになっています。 最終的に、フィードバックは、減圧装置が文脈(セクション5.2.2)の正当性に関する仮定に関してどんな行動を取ったかを示します。 それは、減圧装置がどんなタイプの圧縮されたヘッダーを減圧するか、または減圧できないかを示します。

   The decompressor has the means to detect decompression failures for
   any compressed (CO) header format, using the CRC verification.
   Depending on the frequency and/or on the type of the failure, it
   might send a negative acknowledgement (NACK) or an explicit request
   for a complete context update (STATIC-NACK).  However, the
   decompressor does not have the means to identify the cause of the
   failure, and in particular the decompression of what field(s) is
   responsible for the failure.  The compressor is thus always
   responsible for determining the most suitable response to a negative
   acknowledgement, using the confidence it has in the state of the
   decompressor context, when selecting the type of compressed header it
   will use when compressing a header.

減圧装置には、CRC検証を使用して、どんな圧縮された(CO)ヘッダー形式のためにも減圧失敗を検出する手段があります。 頻度失敗のタイプに頼っていて、それは完全な文脈最新版(STATIC-ナック)を求める否定的承認(ナック)か明白な要求を送るかもしれません。 しかしながら、減圧装置には、失敗の原因、および特にどんな分野が失敗に原因となるかに関する減圧を特定する手段がありません。 その結果、コンプレッサーはいつも否定的承認への最も適当な応答を決定するのに原因となります、それが減圧装置文脈の状態に持っている信用を使用してヘッダーを圧縮するときそれが使用する圧縮されたヘッダーのタイプを選んで。

5.2.  Decompressor Concepts

5.2. 減圧装置概念

   The decompressor normally uses the last received and successfully
   validated (IR packets) or verified (CO packets) header as the
   reference for future decompression.

通常、減圧装置は今後の減圧の参照として首尾よく最後に受け取られた、有効にされたか(IRパケット)、または確かめられた(COパケット)ヘッダーを使用します。

   The decompressor is responsible for verifying the outcome of every
   decompression attempt, to update its context when successful, and
   finally to request context repairs by making coherent usage of
   feedback once it has started using feedback.

減圧装置はいったんフィードバックを使用し始めたとフィードバックの論理的な用法を作ることによって、うまくいくとき文脈をアップデートするあらゆる減圧試みの結果について確かめて、最終的な要求文脈修理に原因となります。

   Specifically, the outcome of every decompression attempt is verified
   using the CRC present in the compressed header; the decompressor
   updates the context information when this outcome is successfully
   verified; finally, if the decompressor uses feedback once for a
   compressed flow, then it will continue to do so for as long as the
   corresponding context is associated with the same profile.

明確に、あらゆる減圧試みの結果は圧縮されたヘッダーの現在のCRCを使用することで確かめられます。 減圧装置はこの結果がいつ首尾よく確かめられるかという文脈情報をアップデートします。 減圧装置が圧縮された流れに一度フィードバックを使用すると、それは、対応する文脈が同じプロフィールに関連している限り、最終的に、そうし続けるでしょう。

5.2.1.  Decompressor State Machine

5.2.1. 減圧装置州のマシン

   The decompressor operation may be represented as a state machine
   defining three states: No Context (NC), Repair Context (RC), and Full
   Context (FC).

減圧装置操作は3つの州を定義する州のマシンとして表されるかもしれません: 関係(NC)、修理関係(RC)、および完全な関係がありません(FC)。

   The decompressor starts without a valid context, the NC state.  Upon
   receiving an IR packet, the decompressor validates the integrity of

減圧装置は有効な文脈、NC州なしで始まります。 IRパケットを受けると、減圧装置は保全を有効にします。

Pelletier & Sandlund        Standards Track                    [Page 14]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[14ページ]

   its header using the CRC-8 validation.  If the IR header is
   successfully validated, the decompressor updates the context and uses
   this header as the reference header, and moves to the FC state.  Once
   the decompressor state machine has entered the FC state, it does not
   normally leave; only repeated decompression failures will force the
   decompressor to transit downwards to a lower state.  When context
   damage is detected, the decompressor moves to the repair context (RC)
   state, where it stays until it successfully verifies a decompression
   attempt for a compressed header with a 7-bit CRC or until it
   successfully validates an IR header.  When static context damage is
   detected, the decompressor moves back to the NC state.

CRC-8合法化を使用しているヘッダー。 IRヘッダーが首尾よく有効にされるなら、減圧装置は、参照ヘッダーとして文脈をアップデートして、このヘッダーを使用して、FC状態に動きます。 減圧装置州のマシンがいったんFC状態に入ると、通常、いなくなりません。 繰り返された減圧失敗だけが下向きに下側の状態にトランジットへの減圧装置を強制するでしょう。 文脈損害が検出されるとき、減圧装置は修理文脈(RC)州に動きます。そこでは、圧縮されたヘッダーのために7ビットのCRCと共に減圧試みについて首尾よく確かめるか、または首尾よくIRヘッダーを有効にするまで、それはいます。 静的な文脈損害が検出されるとき、減圧装置はNC州に戻ります。

   Below is the state machine for the decompressor.  Details of the
   transitions between states and decompression logic are given in the
   sub-sections following the figure.

以下に、減圧装置のための州のマシンがあります。 図に従って、州と減圧論理の間の変遷の詳細は小区分で明らかにされます。

  CRC-8(IR) Validation
   +----->----->----->----->----->----->----->----->----->----->----+
   |                                                  CRC-8(IR)     |
   |  !CRC-8(IR) or      CRC-7(CO) or                 or CRC-7(CO)  |
   |  PT not allowed     CRC-8(IR)                    or CRC-3(CO)  |
   |  +--->---+         +--->----->----->----->---+  +--->---->---+ |
   |  |       |         |                         |  |            | |
   |  |       v         |                         v  |            v v
  +-----------------+  +----------------------+  +--------------------+
  | No Context (NC) |  | Repair Context (RC)  |  | Full Context (FC)  |
  +-----------------+  +----------------------+  +--------------------+
    ^ ^ Static Context  | ^ !CRC-7(CO) or  | ^ Context Damage  | |
    | | Damage Detected | | PT not allowed | | Detected        | |
    | +--<-----<-----<--+ +----<------<----+ +--<-----<-----<--+ |
    |                                                            |
    |            Static Context Damage Detected                  |
    +--<-----<-----<-----<-----<-----<-----<-----<-----<---------+

CRC-8(IR)合法化+----->----->----->----->----->----->----->----->----->----->----+ | CRC-8(IR)| | または、CRC-8(IR)かCRC-7(CO)、CRC-7(CO)| | CRC-8(IR)かCRC-3(CO)が許容されなかったPT| | +--->--+ +--->、-、-、-、--、>、-、-、-、--、>、-、-、-、-->--+ +--->、-、-、-->--+ | | | | | | | | | | | v| v| v対+-----------------+ +----------------------+ +--------------------+ | 文脈がありません(NC)。| | 修理文脈(RC)| | 完全な関係(FC)| +-----------------+ +----------------------+ +--------------------+ ^ ^ Static Context | または^!CRC-7(CO)。| ^文脈損害| | | | 検出された損害| | 許容されなかったPT| | 検出されます。| | | +--<。-----<、-、-、-、--<--+ +----<、-、-、-、-、--、<、-、-、--+ +--<。-----<、-、-、-、--<--+ | | | | 検出された静的な文脈損害| +--<。-----<-----<-----<-----<-----<-----<-----<-----<---------+

  where:

どこ:

    CRC-8(IR)        : Successful CRC-8 validation for the IR header.
    !CRC-8(IR)       : Unsuccessful CRC-8 validation for the IR header.
    CRC-7(CO) and/or
    CRC-3(CO)        : Successful CRC verification for the decompression
                       of a CO header, based on the number of CRC bits
                       carried in the CO header.
    !CRC-7(CO)       : Failure to CRC verify the decompression of a CO
                       header carrying a 7-bit CRC.
    PT not allowed   : The decompressor has received a packet type (PT)
                       for which the decompressor's current context does
                       not provide enough valid state information to
                       decompress the packet.

CRC-8(IR): IRヘッダーにおいて、うまくいっているCRC-8合法化。 CRC-8(IR): IRヘッダーのための失敗のCRC-8合法化。 CRC-7(CO)、そして/または、CRC-3(CO): COヘッダーで運ばれたCRCビットの数に基づいたCOヘッダーの減圧のためのうまくいっているCRC検証。 CRC-7(CO): CRCへの失敗は7ビットのCRCを運ぶCOヘッダーの減圧について確かめます。 PTは許容しませんでした: 減圧装置は減圧装置の現在の背景がパケットを減圧できるくらいの有効な州の情報を提供しないパケットタイプ(太平洋標準時の)を受けました。

Pelletier & Sandlund        Standards Track                    [Page 15]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[15ページ]

      Static Context Damage Detected: See definition in Section 5.2.2.

静的な文脈損害は検出しました: セクション5.2.2との定義を見てください。

      Context Damage Detected: See definition in Section 5.2.2.

検出された文脈損害: セクション5.2.2との定義を見てください。

5.2.1.1.  No Context (NC) State

5.2.1.1. 文脈(NC)状態がありません。

   Initially, while working in the No Context (NC) state, the
   decompressor has not yet successfully validated an IR header.

初めは、減圧装置はいいえContext(NC)状態で働いている間、まだ首尾よくIRヘッダーを有効にしていません。

   Attempting decompression:

減圧を試みます:

      In the NC state, only packets carrying sufficient information on
      the static fields (i.e., IR packets) can be decompressed.

NC州では、静的なフィールド(すなわち、IRパケット)に関する十分な情報を運ぶパケットしか減圧できません。

   Upward transition:

上向きの変遷:

      The decompressor can move to the Full Context (FC) state when the
      CRC validation of an 8-bit CRC in an IR header is successful.

IRヘッダーでの8ビットのCRCのCRC合法化がうまくいっているとき、減圧装置はFull Context(FC)状態に動くことができます。

   Feedback logic:

フィードバック論理:

      In the NC state, the decompressor should send a STATIC-NACK if a
      packet of a type other than IR is received, or if an IR header has
      failed the CRC-8 validation, subject to the feedback rate
      limitation as described in Section 5.2.3.

NC州では、IR以外のタイプのパケットが受け取られているか、またはIRヘッダーがフィードバックレート制限を条件としたCRC-8合法化に失敗したなら、減圧装置がセクション5.2.3で説明されるようにSTATIC-ナックを送るべきです。

5.2.1.2.  Repair Context (RC) State

5.2.1.2. 修理文脈(RC)状態

   In the Repair Context (RC) state, the decompressor has successfully
   decompressed packets for this context, but does not have confidence
   that the entire context is valid.

Repair Context(RC)状態では、減圧装置は、この文脈のために首尾よくパケットを減圧しましたが、全体の文脈が有効であるという信用を持っていません。

   Attempting decompression:

減圧を試みます:

      In the RC state, only headers covered by an 8-bit CRC (i.e., IR)
      or CO headers carrying a 7-bit CRC can be decompressed.

RC状態では、8ビットのCRCで覆われたヘッダー(すなわち、IR)だけか7ビットのCRCを運ぶCOヘッダーは減圧できます。

   Upward transition:

上向きの変遷:

      The decompressor can move to the Full Context (FC) state when the
      CRC verification succeeds for a CO header carrying a 7-bit CRC or
      when validation of an 8-bit CRC in an IR header succeeds.

CRC検証が7ビットのCRCを運ぶCOヘッダーのために成功するか、またはIRヘッダーでの8ビットのCRCの合法化が成功すると、減圧装置はFull Context(FC)状態に動くことができます。

   Downward transition:

下向きの変遷:

      The decompressor moves back to the NC state if it assumes static
      context damage.

静的な文脈損害を仮定するなら、減圧装置はNC州に戻ります。

Pelletier & Sandlund        Standards Track                    [Page 16]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[16ページ]

   Feedback logic:

フィードバック論理:

      In the RC state, the decompressor should send a STATIC-NACK when
      CRC-8 validation of an IR header fails, or when a CO header
      carrying a 7-bit CRC fails and static context damage is assumed,
      subject to the feedback rate limitation as described in
      Section 5.2.3.  If any other packet type is received, the
      decompressor should treat it as a CRC verification failure to
      determine if NACK is to be sent.

RC状態では、IRヘッダーのCRC-8合法化が失敗するか、または7ビットのCRCを運ぶCOヘッダーが失敗すると、減圧装置はSTATIC-ナックを送るべきです、そして、静的な文脈損害はセクション5.2.3で説明されるフィードバックレート制限を条件として想定されます。 いかなる他のパケットタイプも受け取られているなら、減圧装置はナックが送られるつもりであるかどうか決定しないCRC検証のこととしてそれを扱うべきです。

5.2.1.3.  Full Context (FC) State

5.2.1.3. 完全な関係(FC)状態

   In the Full Context (FC) state, the decompressor assumes that its
   entire context is valid.

Full Context(FC)状態では、減圧装置は、全体の文脈が有効であると仮定します。

   Attempting decompression:

減圧を試みます:

      In the FC state, decompression can be attempted regardless of the
      type of packet received.

FC状態では、受け取られたパケットのタイプにかかわらず減圧を試みることができます。

   Downward transition:

下向きの変遷:

      The decompressor moves back to the RC state if it assumes context
      damage.  If the decompressor assumes static context damage, it
      moves directly to the NC state.

文脈損害を仮定するなら、減圧装置はRC状態に戻ります。 減圧装置が静的な文脈損害を仮定するなら、それは直接NC州に動きます。

   Feedback logic:

フィードバック論理:

      In the FC state, the decompressor should send a NACK when CRC-8
      validation or CRC verification of any header type fails and if
      context damage is assumed, or it should send a STATIC-NACK if
      static context damage is assumed; this is subject to the feedback
      rate limitation described in Section 5.2.3.

FC状態では、どんなヘッダータイプのCRC-8合法化かCRC検証も失敗して、文脈損害が想定されるなら、減圧装置がナックを送るべきですか、または静的な文脈損害が想定されるなら、STATIC-ナックを送るべきです。 これはセクション5.2.3で説明されたフィードバックレート制限を受けることがあります。

5.2.2.  Decompressor Context Management

5.2.2. 減圧装置文脈管理

   All header formats carry a CRC and are context updating.  A packet
   for which the CRC succeeds updates the reference values of all header
   fields, either explicitly (from the information about a field carried
   within the compressed header) or implicitly (fields inferred from
   other fields).

すべてのヘッダー形式は、CRCを運んで、文脈アップデートです。 CRCが成功するパケットはそれとなく(他の分野から推論された分野)すべてのヘッダーの値が明らか(圧縮されたヘッダーの中に運ばれた野原の情報から)にさばく参照をアップデートします。

   The decompressor may assume that some or the entire context is
   invalid, when it fails to validate or to verify one or more headers
   using the CRC.  Because the decompressor cannot know the exact

または、減圧装置は、いくつかか全体の文脈が無効であると仮定するかもしれません、そうしないと有効にする、CRCを使用することで1個以上のヘッダーについて確かめるために。 減圧装置が正確を知ることができないので

Pelletier & Sandlund        Standards Track                    [Page 17]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[17ページ]

   reason(s) for a CRC failure or what field caused it, the validity of
   the context hence does not refer to what specific part(s) of the
   context is deemed valid or not.

CRCの故障か分野がそれを引き起こしたことの理由、したがって、文脈のどんな特定の部分が有効であると考えられるか文脈の正当性は示しません。

   Validity of the context rather relates to the detection of a problem
   with the context.  The decompressor first assumes that the type of
   information that most likely caused the failure(s) is the state that
   normally changes for each packet, i.e., context damage of the dynamic
   part of the context.  Upon repeated decompression failures and
   unsuccessful repairs, the decompressor then assumes that the entire
   context, including the static part, needs to be repaired, i.e.,
   static context damage.  Failure to validate the 3-bit CRC that
   protects control fields should be treated as a decompression failure
   when the decompressor asserts the validity of its context.

文脈の正当性はむしろ文脈に関する問題の検出に関連します。 減圧装置は、最初に、たぶん失敗を引き起こした情報の種類が通常、各パケット(すなわち、文脈のダイナミックな部分の文脈損害)のために変化する状態であると仮定します。 次に、繰り返された減圧失敗と失敗の修理のときに減圧装置は、静的な部分を含む全体の文脈が、修理される必要であると仮定します、すなわち、静的な文脈損害。 減圧装置が文脈の正当性について断言して、制御フィールドを保護する3ビットのCRCを有効にしない場合、減圧失敗として扱われるべきです。

   Context Damage Detection

文脈損害検出

      The assumption of context damage means that the decompressor will
      not attempt decompression of a CO header that carries only a 3-bit
      CRC, and will only attempt decompression of IR headers or CO
      headers protected by a CRC-7.

文脈損害の仮定は、減圧装置が3ビットのCRCだけを運ぶCOヘッダーの減圧を試みないで、CRC-7によって保護されたIRヘッダーかCOヘッダーの減圧を試みるだけであることを意味します。

   Static Context Damage Detection

静的な文脈損害検出

      The assumption of static context damage means that the
      decompressor refrains from attempting decompression of any type of
      header other than the IR header.

静的な文脈損害の仮定は、減圧装置が、IRヘッダー以外のどんなタイプのヘッダーの減圧も試みるのを控えることを意味します。

   How these assumptions are made, i.e., how context damage is detected,
   is open to implementations.  It can be based on the residual error
   rate, where a low error rate makes the decompressor assume damage
   more often than on a high rate link.

これらの仮定がどうされるか文脈損害がすなわち、どう検出されるかは、実現に開かれています。 それは見逃し誤りレートに基づくことができます、減圧装置が高い率リンクよりしばしば低誤り率で損害を仮定するところで。

   The decompressor implements these assumptions by selecting the type
   of compressed header for which it will attempt decompression.  In
   other words, validity of the context refers to the ability of a
   decompressor to attempt (or not) decompression of specific packet
   types.

減圧装置は、それが減圧を試みる圧縮されたヘッダーのタイプを選ぶことによって、これらの仮定を実行します。 言い換えれば、文脈の正当性は減圧装置が特定のパケットタイプの(or not)減圧を試みる能力について言及します。

   When ROHCv2 profiles are used over a channel that cannot guarantee
   in-order delivery, the decompressor may refrain from updating its
   context with the content of a sequentially late packet that is
   successfully decompressed.  This is to avoid updating the context
   with information that is older than what the decompressor already has
   in its context.

ROHCv2プロフィールがオーダーにおける配送を保証できないチャンネルの上に使用されるとき、減圧装置は、首尾よく減圧される連続して遅いパケットの内容で文脈をアップデートするのを控えるかもしれません。 これは、減圧装置が文脈に既に持っているものより古い情報で文脈をアップデートするのを避けるためのものです。

Pelletier & Sandlund        Standards Track                    [Page 18]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[18ページ]

5.2.3.  Feedback Logic

5.2.3. フィードバック論理

   ROHCv2 profiles may be used in environments with or without feedback
   capabilities from decompressor to compressor.  ROHCv2 however assumes
   that if a ROHC feedback channel is available and if this channel is
   used at least once by the decompressor for a specific context, this
   channel will be used during the entire compression operation for that
   context (i.e., bidirectional operation).

減圧装置からコンプレッサーまでのフィードバック能力のあるなしにかかわらずROHCv2プロフィールは環境で使用されるかもしれません。 しかしながら、ROHCv2は、ROHCフィードバックチャンネルが利用可能であり、このチャンネルが特定の文脈に少なくともかつて減圧装置によって使用されると、このチャンネルがその文脈(すなわち、双方向の操作)に全体の圧縮操作の間使用されると仮定します。

   The ROHC framework defines 3 types of feedback messages: ACKs, NACKs,
   and STATIC-NACKs.  The semantics of each message is defined in
   Section 5.2.4.1. of [RFC4995].  What feedback to send is coupled with
   the context management of the decompressor, i.e., with the
   implementation of the context damage detection algorithms as
   described in Section 5.2.2.

ROHC枠組みは3つのタイプに関するフィードバックメッセージを定義します: ACKs、NACKs、および静的なNACKs。 それぞれのメッセージの意味論は[RFC4995]についてセクション5.2.4で.1に定義されます。 どんなフィードバックを送ったらよいかはすなわち、減圧装置、セクション5.2.2における説明されるとしての文脈損害検出アルゴリズムの実現で文脈管理に結びつけられます。

   The decompressor should send a NACK when it assumes context damage,
   and it should send a STATIC-NACK when it assumes static context
   damage.  The decompressor is not strictly expected to send ACK
   feedback upon successful decompression, other than for the purpose of
   improving compression efficiency.

それが文脈損害を仮定すると、減圧装置はナックを送るべきです、そして、静的な文脈損害を仮定すると、それはSTATIC-ナックを送るべきです。 減圧装置がうまくいっている減圧のフィードバックをACKに送らないと厳密に予想されます、圧縮効率を高める目的を除いて。

   When ROHCv2 profiles are used over a channel that cannot guarantee
   in-order delivery, the decompressor may refrain from sending ACK
   feedback for a sequentially late packet that is successfully
   decompressed.

ROHCv2プロフィールがオーダーにおける配送を保証できないチャンネルの上に使用されるとき、減圧装置は、首尾よく減圧される連続して遅いパケットのためにフィードバックをACKに送るのを控えるかもしれません。

   The decompressor should limit the rate at which it sends feedback,
   for both ACKs and STATIC-NACK/NACKs, and should avoid sending
   unnecessary duplicates of the same type of feedback message that may
   be associated with the same event.

減圧装置は、それがACKsとSTATIC-ナック/NACKsの両方のためにフィードバックを送るレートを制限するべきであり、同じタイプの同じ出来事に関連するかもしれないフィードバックメッセージの不要な写しを送るのを避けるべきです。

6.  ROHCv2 Profiles (Normative)

6. ROHCv2プロフィール(標準)です。

6.1.  Channel Parameters, Segmentation, and Reordering

6.1. チャンネルパラメタ、分割、およびReordering

   The compressor MUST NOT use ROHC segmentation (see Section 5.2.5 of
   [RFC4995]), i.e., the Maximum Reconstructed Reception Unit (MRRU)
   MUST be set to 0, if the configuration of the ROHC channel contains
   at least one ROHCv2 profile in the list of supported profiles (i.e.,
   the PROFILES parameter) and if the channel cannot guarantee in-order
   delivery of packets between compression endpoints.

コンプレッサーはROHC分割を使用してはいけません(.5セクション5.2[RFC4995]を見てください)、すなわち、Maximum Reconstructed Reception Unit(MRRU)は0に用意ができなければなりません、ROHCチャンネルの構成が支持されたプロフィール(すなわち、PROFILESパラメタ)のリストに少なくとも1個のROHCv2プロフィールを含んでいて、チャンネルが圧縮終点の間でオーダーにおけるパケットの配信を保証できないなら。

Pelletier & Sandlund        Standards Track                    [Page 19]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[19ページ]

6.2.  Profile Operation, Per-context

6.2. 1文脈あたりのプロフィール操作

   ROHCv2 profiles operate differently, per context, depending on how
   the decompressor makes use of the feedback channel, if any.  Once the
   decompressor uses the feedback channel for a context, it establishes
   the feedback channel for that CID.

ROHCv2プロフィールは減圧装置がどうフィードバックチャンネルを利用するかによる文脈単位で異なってもしあれば作動します。 減圧装置が文脈にいったんフィードバックチャンネルを使用すると、それはそのCIDのためにフィードバックチャンネルを確立します。

   The compressor always starts with the assumption that the
   decompressor will not send feedback when it initializes a new context
   (see also the definition of a new context in Section 5.1.1. of
   [RFC4995], i.e., there is no established feedback channel for the new
   context.  At this point, despite the use of the optimistic approach,
   decompression failure is still possible because the decompressor may
   not have received sufficient information to correctly decompress the
   packets; therefore, until the decompressor has established a feedback
   channel, the compressor SHOULD periodically send IR packets.  The
   periodicity can be based on timeouts, on the number of compressed
   packets sent for the flow, or any other strategy the implementer
   chooses.

コンプレッサーはいつも減圧装置がそれが新しい関係を初期化するフィードバックを送らないという仮定から始まります。また、セクション5.1.1との新しい関係の定義を見てください。RFC4995には、新しい関係のためのどんな確立したフィードバックチャンネルもありません。(楽観的なアプローチの使用にもかかわらず、減圧装置が正しくパケットを減圧するために十分な情報を受け取っていないかもしれないので、ここに、減圧失敗はまだ可能です; したがって、減圧装置がフィードバックチャンネルを確立するまで、コンプレッサーSHOULDはIRパケットを定期的に送ります。周期性はタイムアウトに基づくことができます、流れのために送られた圧縮されたパケットの数、またはimplementerが選ぶいかなる他の戦略でも。

   The reception of either positive feedback (ACKs) or negative feedback
   (NACKs or STATIC-NACKs) from the decompressor establishes the
   feedback channel for the context (CID) for which the feedback was
   received.  Once there is an established feedback channel for a
   specific context, the compressor can make use of this feedback to
   estimate the current state of the decompressor.  This helps to
   increase the compression efficiency by providing the information
   needed for the compressor to achieve the necessary confidence level.
   When the feedback channel is established, it becomes superfluous for
   the compressor to send periodic refreshes, and instead it can rely
   entirely on the optimistic approach and feedback from the
   decompressor.

減圧装置からの積極的なフィードバック(ACKs)か負のフィードバック(NACKsかSTATIC-NACKs)のどちらかのレセプションはフィードバックが受け取られた文脈(CID)のためにフィードバックチャンネルを確立します。 特定の文脈のための確立したフィードバックチャンネルがいったんあると、コンプレッサーは、減圧装置の現状を見積もるのにこのフィードバックを利用できます。 これは、コンプレッサーが必要な信頼水準を達成するのに必要である情報を提供することによって圧縮効率を増加させるのを助けます。 フィードバックチャンネルが確立されるとき、周期的に発信するコンプレッサーがリフレッシュするので、余計になります、そして、代わりに、減圧装置から楽観的なアプローチとフィードバックに完全に依存できます。

   The decompressor MAY send positive feedback (ACKs) to initially
   establish the feedback channel for a particular flow.  Either
   positive feedback (ACKs) or negative feedback (NACKs or STATIC-NACKs)
   establishes this channel.  Once it has established a feedback channel
   for a CID, the decompressor is REQUIRED to continue sending feedback
   for the lifetime of the context (i.e., until it receives an IR packet
   that associates the CID to a different profile), to send error
   recovery requests and (optionally) acknowledgments of significant
   context updates.

減圧装置は、初めは特定の流れのためにフィードバックチャンネルを証明するために、積極的なフィードバック(ACKs)を送るかもしれません。 積極的なフィードバック(ACKs)か負のフィードバック(NACKsかSTATIC-NACKs)のどちらかがこのチャンネルを確立します。 CIDのためにいったんフィードバックチャンネルを確立すると、減圧装置は意味のある文脈最新版のエラー回復要求と(任意に)承認を送るために文脈(すなわち、異なったプロフィールにCIDを関連づけるIRパケットを受けるまで)の生涯のためのフィードバックを送り続けるREQUIREDです。

   Compression without an established feedback channel will be less
   efficient, because of the periodic refreshes and the lack of feedback
   to trigger error recovery; there will also be a slightly higher
   probability of loss propagation compared to the case where the
   decompressor uses feedback.

そして、確立したフィードバックチャンネルのない圧縮がそれほど効率的でなく、周期的のためにリフレッシュする、エラー回復の引き金となるフィードバックの不足。 また、ケースと比べて、損失伝播のわずかに高い確率が減圧装置がフィードバックを使用するところにあるでしょう。

Pelletier & Sandlund        Standards Track                    [Page 20]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[20ページ]

6.3.  Control Fields

6.3. 制御フィールド

   ROHCv2 defines a number of control fields that are used by the
   decompressor in its interpretation of the header formats received
   from the compressor.  The control fields listed in the following
   subsections are defined using the formal notation [RFC4997] in
   Section 6.8.2.4 of this document.

ROHCv2は減圧装置によってコンプレッサーから受け取られたヘッダー形式の解釈に使用される多くの制御フィールドを定義します。 以下の小区分で記載された制御フィールドは、この.4通の正式な記法[RFC4997]コネセクション6.8.2ドキュメントを使用することで定義されます。

6.3.1.  Master Sequence Number (MSN)

6.3.1. マスター配列番号(MSN)

   The Master Sequence Number (MSN) field is either taken from a field
   that already exists in one of the headers of the protocol that the
   profile compresses (e.g., RTP SN), or alternatively it is created at
   the compressor.  There is one MSN space per context.

プロフィールが圧縮するプロトコル(例えば、RTP SN)のヘッダーのひとりに既に存在する分野からMaster Sequence Number(MSN)グラウンドに出るか、またはあるいはまたそれをコンプレッサーに作成します。 1文脈あたりの1MSNのスペースがあります。

   The MSN field has the following two functions:

MSN分野には、以下の2つの機能があります:

   o  Differentiating between reference headers when receiving feedback
      data;

o フィードバックデータを受け取るとき、参照ヘッダーを区別します。

   o  Inferring the value of incrementing fields (e.g., IPv4
      Identifier).

o 増加している分野(例えば、IPv4 Identifier)の値を推論します。

   There is one MSN field in every ROHCv2 header, i.e., the MSN is
   always present in each header type sent by the compressor.  The MSN
   is sent in full in IR headers, while it can be lsb encoded within CO
   header formats.  The decompressor always includes LSBs of the MSN in
   the Acknowledgment Number field in feedback (see Section 6.9).  The
   compressor can later use this field to infer what packet the
   decompressor is acknowledging.

1つのMSN分野がすべてのROHCv2ヘッダーにあります、すなわち、MSNはコンプレッサーによって送られたそれぞれのヘッダータイプでいつも存在しています。 IRヘッダーでMSNをすべて送りますが、それはCOヘッダー形式の中でコード化されたlsbであるかもしれません。 減圧装置はAcknowledgment Number分野にフィードバックでMSNのLSBsをいつも含んでいます(セクション6.9を見てください)。 コンプレッサーは、後で減圧装置が承認しているすべてのパケットを推論するのにこの分野を使用できます。

   For profiles for which the MSN is created by the compressor (i.e.,
   0x0102, 0x0104, and 0x0108), the following applies:

コンプレッサー(すなわち、0×0102、0×0104、および0×0108)によってMSNが作成されるプロフィールに関しては、以下は適用されます:

   o  The compressor only initializes the MSN for a context when that
      context is first created or when the profile associated with a
      context changes;

o その文脈が最初に、作成されるか、または文脈に関連しているプロフィールが変化するときだけ、コンプレッサーは文脈のためにMSNを初期化します。

   o  When the MSN is initialized, it is initialized to a random value;

o MSNが初期化されるとき、それは無作為の値に初期化されます。

   o  The value of the MSN SHOULD be incremented by one for each packet
      that the compressor sends for a specific CID.

o 値、MSN SHOULDでは、コンプレッサーが特定のCIDのために送る各パケットあたり1つ増加されてください。

6.3.2.  Reordering Ratio

6.3.2. 比率をReorderingします。

   The control field reorder_ratio specifies how much reordering is
   handled by the lsb encoding of the MSN.  This is useful when header
   compression is performed over links with varying reordering

制御フィールド追加注文_比は、どのくらいの再命令がMSNのlsbコード化で扱われるかを指定します。 ヘッダー圧縮が再命令される異なるとのリンクの上に実行されるとき、これは役に立ちます。

Pelletier & Sandlund        Standards Track                    [Page 21]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[21ページ]

   characteristics.  The reorder_ratio control field provides the means
   for the compressor to adjust the robustness characteristics of the
   lsb encoding method with respect to reordering and consecutive
   losses, as described in Section 5.1.2.

特性。 追加注文_比率制御フィールドはコンプレッサーが再命令と連敗に関して方法をコード化するlsbの丈夫さの特性を調整する手段を提供します、セクション5.1.2で説明されるように。

6.3.3.  IP-ID Behavior

6.3.3. IP-IDの振舞い

   The IP-ID field of the IPv4 header can have different change
   patterns: sequential in network byte order, sequential byte-swapped,
   random or constant (a constant value of zero, although not conformant
   with [RFC0791], has been observed in practice).  There is one IP-ID
   behavior control field per IP header.  The control field for the
   IP-ID behavior of the innermost IP header determines which set of
   header formats is used.  The IP-ID behavior control field is also
   used to determine the contents of the irregular chain item, for each
   IP header.

IPv4ヘッダーのIP-ID分野は異なった変化パターンを持つことができます: 連続したコネはバイトオーダーをネットワークでつなぎます、連続します。バイトと交換される、無作為であるか、または一定です([RFC0791]があるconformantではありませんが、ゼロの恒常価値は実際には観測されました)。 IPヘッダーあたり1つのIP-ID振舞い制御フィールドがあります。 最も奥深いIPヘッダーのIP-ID動きのための制御フィールドは、どのセットのヘッダー形式が使用されているかを決定します。 また、IP-ID振舞い制御フィールドは不規則なチェーンの品目のコンテンツを決定するのに使用されます、それぞれのIPヘッダーのために。

   ROHCv2 profiles MUST NOT assign a sequential behavior (network byte
   order or byte-swapped) to any IP-ID but the one in the innermost IP
   header when compressing more than one level of IP headers.  This is
   because only the IP-ID of the innermost IP header is likely to have a
   sufficiently close correlation with the MSN to compress it as a
   sequentially changing field.  Therefore, a compressor MUST assign
   either the constant zero IP-ID or the random IP-ID behavior to
   tunneling headers.

1つ以上のレベルのIPヘッダーを圧縮するとき、ROHCv2プロフィールはどんなIP-IDにもかかわらず、最も奥深いIPヘッダーのものにも連続した振舞いを割り当ててはいけません(ネットワークバイトオーダーの、または、バイトと交換された)。 これは最も奥深いIPヘッダーのIP-IDだけが連続して変化している分野としてそれを圧縮するためにMSNと共に十分近い相関関係を持っていそうであるからです。 したがって、コンプレッサーはいずれのIP-IDもトンネリングヘッダーへの無作為のIP-IDの振舞いも定数に割り当ててはいけません。

6.3.4.  UDP-Lite Coverage Behavior

6.3.4. UDP-Lite適用範囲の振舞い

   The control field coverage_behavior specifies how the checksum
   coverage field of the UDP-Lite header is compressed with RoHCv2.  It
   can indicate one of the following encoding methods: irregular,
   static, or inferred encoding.

制御フィールドの適用範囲_振舞いはUDP-Liteヘッダーのチェックサム適用範囲分野がRoHCv2と共にどう圧縮されるかを指定します。 それは方法をコード化しながら、以下の1つを示すことができます: 不規則であるか、静的であるか、推論されたコード化。

6.3.5.  Timestamp Stride

6.3.5. タイムスタンプストライド

   The ts_stride control field is used in scaled RTP timestamp encoding
   (see Section 6.6.8).  It defines the expected increase in the RTP
   timestamp between consecutive RTP sequence numbers.

t_ストライド制御フィールドはスケーリングされたRTPタイムスタンプコード化に使用されます(セクション6.6.8を見てください)。 それは連続したRTP一連番号の間のRTPタイムスタンプの予想された増加を定義します。

6.3.6.  Time Stride

6.3.6. 時間ストライド

   The time_stride control field is used in timer-based compression
   encoding (see Section 6.6.9).  When timer-based compression is used,
   time_stride should be set to the expected difference in arrival time
   between consecutive RTP packets.

時間_ストライド制御フィールドはタイマベースの圧縮コード化に使用されます(セクション6.6.9を見てください)。 タイマベースの圧縮が連続したRTPパケットの間の到着時間に使用されているとき、時間_ストライドは予想された違いに設定されるべきです。

Pelletier & Sandlund        Standards Track                    [Page 22]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[22ページ]

6.3.7.  CRC-3 for Control Fields

6.3.7. 制御フィールドへのCRC-3

   ROHCv2 profiles define a CRC-3 calculated over a number of control
   fields.  This 3-bit CRC protecting the control fields is present in
   the header format for the co_common and co_repair header types.

ROHCv2プロフィールは多くの制御フィールドにわたって計算されたCRC-3を定義します。 制御フィールドを保護するこの3ビットのCRCは共同_に、一般的なヘッダー形式と修理ヘッダーがタイプする共同_に存在しています。

   The decompressor MUST always validate the integrity of the control
   fields covered by this 3-bit CRC when processing a co_common or a
   co_repair compressed header.

減圧装置がいつも一般的に共同_を処理するときこの3ビットのCRCで覆われた制御フィールドの保全を有効にしなければならない、さもなければ、_の共同修理はヘッダーを圧縮しました。

   Failure to validate the control fields using this CRC should be
   considered as a decompression failure by the decompressor in the
   algorithm that assesses the validity of the context.  However, if the
   decompression attempt can be verified using either the CRC-3 or the
   CRC-7 calculated over the uncompressed header, the decompressor MAY
   still forward the decompressed header to upper layers.  This is
   because the protected control fields are not always used to
   decompress the header (i.e., co_common or co_repair) that updates
   their respective value.

このCRCを使用することで制御フィールドを有効にしない場合、文脈の正当性を評価するアルゴリズムによる減圧装置によって減圧失敗であるとみなされるべきです。 しかしながら、解凍されたヘッダーの上に計算されたCRC-3かCRC-7のどちらかを使用することで減圧試みについて確かめることができるなら、減圧装置はまだ減圧されたヘッダーを上側の層に送っているかもしれません。 これは保護された制御フィールドがそれらのそれぞれの値をアップデートするヘッダー(すなわち、_の共同コモンか_の共同修理)を減圧するのにいつも使用されるというわけではないからです。

   The CRC polynomial and coverage of this CRC-3 is defined in
   Section 6.6.11.

このCRC-3のCRC多項式と適用範囲はセクション6.6.11で定義されます。

6.4.  Reconstruction and Verification

6.4. 再建と検証

   Validation of the IR header (8-bit CRC)

IRヘッダーの合法化(8ビットのCRC)

      The decompressor MUST always validate the integrity of the IR
      header using the 8-bit CRC carried within the IR header.  When the
      header is validated, the decompressor updates the context with the
      information in the IR header.  Otherwise, if the IR cannot be
      validated, the context MUST NOT be updated and the IR header MUST
      NOT be delivered to upper layers.

CRCがIRヘッダーの中に運んだ8ビットを使用して、減圧装置はいつもIRヘッダーの保全を有効にしなければなりません。 ヘッダーが有効にされるとき、減圧装置はIRヘッダーで情報で文脈をアップデートします。 さもなければ、IRを有効にすることができないなら、文脈をアップデートしてはいけません、そして、IRヘッダーを上側の層に渡してはいけません。

   Verification of CO headers (3-bit CRC or 7-bit CRC)

COヘッダーの検証(3ビットのCRCか7ビットのCRC)

      The decompressor MUST always verify the decompression of a CO
      header using the CRC carried within the compressed header.  When
      the decompression is verified and successful, the decompressor
      updates the context with the information received in the CO
      header; otherwise, if the reconstructed header fails the CRC
      verification, these updates MUST NOT be performed.

圧縮されたヘッダーの中に運ばれたCRCを使用して、減圧装置はいつもCOヘッダーの減圧について確かめなければなりません。 減圧が確かめられてうまくいっているとき、減圧装置はCOヘッダーに情報を受け取っていて文脈をアップデートします。 さもなければ、再建されたヘッダーがCRC検証に失敗するなら、これらのアップデートを実行してはいけません。

      A packet for which the decompression attempt cannot be verified
      using the CRC MUST NOT be delivered to upper layers.

CRC MUST NOTを使用することで減圧が試みるものについて確かめることができません。パケット、上側の層に渡します。

Pelletier & Sandlund        Standards Track                    [Page 23]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[23ページ]

      Decompressor implementations may attempt corrective or repair
      measures on CO headers prior to performing the above actions, and
      the result of any decompression attempt MUST be verified using the
      CRC.

上の動作を実行する前に減圧装置実現はCOヘッダーの上に調整策か修理測定を試みるかもしれません、そして、CRCを使用して、どんな減圧試みの結果についても確かめなければなりません。

6.5.  Compressed Header Chains

6.5. 圧縮されたヘッダーチェインズ

   Some header types use one or more chains containing sub-header
   information.  The function of a chain is to group fields based on
   similar characteristics, such as static, dynamic, or irregular
   fields.

ヘッダーはサブヘッダー情報を含む使用1か、より多くのチェーンをタイプします。 チェーンの機能は静的であるか、ダイナミックであるか、不規則な分野などの同様の特性に基づく分野を分類することです。

   Chaining is done by appending an item for each header to the chain in
   their order of appearance in the uncompressed packet, starting from
   the fields in the outermost header.

彼らの解凍されたパケットの外観の注文で各ヘッダーのために商品をチェーンに追加することによって、推論します、一番はずれのヘッダーの野原から始めて。

   In the text below, the term <protocol_name> is used to identify
   formal notation names corresponding to different protocol headers.
   The mapping between these is defined in the following table:

以下のテキストでは、>という用語<プロトコル_名は、異なったプロトコルヘッダーにおいて、対応する正式な記法名を特定するのに使用されます。 これらの間のマッピングは以下のテーブルで定義されます:

     +----------------------------------+---------------+
     | Protocol                         | protocol_name |
     +----------------------------------+---------------+
     | IPv4                    RFC 0791 | ipv4          |
     | IPv6                    RFC 2460 | ipv6          |
     | UDP                     RFC 0768 | udp           |
     | RTP                     RFC 3550 | rtp           |
     | ESP                     RFC 4303 | esp           |
     | UDP-Lite                RFC 3828 | udp_lite      |
     | AH                      RFC 4302 | ah            |
     | GRE           RFC 2784, RFC 2890 | gre           |
     | MINE                    RFC 2004 | mine          |
     | IPv6 Destination Option RFC 2460 | dest_opt      |
     | IPv6 Hop-by-hop Options RFC 2460 | hop_opt       |
     | IPv6 Routing Header     RFC 2460 | rout_opt      |
     +----------------------------------+---------------+

+----------------------------------+---------------+ | プロトコル| プロトコル_名| +----------------------------------+---------------+ | IPv4 RFC0791| ipv4| | IPv6 RFC2460| ipv6| | UDP RFC0768| udp| | RTP RFC3550| rtp| | 超能力RFC4303| esp| | UDP-Lite RFC3828| udp_lite| | ああ、RFC4302| ああ| | GRE RFC2784、RFC2890| gre| | RFC2004を採掘してください。| 私のもの| | IPv6目的地オプションRFC2460| dest_は選ばれます。| | IPv6はホップでオプションRFC2460を飛び越します。| ホップ_は選ばれます。| | IPv6ルート設定ヘッダーRFC2460| 総崩れする_は選ばれます。| +----------------------------------+---------------+

   Static chain:

静的なチェーン:

      The static chain consists of one item for each header of the chain
      of protocol headers that is compressed, starting from the
      outermost IP header.  In the formal description of the header
      formats, this static chain item for each header type is labeled
      <protocol_name>_static.  The static chain is only used in the IR
      header format.

静的なチェーンは圧縮されるプロトコルヘッダーのチェーンの各ヘッダーあたり1つの項目から成ります、一番はずれのIPヘッダーから始めて。 ヘッダー形式の形式的記述では、それぞれのヘッダータイプのためのこの静的なチェーンの品目は<プロトコル_名前>_静電気とラベルされます。 静的なチェーンはIRヘッダー形式に使用されるだけです。

Pelletier & Sandlund        Standards Track                    [Page 24]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[24ページ]

   Dynamic chain:

ダイナミックなチェーン:

      The dynamic chain consists of one item for each header of the
      chain of protocol headers that is compressed, starting from the
      outermost IP header.  In the formal description of the header
      formats, the dynamic chain item for each header type is labeled
      <protocol_name>_dynamic.  The dynamic chain is only used in the IR
      and co_repair header formats.

ダイナミックなチェーンは圧縮されるプロトコルヘッダーのチェーンの各ヘッダーあたり1つの項目から成ります、一番はずれのIPヘッダーから始めて。 ヘッダー形式の形式的記述では、それぞれのヘッダータイプのためのダイナミックなチェーンの品目は<プロトコル_名前>_動力とラベルされます。 ダイナミックなチェーンはIRと修理ヘッダーがフォーマットする共同_で使用されるだけです。

   Irregular chain:

不規則なチェーン:

      The structure of the irregular chain is analogous to the structure
      of the static chain.  For each compressed header that uses the
      general format of Section 6.8, the irregular chain is appended at
      a specific location in the general format of the compressed
      headers.  In the formal description of the header formats, the
      irregular chain item for each header type is a format whose name
      is suffixed by "_irregular".  The irregular chain is used in all
      CO headers, except for the co_repair format.

不規則なチェーンの構造は静的なチェーンの構造に類似しています。 セクション6.8の一般形式を使用するそれぞれの圧縮されたヘッダーに関しては、圧縮されたヘッダーの一般形式の特定の位置で不規則なチェーンを追加します。 「ヘッダー形式の形式的記述では、それぞれのヘッダータイプのための不規則なチェーンの品目は名前が」 _不規則によってsuffixedされる形式です。」 不規則なチェーンは_の修理の共同形式以外のすべてのCOヘッダーで使用されます。

      The format of the irregular chain for the innermost IP header
      differs from the format used for the outer IP headers, because the
      innermost IP header is part of the compressed base header.  In the
      definition of the header formats using the formal notation, the
      argument "is_innermost", which is passed to the corresponding
      encoding method (ipv4 or ipv6), determines what irregular chain
      items to use.  The format of the irregular chain item for the
      outer IP headers is also determined using one flag for TTL/Hop
      Limit and TOS/TC.  This flag is defined in the format of some of
      the compressed base headers.

最も奥深いIPヘッダーのための不規則なチェーンの形式は外側のIPヘッダーに使用される形式と異なっています、最も奥深いIPヘッダーが圧縮されたベースヘッダーの一部であるので。 正式な記法、議論を使用するヘッダー形式の定義では、「_は最も奥深いこと」が(方法(ipv4かipv6)をコード化しながら、相当に通過されます)、どんな不規則なチェーンの品目を使用したらよいかを決定します。 また、外側のIPヘッダーのための不規則なチェーンの品目の形式も、TTL/ホップLimitとTOS/TCに1個の旗を使用することで決定しています。 この旗は何人かの圧縮されたベースヘッダーの形式で定義されます。

   ROHCv2 profiles compress extension headers as other headers, and thus
   extension headers have a static chain, a dynamic chain, and an
   irregular chain.

ROHCv2プロフィールは他のヘッダーとして拡張ヘッダーを圧縮します、そして、その結果、拡張ヘッダーには、静的なチェーン、ダイナミックなチェーン、および不規則なチェーンがあります。

   ROHCv2 profiles define chains for all headers that can be compressed,
   i.e., RTP [RFC3550], UDP [RFC0768], ESP [RFC4303], UDP-Lite
   [RFC3828], IPv4 [RFC0791], IPv6 [RFC2460], AH [RFC4302], GRE
   [RFC2784][RFC2890], MINE [RFC2004], IPv6 Destination Options header
   [RFC2460], IPv6 Hop-by-hop Options header [RFC2460], and IPv6 Routing
   header [RFC2460].

ROHCv2プロフィールは圧縮できるすべてのヘッダー、すなわち、RTP[RFC3550]、UDP[RFC0768]、超能力[RFC4303]、UDP-Lite[RFC3828]、IPv4[RFC0791]、IPv6[RFC2460]、AH[RFC4302]、GRE[RFC2784][RFC2890]、MINE[RFC2004]、IPv6 Destination Optionsヘッダー[RFC2460]、ホップによるIPv6 Hop Optionsヘッダー[RFC2460]、およびIPv6ルート設定ヘッダー[RFC2460]のためにチェーンを定義します。

6.6.  Header Formats and Encoding Methods

6.6. ヘッダー形式と方法をコード化すること。

   The header formats are defined using the ROHC formal notation.  Some
   of the encoding methods used in the header formats are defined in
   [RFC4997], while other methods are defined in this section.

ヘッダー形式は、ROHCの正式な記法を使用することで定義されます。 ヘッダー形式に使用されるコード化方法のいくつかが[RFC4997]で定義されます、他の方法はこのセクションで定義されますが。

Pelletier & Sandlund        Standards Track                    [Page 25]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[25ページ]

6.6.1.  baseheader_extension_headers

6.6.1. baseheader_拡大_ヘッダー

   The baseheader_extension_headers encoding method skips over all
   fields of the extension headers of the innermost IP header, without
   encoding any of them.  Fields in these extension headers are instead
   encoded in the irregular chain.

彼らのいずれもコード化しないで最も奥深いIPヘッダーの拡張ヘッダーのすべての分野にわたる方法スキップをコード化するbaseheader_拡大_ヘッダー。 これらの拡張ヘッダーの分野は代わりに不規則なチェーンでコード化されます。

   This encoding is used in CO headers (see Section 6.8.2).  The
   innermost IP header is combined with other header(s) (i.e., UDP, UDP-
   Lite, RTP) to create the compressed base header.  In this case, there
   may be a number of extension headers between the IP headers and the
   other headers.

このコード化はCOヘッダーで使用されます(セクション6.8.2を見てください)。 最も奥深いIPヘッダーは、圧縮されたベースヘッダーを創造するために他のヘッダー(すなわち、UDP、UDP- Lite、RTP)に結合されます。 この場合、IPヘッダーと他のヘッダーの間には、多くの拡張ヘッダーがいるかもしれません。

   The base header defines a representation of the extension headers, to
   comply with the syntax of the formal notation; this encoding method
   provides this representation.

ベースヘッダーは正式な記法の構文に従うために拡張ヘッダーの表現を定義します。 このコード化方法はこの表現を提供します。

6.6.2.  baseheader_outer_headers

6.6.2. baseheaderの_の外側の_ヘッダー

   The baseheader_outer_headers encoding method skips over all the
   fields of the extension header(s) that do not belong to the innermost
   IP header, without encoding any of them.  Changing fields in outer
   headers are instead handled by the irregular chain.

拡張ヘッダーのすべての分野にわたるそうしない方法スキップをコード化するbaseheaderの_の外側の_ヘッダーは最も奥深いIPヘッダーのものです、それらのいずれもコード化しないで。 外側のヘッダーの変化分野は代わりに不規則なチェーンによって扱われます。

   This encoding method, similarly to the baseheader_extension_headers
   encoding method above, is necessary to keep the definition of the
   header formats syntactically correct.  It describes tunneling IP
   headers and their respective extension headers (i.e., all headers
   located before the innermost IP header) for CO headers (see
   Section 6.8.2).

これが方法をコード化して、baseheader_拡大_ヘッダーには、同様に、上の方法をコード化するのが、ヘッダー形式の定義をシンタクス上正しく保つのに必要です。 それは、COヘッダーのために、IPヘッダーと彼らのそれぞれの拡張ヘッダー(最も奥深いIPヘッダーの前に位置するすなわちすべてのヘッダー)にトンネルを堀ると説明します(セクション6.8.2を見てください)。

6.6.3.  inferred_udp_length

6.6.3. 推論された_のudp_長さ

   The decompressor infers the value of the UDP length field as being
   the sum of the UDP header length and the UDP payload length.  The
   compressor must therefore ensure that the UDP length field is
   consistent with the length field(s) of preceding subheaders, i.e.,
   there must not be any padding after the UDP payload that is covered
   by the IP Length.

減圧装置はUDPヘッダ長とUDPペイロード長の合計であるとしてUDP長さの分野の値を推論します。 したがって、コンプレッサーは、UDP長さの分野が「副-ヘッダー」に先行する長さの分野と一致しているのを確実にしなければなりません、すなわち、IP LengthでカバーされているUDPペイロードの後に、少しの詰め物もあるはずがありません。

   This encoding method is also used for the UDP-Lite Checksum Coverage
   field when it behaves in the same manner as the UDP length field
   (i.e., when the checksum always covers the entire UDP-Lite payload).

また、UDP長さの分野と同じ態度で反応するとき(すなわち、チェックサムはいついつも全体のUDP-Liteペイロードをカバーしますか)、このコード化方法はUDP-Lite Checksum Coverage分野に使用されます。

6.6.4.  inferred_ip_v4_header_checksum

6.6.4. 推論された_ip_v4_ヘッダー_チェックサム

   This encoding method compresses the header checksum field of the IPv4
   header.  This checksum is defined in RFC 791 [RFC0791] as follows:

このコード化方法はIPv4ヘッダーのヘッダーチェックサム分野を圧縮します。 このチェックサムは以下のRFC791[RFC0791]で定義されます:

Pelletier & Sandlund        Standards Track                    [Page 26]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[26ページ]

      Header Checksum: 16 bits

ヘッダーチェックサム: 16ビット

         A checksum on the header only.  Since some header fields change
         (e.g., time to live), this is recomputed and verified at each
         point that the internet header is processed.

ヘッダーだけの上のチェックサム。 いくつかのヘッダーフィールドが変化するので(例えば、生きる時間)、これは、インターネットヘッダーが処理されるという各ポイントで再計算されて、確かめられます。

      The checksum algorithm is:

チェックサムアルゴリズムは以下の通りです。

         The checksum field is the 16 bit one's complement of the one's
         complement sum of all 16 bit words in the header.  For purposes
         of computing the checksum, the value of the checksum field is
         zero.

チェックサム分野はヘッダーでのすべての16ビットの単語の1の補数合計の16ビットの1の補数です。 チェックサムを計算する目的のために、チェックサム分野の値はゼロです。

   As described above, the header checksum protects individual hops from
   processing a corrupted header.  As the data that this checksum
   protects is mostly compressed away and is instead taken from state
   stored in the context, this checksum becomes cumulative to the ROHC
   CRC.  When using this encoding method, the checksum is recomputed by
   the decompressor.

上で説明されるように、ヘッダーチェックサムは崩壊したヘッダーを処理するのから個々のホップを保護します。 このチェックサムが保護するデータを遠くにほとんど圧縮して、代わりに、文脈に格納された状態から取るのに従って、このチェックサムはROHC CRCに累積するようになります。 方法をコード化しながらこれを使用するとき、チェックサムは減圧装置によって再計算されます。

   The inferred_ip_v4_header_checksum encoding method thus compresses
   the header checksum field of the IPv4 header down to a size of zero
   bits, i.e., no bits are transmitted in compressed headers for this
   field.  Using this encoding method, the decompressor infers the value
   of this field using the computation above.

その結果方法をコード化する推論された_ip_v4_ヘッダー_チェックサムはIPv4ヘッダーのヘッダーチェックサム分野をゼロ・ビットのサイズまで圧縮します、すなわち、ビットが全く圧縮されたヘッダーでこの分野に伝えられません。 方法をコード化しながらこれを使用して、減圧装置は、上の計算を使用することでこの分野の値を推論します。

   The compressor MAY use the header checksum to validate the
   correctness of the header before compressing it, to avoid processing
   a corrupted header.

コンプレッサーは、崩壊したヘッダーを処理するのを避けるためにそれを圧縮する前にヘッダーの正当性を有効にするのにヘッダーチェックサムを使用するかもしれません。

6.6.5.  inferred_mine_header_checksum

6.6.5. 推論された_私のもの_ヘッダー_チェックサム

   This encoding method compresses the minimal encapsulation header
   checksum.  This checksum is defined in RFC 2004 [RFC2004] as follows:

このコード化方法は最小量のカプセル化ヘッダーチェックサムを圧縮します。 このチェックサムは以下のRFC2004[RFC2004]で定義されます:

      Header Checksum

ヘッダーチェックサム

         The 16-bit one's complement of the one's complement sum of all
         16-bit words in the minimal forwarding header.  For purposes of
         computing the checksum, the value of the checksum field is 0.
         The IP header and IP payload (after the minimal forwarding
         header) are not included in this checksum computation.

最小量の推進ヘッダーでのすべての16ビットの単語の1の補数合計の16ビットの1の補数。 チェックサムを計算する目的のために、チェックサム分野の値は0です。 IPヘッダーとIPペイロード(最小量の推進ヘッダーの後の)はこのチェックサム計算に含まれていません。

   The inferred_mine_header_checksum encoding method compresses the
   minimal encapsulation header checksum down to a size of zero bits,
   i.e., no bits are transmitted in compressed headers for this field.
   Using this encoding method, the decompressor infers the value of this
   field using the above computation.

方法をコード化する推論された_私のもの_ヘッダー_チェックサムは最小量のカプセル化ヘッダーチェックサムをゼロ・ビットのサイズまで圧縮します、すなわち、ビットが全く圧縮されたヘッダーでこの分野に伝えられません。 方法をコード化しながらこれを使用して、減圧装置は、上の計算を使用することでこの分野の値を推論します。

Pelletier & Sandlund        Standards Track                    [Page 27]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[27ページ]

   The motivations for inferring this checksum are similar to the ones
   explained above in Section 6.6.4.

このチェックサムを推論することに関する動機は上でセクション6.6.4で説明されたものと同様です。

   The compressor MAY use the minimal encapsulation header checksum to
   validate the correctness of the header before compressing it, to
   avoid processing a corrupted header.

コンプレッサーは、崩壊したヘッダーを処理するのを避けるためにそれを圧縮する前にヘッダーの正当性を有効にするのに最小量のカプセル化ヘッダーチェックサムを使用するかもしれません。

6.6.6.  inferred_ip_v4_length

6.6.6. 推論された_ip_v4_の長さ

   This encoding method compresses the total length field of the IPv4
   header.  The total length field of the IPv4 header is defined in RFC
   791 [RFC0791] as follows:

このコード化方法はIPv4ヘッダーの全長分野を圧縮します。 IPv4ヘッダーの全長分野は以下のRFC791[RFC0791]で定義されます:

      Total Length: 16 bits

全長: 16ビット

         Total Length is the length of the datagram, measured in octets,
         including internet header and data.  This field allows the
         length of a datagram to be up to 65,535 octets.

総Lengthはインターネットヘッダーとデータを含む八重奏で測定されたデータグラムの長さです。 この分野は、データグラムの長さが最大6万5535の八重奏であることを許容します。

   The inferred_ip_v4_length encoding method compresses the IPv4 header
   checksum down to a size of zero bits, i.e., no bits are transmitted
   in compressed headers for this field.  Using this encoding method,
   the decompressor infers the value of this field by counting in octets
   the length of the entire packet after decompression.

方法をコード化する推論された_ip_v4_の長さはIPv4ヘッダーチェックサムをゼロ・ビットのサイズまで圧縮します、すなわち、ビットが全く圧縮されたヘッダーでこの分野に伝えられません。 方法をコード化しながらこれを使用して、減圧装置は、減圧の後に八重奏で全体のパケットの長さを数えることによって、この分野の値を推論します。

6.6.7.  inferred_ip_v6_length

6.6.7. 推論された_ip_v6_の長さ

   This encoding method compresses the payload length field in the IPv6
   header.  This length field is defined in RFC 2460 [RFC2460] as
   follows:

このコード化方法はIPv6ヘッダーのペイロード長分野を圧縮します。 この長さの分野は以下のRFC2460[RFC2460]で定義されます:

      Payload Length: 16-bit unsigned integer

ペイロード長: 16ビットの符号のない整数

         Length of the IPv6 payload, i.e., the rest of the packet
         following this IPv6 header, in octets.  (Note that any
         extension headers present are considered part of the payload,
         i.e., included in the length count.)

すなわち、IPv6ペイロードの長さ、八重奏でこのIPv6ヘッダーに続くパケットの残り。 (すなわち、長さのカウントに含まれていて、出席しているどんな拡張ヘッダーもペイロードの一部であると考えられることに注意してください。)

   The "inferred_ip_v6_length" encoding method compresses the payload
   length field of the IPv6 header down to a size of zero bits, i.e., no
   bits are transmitted in compressed headers for this field.  Using
   this encoding method, the decompressor infers the value of this field
   by counting in octets the length of the entire packet after
   decompression.

方法をコード化する「推論された_ip_v6_の長さ」はIPv6ヘッダーのペイロード長分野をゼロ・ビットのサイズまで圧縮します、すなわち、ビットが全く圧縮されたヘッダーでこの分野に伝えられません。 方法をコード化しながらこれを使用して、減圧装置は、減圧の後に八重奏で全体のパケットの長さを数えることによって、この分野の値を推論します。

   IPv6 headers using the jumbo payload option of RFC 2675 [RFC2675]
   will not be compressible with this encoding method since the value of
   the payload length field does not match the length of the packet.

ペイロード長分野の値がパケットの長さに合っていないのでこれが方法をコード化している状態で、RFC2675[RFC2675]のジャンボなペイロードオプションを使用しているIPv6ヘッダーが圧縮性にならないでしょう。

Pelletier & Sandlund        Standards Track                    [Page 28]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[28ページ]

6.6.8.  Scaled RTP Timestamp Compression

6.6.8. スケーリングされたRTPタイムスタンプ圧縮

   This section provides additional details on encodings used to scale
   the RTP timestamp, as defined in the formal notation in
   Section 6.8.2.4.

このセクションはRTPタイムスタンプをスケーリングするのに使用されるencodingsに関する追加詳細を明らかにします、セクション6.8.2で.4に正式な記法で定義されるように

   The RTP timestamp (TS) usually increases by a multiple of the RTP
   Sequence Number's (SN's) increase and is therefore a suitable
   candidate for scaled encoding.  This scaling factor is labeled
   ts_stride in the definition of the profile in the formal notation.
   The compressor sets the scaling factor based on the change in TS with
   respect to the change in the RTP SN.

RTPタイムスタンプ(TS)は、通常、RTP Sequence Numberの(SN)の増加の倍数増加して、したがって、スケーリングされたコード化の適当な候補です。 このけた移動子は正式な記法とのプロフィールの定義におけるt_ストライドとラベルされます。 コンプレッサーはRTP SNにおける変化に関して変化に基づくけた移動子をTSにはめ込みます。

   The default value of the scaling factor ts_stride is 160, as defined
   in Section 6.8.2.4.  To use a different value for ts_stride, the
   compressor explicitly updates the value of ts_stride to the
   decompressor using one of the header formats that can carry this
   information.

けた移動子t_ストライドのデフォルト値はセクション6.8.2で.4に定義されるように160です。 t_ストライドに異価を使用するために、コンプレッサーはこの情報を運ぶことができるヘッダー形式の1つを使用することでt_ストライドの値を明らかに減圧装置にアップデートします。

   When the compressor uses a scaling factor that is different than the
   default value of ts_stride, it can only use the new scaling factor
   once it has enough confidence that the decompressor has successfully
   calculated the residue (ts_offset) of the scaling function for the
   timestamp.  The compressor achieves this by sending unscaled
   timestamp values, to allow the decompressor to establish the residue
   based on the current ts_stride.  The compressor MAY send the unscaled
   timestamp in the same compressed header(s) used to establish the
   value of ts_stride.

コンプレッサーがt_ストライドのデフォルト値と異なったけた移動子を使用すると、減圧装置がタイムスタンプのために首尾よくスケーリング機能の残り(t_オフセット)について計算したという十分な信用がいったんあると、それは新しいけた移動子を使用できるだけです。 コンプレッサーは、減圧装置が現在のt_ストライドに基づく残りを確立するのを許容するために送付の非スケーリングされたタイムスタンプ値でこれを達成します。 コンプレッサーはt_ストライドの値を証明するのに使用される同じ圧縮されたヘッダーで非スケーリングされたタイムスタンプを送るかもしれません。

   Once the compressor has gained enough confidence that both the value
   of the scaling factor and the value of the residue have been
   established in the decompressor, the compressor can start compressing
   packets using the new scaling factor.

コンプレッサーがいったん、けた移動子の値と残りの値の両方が減圧装置に確立されたという十分な信用を獲得すると、コンプレッサーは、新しいけた移動子を使用することでパケットを圧縮し始めることができます。

   When the compressor detects that the residue (ts_offset) value has
   changed, it MUST NOT select a compressed header format that uses the
   scaled timestamp encoding before it has re-established the residue as
   described above.

コンプレッサーがそれを検出するとき、残り(t_オフセット)価値は変化して、それは上で説明されるように残りを復職させる前にスケーリングされたタイムスタンプコード化を使用する圧縮されたヘッダー形式を選択してはいけません。

   When the value of the timestamp field wraps around, the value of the
   residue of the scaling function is likely to change.  When this
   occurs, the compressor re-establishes the new residue value as
   described above.

タイムスタンプ分野の値が巻きつけられるとき、スケーリング機能の残りの値は変化しそうです。 これが起こると、コンプレッサーは上で説明されるように新しい残り値を復職させます。

   If the decompressor receives a compressed header containing scaled
   timestamp bits while the ts_stride equals zero, it MUST NOT deliver
   the packet to upper layers and it SHOULD treat this as a CRC
   verification failure.

t_ストライドがゼロと等しい間、スケーリングされたタイムスタンプビットを含んでいて、減圧装置が圧縮されたヘッダーを受けるなら、それは上側の層とそれにパケットを渡してはいけません。SHOULDはCRC検証の故障としてこれを扱います。

Pelletier & Sandlund        Standards Track                    [Page 29]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[29ページ]

   Whether or not the scaling is applied to the RTP TS field is up to
   the compressor implementation (i.e., the use of scaling is OPTIONAL),
   and is indicated by the tsc_indicator control field.  In case scaling
   is applied to the RTP TS field, the value of ts_stride used by the
   compressor is up to the implementation.  A value of ts_stride that is
   set to the expected increase in the RTP timestamp between consecutive
   unit increases of the RTP SN will provide the most gain for the
   scaled encoding.  Other values may provide the same gain in some
   situations, but may reduce the gain in others.

スケーリングがRTP TS分野に適用されるかどうかが、コンプレッサー実現(すなわち、スケーリングの使用はOPTIONALである)まであって、tsc_インディケータ制御フィールドによって示されます。 スケーリングがRTP TS分野に適用されるといけないので、コンプレッサーによって使用されるt_ストライドの値は実現まで達しています。 RTP SNの連続したユニット増加の間のRTPタイムスタンプの予想された増加に設定されるt_ストライドの値は最も多くの利得をスケーリングされたコード化に提供するでしょう。 他の値は、同じ利得をいくつかの状況に提供しますが、他のもので利得を下げるかもしれません。

   When scaled timestamp encoding is used for header formats that do not
   transmit any lsb-encoded timestamp bits at all, the
   inferred_scaled_field encoding of Section 6.6.10 is used for encoding
   the timestamp.

全くどんなlsbによってコード化されたタイムスタンプビット伝えないヘッダー形式において、スケーリングされたタイムスタンプコード化が使用されているとき、セクション6.6.10の推論された_スケーリングされた_分野コード化は、タイムスタンプをコード化するのに使用されます。

6.6.9.  timer_based_lsb

6.6.9. タイマ_は_lsbを基礎づけました。

   The timer-based compression encoding method, timer_based_lsb,
   compresses a field whose change pattern approximates a linear
   function of the time of day.

タイマベース、方法をコード化する圧縮(_lsbに基づくタイマ_)が変化パターンが時刻の一次関数に近似する分野を圧縮します。

   This encoding uses the local clock to obtain an approximation of the
   value that it encodes.  The approximated value is then used as a
   reference value together with the num_lsbs_param least-significant
   bits received as the encoded value, where num_lsbs_param represents a
   number of bits that is sufficient to uniquely represent the encoded
   value in the presence of jitter between compression endpoints.

このコード化は、それがコード化する価値の近似を得るのに地方の時計を使用します。 そして、近似された値はコード化された値として受け取られたnum_lsbs_param最下位ビットと共に基準値として使用されます。そこでは、num_lsbs_paramが多くの圧縮終点の間のジターの面前で唯一コード化された値を表すために十分なビットを表します。

     ts_scaled =:= timer_based_lsb(<time_stride_param>,
                                   <num_lsbs_param>, <offset_param>)

t_は=をスケーリングしました: = タイマ_は_lsbを基礎づけました。(_<時間ストライド_param>、<num_lsbs_param>、<のオフセット_param>)

   The parameters "num_lsbs_param" and "offset_param" are the parameters
   to use for the lsb encoding, i.e., the number of least significant
   bits and the interpretation interval offset, respectively.  The
   parameter "time_stride_param" represents the context value of the
   control field time_stride.

「num_lsbs_param」というパラメタと「オフセット_param」は、lsbコード化に使用するパラメタとすなわち、最下位ビットの数とそれぞれ相殺された解釈間隔です。 「_時間ストライド_param」というパラメタは制御フィールド時間_ストライドの文脈値を表します。

   This encoding method always uses a scaled version of the field it
   compresses.

このコード化方法はいつもそれが圧縮する分野のスケーリングされたバージョンを使用します。

   The value of the field is decoded by calculating an approximation of
   the scaled value, using:

分野の値は、以下を使用して、スケーリングされた価値の近似について計算することによって、解読されます。

        tsc_ref_advanced = tsc_ref + (a_n - a_ref) / time_stride.

tsc_審判_は=tsc_審判のために+ (a--_審判)/時間_ストライドを進めました。

Pelletier & Sandlund        Standards Track                    [Page 30]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[30ページ]

      where:

どこ:

      - tsc_ref is a reference value of the scaled representation
        of the field.
      - a_n is the arrival time associated with the value to decode.
      - a_ref is the arrival time associated with the reference header.
      - tsc_ref_advanced is an approximation of the scaled value
        of the field.

- tsc_審判は分野のスケーリングされた表現の基準値です。 - aは解読する値に関連している到着時間です。 - _審判は参照ヘッダーに関連している到着時間です。 - _審判_が進めたtscは分野のスケーリングされた価値の近似です。

   The lsb encoding is then applied using the num_lsbs_param bits
   received in the compressed header and the tsc_ref_advanced as
   "ref_value" (as per Section 4.11.5 of [RFC4997]).

そして、lsbコード化は、圧縮されたヘッダーに受け取られたnum_lsbs_paramビットと「審判_値」として高度なtsc_審判_(.5セクション4.11[RFC4997]に従って)を使用することで適用されます。

   Appendix B.3 provides an example of how the compressor can calculate
   jitter.

付録B.3はコンプレッサーがどうジターについて計算できるかに関する例を提供します。

   The control field time_stride controls whether or not the
   timer_based_lsb method is used in the CO header.  The decompressor
   SHOULD send the CLOCK_RESOLUTION option with a zero value, if:

制御フィールド時間_ストライドは、_のベースの_lsbタイマ方法がCOヘッダーで使用されるかどうかを制御します。 減圧装置SHOULDがaとのCLOCK_RESOLUTIONオプションに値を全く送らない、:

   o  it receives a non-zero time_stride value, and

o そしてそれが非ゼロ時間_ストライド価値を受ける。

   o  it has not previously sent a CLOCK_RESOLUTION feedback with a non-
      zero value.

o それは以前に、非ゼロがあるCLOCK_RESOLUTIONフィードバックに値を送りません。

   This is to allow compression to recover from the case where a
   compressor erroneously activates timer-based compression.

これで、圧縮はコンプレッサーが誤ってタイマベースの圧縮を起動するケースから回復することになっています。

   The support and usage of timer-based compression is OPTIONAL for both
   the compressor and the decompressor; the compressor is not required
   to set the time_stride control field to a non-zero value when it has
   received a non-zero value for the CLOCK_RESOLUTION option.

タイマベースの圧縮のサポートと用法はコンプレッサーと減圧装置の両方のためのOPTIONALです。 コンプレッサーは、それがCLOCK_RESOLUTIONオプションのために非ゼロ値を受けたとき、時間_ストライド制御フィールドを非ゼロ値に設定するのに必要ではありません。

6.6.10.  inferred_scaled_field

6.6.10. 推論された_は_分野をスケーリングしました。

   The inferred_scaled_field encoding method encodes a field that is
   defined as changing in relation to the MSN, and for which the
   increase with respect to the MSN can be scaled by some scaling
   factor.  This encoding method is used in compressed header formats
   that do not contain any bits for the scaled field.  In this case, the
   decompressor infers the unscaled value of the scaled field from the
   MSN field.  The unscaled value is calculated according to the
   following formula:

方法をコード化する推論された_スケーリングされた_分野はMSNと関連して変化すると定義して、何らかのけた移動子でMSNに関する増加をスケーリングできる分野をコード化します。 このコード化方法はスケーリングされた分野へのどんなビットも含まない圧縮されたヘッダー形式に使用されます。 この場合、減圧装置はMSN分野からスケーリングされた分野の非スケーリングされた値を推論します。 以下の公式によると、非スケーリングされた値は計算されます:

      unscaled_value = delta_msn * stride + reference_unscaled_value

デルタ_msn*ストライド+参照の_の非スケーリングされた__値=価値を非スケーリングしました。

   where "delta_msn" is the difference in MSN between the reference
   value of the MSN in the context and the value of the MSN decompressed

「デルタ_msn」が文脈のMSNの基準値とMSNの値の間で減圧されたMSNの違いであるところ

Pelletier & Sandlund        Standards Track                    [Page 31]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[31ページ]

   from this packet, "reference_unscaled_value" is the value of the
   field being scaled in the context, and "stride" is the scaling value
   for this field.

このパケットから、「参照_は_値を非スケーリングしました」は文脈でスケーリングされる分野の値です、そして、「ストライド」はこの分野へのスケーリング値です。

   For example, when this encoding method is applied to the RTP
   timestamp in the RTP profile, the calculation above becomes:

このコード化方法がRTPプロフィールのRTPタイムスタンプに適用されるとき、例えば、上の計算はなります:

      timestamp = delta_msn * ts_stride + reference_timestamp

タイムスタンプ=デルタ_msn*t_ストライド+参照_タイムスタンプ

6.6.11.  control_crc3_encoding

6.6.11. コントロール_crc3_コード化

   The control_crc3_encoding method provides a CRC calculated over a
   number of control fields.  The definition of this encoding method is
   the same as for the "crc" encoding method specified in Section 4.11.6
   of [RFC4997], with the difference being that the data covered by the
   CRC is given by a concatenated list of control fields.

方法をコード化するコントロール_crc3_は多くの制御フィールドにわたって計算されたCRCを提供します。 方法をコード化するこの定義は"crc"のように.6セクション4.11[RFC4997]で指定された方法をコード化するのにおいて同じです、制御フィールドの連結されたリストでCRCでカバーされたデータを与えるということである違いで。

   In other words, the definition of the control_crc3_encoding method is
   equivalent to the following definition:

言い換えれば、方法をコード化するコントロール_crc3_の定義は以下の定義に同等です:

     control_crc_encoding(ctrl_data_value, ctrl_data_length)
     {
       UNCOMPRESSED {
       }

_(ctrl_データ_価値、ctrl_データ_の長さ)をコード化するcrc_を制御してください、UNCOMPRESSED{ }

       COMPRESSED {
         control_crc3 =:=
           crc(3, 0x06, 0x07, ctrl_data_value, ctrl_data_length) [ 3 ];
       }
     }

COMPRESSED、_crc3=を制御してください: =crc(3、0×06、0×07、ctrl_データ_価値、ctrl_データ_の長さ)[ 3 ]

   where the parameter "ctrl_data_value" binds to the concatenated
   values of the following control fields, in the order listed below:

「ctrl_データ_価値」というパラメタが以下にリストアップされたオーダーにおける、以下の制御フィールドの連結された値に付くところ:

   o  reorder_ratio, 2 bits padded with 6 MSB of zeroes

o 追加注文_比、ゼロの6MSBと共に水増しされた2ビット

   o  ts_stride, 32 bits (only for profiles 0x0101 and 0x0107)

o t_ストライド、32ビット(プロフィール0×0101と0x0107のためだけの)

   o  time_stride, 32 bits (only for profiles 0x0101 and 0x0107)

o 時間_ストライド、32ビット(プロフィール0×0101と0x0107のためだけの)

   o  msn, 16 bits (not applicable for profiles 0x0101, 0x0103, and
      0x0107)

o msn、16ビット(プロフィール0×0101、0×0103、および0x0107には適切でない)です。

   o  coverage_behavior, 2 bits padded with 6 MSB of zeroes (only for
      profiles 0x0107 and 0x0108)

o 適用範囲_の振舞い、ゼロの6MSBと共に水増しされた2ビット(プロフィール0×0107と0x0108のためだけの)

Pelletier & Sandlund        Standards Track                    [Page 32]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[32ページ]

   o  ip_id_behavior, one octet for each IP header in the compressible
      header chain starting from the outermost header.  Each octet
      consists of 2 bits padded with 6 MSBs of zeroes.

o ip_イド_の振舞い、一番はずれのヘッダーから始める圧縮性のヘッダーチェーンにおけるそれぞれのIPヘッダーあたり1つの八重奏。 各八重奏はゼロの6MSBsと共に水増しされた2ビットから成ります。

   The "ctrl_data_length" binds to the sum of the length of the control
   field(s) that are applicable to the specific profile.

「ctrl_データ_の長さ」は特定のプロフィールに適切な制御フィールドの長さに付きます。

   The decompressor uses the resulting 3-bit CRC to validate the control
   fields that are updated by the co_common and co_repair header
   formats; this CRC cannot be used to verify the outcome of a
   decompression attempt.

減圧装置は一般的に共同_によってアップデートされる制御フィールドと修理ヘッダーがフォーマットする共同_を有効にするのに結果として起こる3ビットのCRCを使用します。 減圧試みの結果について確かめるのにこのCRCを使用できません。

   This CRC protects the update of control fields, as the updated values
   are not always used to decompress the header that carries them and
   thus are not protected by the CRC-7 verification.  This prevents
   impairments that could occur if the decompression of a co_common or
   of a co_repair succeeds and the decompressor sends positive feedback,
   while for some reason the control fields are incorrectly updated.

このCRCは制御フィールドのアップデートを保護します、アップデートされた値が、それらを運ぶヘッダーを減圧するのにいつも使用されるというわけではなくて、その結果、CRC-7検証で保護されません。 共同_に、修理は成功します、そして、これが一般的に共同_の減圧であるなら起こるかもしれない損傷を防ぐか、または減圧装置は積極的なフィードバックを送ります、不当にある理由で制御フィールドをアップデートしますが。

6.6.12.  inferred_sequential_ip_id

6.6.12. 推論された_連続した_ip_イド

   This encoding method is used with a sequential IP-ID behavior
   (sequential or sequential byte-swapped) and when there are no coded
   IP-ID bits in the compressed header.  In this case, the IP-ID offset
   from the MSN is constant, and the IP-ID increases by the same amount
   as the MSN (similar to the inferred_scaled_field encoding method).

このコード化方法が連続したIP-IDの振舞いと共に使用される、(連続するか連続する、バイトと交換される、)、そして、コード化されなかったIP-IDビットがいつ圧縮されたヘッダーにあるか。 この場合、MSNから相殺されたIP-IDは一定です、そして、MSN(方法をコード化する推論された_スケーリングされた_分野と同様の)と同じ量に従って、IP-IDは増加します。

   The decompressor calculates the value for the IP-ID according to the
   following formula:

以下の公式によると、減圧装置はIP-IDに値について計算します:

      IP-ID = delta_msn + reference_IP_ID_value

デルタ_msn+参照_IP_ID_IP-ID=価値

   where "delta_msn" is the difference between the reference value of
   the MSN in the context and the uncompressed value of the MSN
   associated to the compressed header, and where
   "reference_IP_ID_value" is the value of the IP-ID in the context.
   For swapped IP-ID behavior (i.e., when ip_id_behavior_innermost is
   set to IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED), "reference_IP_ID_value"
   and "IP-ID" are byte-swapped with regard to the corresponding fields
   in the context.

「デルタ_msn」が文脈のMSNの基準値と圧縮されたヘッダーに関連づけられたMSNの解凍された値の違いであり、「参照_IP_ID_価値」が文脈のIP-IDの値であるところで。 交換されたIP-IDの振舞い(_ip_イド_振舞い_最も奥深いときに、すなわち、_IP_ID BEHAVIORへのセットはSEQUENTIAL_SWAPPEDです、)のために、「参照_IP_ID_価値」と「IP-ID」は文脈のバイトと対応に関して交換された分野です。

   If the IP-ID behavior is random or zero, this encoding method does
   not update any fields.

IP-IDの振舞いが無作為であるか、またはゼロ、このコード化方法が無作為でないなら、あらゆる分野をアップデートしてください。

Pelletier & Sandlund        Standards Track                    [Page 33]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[33ページ]

6.6.13.  list_csrc(cc_value)

6.6.13. リスト_csrc(cc_値)

   This encoding method compresses the list of RTP CSRC identifiers
   using list compression.  This encoding establishes a content for the
   different CSRC identifiers (items) and a list describing the order in
   which they appear.

このコード化方法は、リスト圧縮を使用することでRTP CSRC識別子のリストを圧縮します。 このコード化は異なったCSRC識別子(項目)のための内容とそれらが現れるオーダーについて説明するリストを確立します。

   The compressor passes an argument (cc_value) to this encoding method:
   this is the value of the CC field taken from the RTP header.  The
   decompressor is required to bind the value of this argument to the
   number of items in the list, which will allow the decompressor to
   correctly reconstruct the CC field.

コンプレッサーは方法をコード化しながら、主張(cc_値)をこれに通過します: これはRTPヘッダーから出られるCCグラウンドの値です。 減圧装置が、減圧装置が正しくCC分野を再建できるリストの件数にこの引数の値を縛るのに必要です。

6.6.13.1.  List Compression

6.6.13.1. リスト圧縮

   The CSRC identifiers in the uncompressed packet can be represented as
   an ordered list, whose order and presence are usually constant
   between packets.  The generic structure of such a list is as follows:

通常、注文と存在がパケットの間で一定である規則正しいリストとして解凍されたパケットのCSRC識別子を表すことができます。 そのようなリストの一般的な構造は以下の通りです:

            +--------+--------+--...--+--------+
      list: | item 1 | item 2 |       | item n |
            +--------+--------+--...--+--------+

+--------+--------+--...--+--------+ リスト: | 項目1| 項目2| | 項目n| +--------+--------+--...--+--------+

   When performing list compression on a CSRC list, each item is the
   uncompressed value of one CSRC identifier.

CSRCリストにリスト圧縮を実行するとき、各個条は1つのCSRC識別子の解凍された値です。

   The basic principles of list-based compression are the following:

リストベースの圧縮の基本原理は以下です:

   When initializing the context:

文脈を初期化するとき:

   1) The complete representation of the list of CSRC identifiers is
      transmitted.

1) CSRC識別子のリストの完全表記は伝えられます。

   Then, once the context has been initialized:

次に、一度、文脈は初期化されたことがあります:

   2) When the list is unchanged, a compressed header that does not
      contain information about the list can be used.

2) リストが変わりがないときに、リストの情報を含まない圧縮されたヘッダーは使用できます。

   3) When the list changes, a compressed list is sent in the compressed
      header, including a representation of its structure and order.
      Previously unknown items are sent uncompressed in the list, while
      previously known items are only represented by an index pointing
      to the item stored in the context.

3) リストが変化するとき、圧縮されたヘッダーで圧縮されたリストを送ります、その構造と注文の表現を含んでいて。 以前、リストで解凍されていた状態で未知の商品を送ります、以前に知られている項目は文脈に格納された項目を示すインデックスによって表されるだけですが。

Pelletier & Sandlund        Standards Track                    [Page 34]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[34ページ]

6.6.13.2.  Table-based Item Compression

6.6.13.2. テーブルベースの項目圧縮

   The table-based item compression compresses individual items sent in
   compressed lists.  The compressor assigns a unique identifier,
   "Index", to each item "Item" of a list.

テーブルベースの項目圧縮は圧縮されたリストで送られた個別品目を圧縮します。 コンプレッサーはユニークな識別子、「インデックス」を「項目」というリストに関する各個条に割り当てます。

   Compressor Logic

コンプレッサー論理

      The compressor conceptually maintains an item table containing all
      items, indexed using "Index".  The (Index, Item) pair is sent
      together in compressed lists until the compressor gains enough
      confidence that the decompressor has observed the mapping between
      items and their respective index.  Confidence is obtained from the
      reception of an acknowledgment from the decompressor, or by
      sending (Index, Item) pairs using the optimistic approach.  Once
      confidence is obtained, the index alone is sent in compressed
      lists to indicate the presence of the item corresponding to this
      index.

コンプレッサーは概念的に「インデックス」を使用することで索引をつけられたすべての項目を含む項目テーブルを維持します。 コンプレッサーが減圧装置が項目の間のマッピングを観測したという信用とそれらのそれぞれのインデックスを十分に獲得するまで、圧縮されたリストで(Item、索引をつけてください)組を一緒に送ります。 減圧装置、または楽観的なアプローチを使用することで組を送ることによって(Item、索引をつけてください)、承認のレセプションから信用を得ます。 いったん信用を得ると、項目の存在を示すためにこのインデックスに対応しながら、圧縮されたリストでインデックスだけを送ります。

      The compressor MAY reset its item table upon receiving a negative
      acknowledgement.

否定的承認を受けるとき、コンプレッサーは項目テーブルをリセットするかもしれません。

      The compressor MAY reassign an existing index to a new item by re-
      establishing the mapping using the procedure described above.

コンプレッサーは、上で説明された手順を用いることでマッピングを再確立することによって、既存のインデックスを新商品に再選任するかもしれません。

   Decompressor Logic

減圧装置論理

      The decompressor conceptually maintains an item table that
      contains all (Index, Item) pairs received.  The item table is
      updated whenever an (Index, Item) pair is received and
      decompression is successful (CRC verification, or CRC-8
      validation).  The decompressor retrieves the item from the table
      whenever an Index is received without an accompanying Item.

減圧装置は概念的に組が受けたすべて(Item、索引をつける)を含む項目テーブルを維持します。 (Item、索引をつけてください)組が受け取られていて、減圧がうまくいっている(CRC検証、またはCRC-8合法化)ときはいつも、項目テーブルをアップデートします。 付随のItemなしでIndexを受け取るときはいつも、減圧装置はテーブルから項目を検索します。

      If an index is received without an accompanying Item and the
      decompressor does not have any context for this index, the
      decompressor MUST NOT deliver the packet to upper layers.

付随のItemなしでインデックスを受け取って、減圧装置にこのインデックスのための何か文脈がないなら、減圧装置は上側の層にパケットを渡してはいけません。

6.6.13.3.  Encoding of Compressed Lists

6.6.13.3. 圧縮されたリストのコード化

   Each item present in a compressed list is represented by:

圧縮されたリストの現在の各個条は以下によって表されます。

   o  an Index into the table of items, and a presence bit indicating if
      a compressed representation of the item is present in the list.

o 項目のテーブル、および項目の圧縮された表現がリストに存在しているかどうかを示す存在ビットへのIndex。

   o  an item (if the presence bit is set).

o 項目(存在ビットが設定されるなら)。

Pelletier & Sandlund        Standards Track                    [Page 35]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[35ページ]

   If the presence bit is not set, the item must already be known by the
   decompressor.

存在ビットが設定されないなら、減圧装置は既に項目を知っていなければなりません。

   A compressed list of items uses the following encoding:

項目の圧縮されたリストは以下のコード化を使用します:

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      | Reserved  |PS |       m       |
      +---+---+---+---+---+---+---+---+
      |        XI_1, ..., XI_m        | m octets, or m * 4 bits
      /                --- --- --- ---/
      |               :    Padding    : if PS = 0 and m is odd
      +---+---+---+---+---+---+---+---+
      |                               |
      /      Item_1, ..., Item_n      / variable
      |                               |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 予約されます。|PS| m| +---+---+---+---+---+---+---+---+ | ξ_1…, ξ_m| m八重奏、またはm*4ビット/--- --- --- ---/ | : 詰め物: 0とPS=mが変な+であるなら---+---+---+---+---+---+---+---+ | | /項目_1…, 項目/可変です。| | +---+---+---+---+---+---+---+---+

      Reserved: MUST be set to zero; otherwise, the decompressor MUST
      discard the packet.

予約される: ゼロに設定しなければなりません。 さもなければ、減圧装置はパケットを捨てなければなりません。

      PS: Indicates size of XI fields:

PS: XI分野のサイズを示します:

         PS = 0 indicates 4-bit XI fields;

PS=0は4ビットのXI分野を示します。

         PS = 1 indicates 8-bit XI fields.

PS=1は8ビットのXI分野を示します。

      m: Number of XI item(s) in the compressed list.  Also, the value
      of the cc_value argument of the list_csrc encoding (see
      Section 6.6.13).

m: 圧縮されたリストのXIの品目の数。 リスト_csrcコード化(セクション6.6.13を見る)に関するcc_値の引数の値も。

      XI_1, ..., XI_m: m XI items.  Each XI represents one item in the
      list of items of the uncompressed header, in the same order as
      they appear in the uncompressed header.

ξ_1…, ξ_m: m XIの品目 各XIは解凍されたヘッダーに現れるように解凍されたヘッダーの項目のリスト、同次における1つの項目を表します。

         The format of an XI item is as follows:

XIの品目の形式は以下の通りです:

                   0   1   2   3
                 +---+---+---+---+
         PS = 0: | X |   Index   |
                 +---+---+---+---+

0 1 2 3 +---+---+---+---+ PS=0: | X| インデックス| +---+---+---+---+

                   0   1   2   3   4   5   6   7
                 +---+---+---+---+---+---+---+---+
         PS = 1: | X | Reserved  |     Index     |
                 +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ PS=1: | X| 予約されます。| インデックス| +---+---+---+---+---+---+---+---+

         X: Indicates whether the item is present in the list:

X: 項目がリストに存在しているかどうかを示します:

Pelletier & Sandlund        Standards Track                    [Page 36]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[36ページ]

            X = 1 indicates that the item corresponding to the Index is
            sent in the Item_1, ..., Item_n list;

X=1は、Indexに対応する商品がItem_1で送られるのを示します…, 項目リスト。

            X = 0 indicates that the item corresponding to the Index is
            not sent.

X=0は、Indexに対応する商品が送られないのを示します。

         Reserved: MUST be set to zero; otherwise, the decompressor MUST
         discard the packet.

予約される: ゼロに設定しなければなりません。 さもなければ、減圧装置はパケットを捨てなければなりません。

         Index: An index into the item table.  See Section 6.6.13.4

以下に索引をつけてください。 項目テーブルへのインデックス。 .4は、6.6に.13を区分するのを見ます。

         When 4-bit XI items are used, the XI items are placed in octets
         in the following manner:

4ビットのXIの品目が使用されているとき、XIの品目は以下の方法で八重奏に置かれます:

           0   1   2   3   4   5   6   7
         +---+---+---+---+---+---+---+---+
         |     XI_k      |    XI_k + 1   |
         +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | ξ_k| ξ_k+1| +---+---+---+---+---+---+---+---+

      Padding: A 4-bit Padding field is present when PS = 0 and the
      number of XIs is odd.  The Padding field MUST be set to zero;
      otherwise, the decompressor MUST discard the packet.

詰め物: PS=0とXIsの数が変であるときに、4ビットのPadding分野は存在しています。 Padding分野をゼロに設定しなければなりません。 さもなければ、減圧装置はパケットを捨てなければなりません。

      Item 1, ..., item n: Each item corresponds to an XI with X = 1 in
      XI 1, ..., XI m.  Each entry in the Item list is the uncompressed
      representation of one CSRC identifier.

項目1…, 項目n: 各個条はXI1でX=1でXIに対応しています…, XI m。 Itemリストにおける各エントリーは1つのCSRC識別子の解凍された表現です。

6.6.13.4.  Item Table Mappings

6.6.13.4. 項目テーブルマッピング

   The item table for list compression is limited to 16 different items,
   since the RTP header can only carry at most 15 simultaneous CSRC
   identifiers.  The effect of having more than 16 items in the item
   table will only cause a slight overhead to the compressor when items
   are swapped in/out of the item table.

項目テーブル繰返し要素の並び圧縮は16の異なった項目に制限されます、RTPヘッダーが15の同時のCSRC識別子しか高々運ぶことができないので。 項目が/で項目テーブルから交換されるときだけ、項目テーブルに16以上の項目を持っているという効果はわずかなオーバーヘッドをコンプレッサーに引き起こすでしょう。

6.6.13.5.  Compressed Lists in Dynamic Chain

6.6.13.5. ダイナミックなチェーンにおける圧縮されたリスト

   A compressed list that is part of the dynamic chain must have all of
   its list items present, i.e., all X-bits in the XI list MUST be set.
   All items previously established in the item table that are not
   present in the list decompressed from this packet MUST also be
   retained in the decompressor context.

ダイナミックなチェーンの一部である圧縮されたリストはリスト項目プレゼントのすべてを持たなければなりません、すなわち、XIリストのすべてのX-ビットを設定しなければなりません。 また、減圧装置文脈で以前に項目テーブルで確立した項目がこのパケットから減圧されたリストに示さないすべてを保有しなければなりません。

Pelletier & Sandlund        Standards Track                    [Page 37]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[37ページ]

6.7.  Encoding Methods with External Parameters as Arguments

6.7. 議論として外部のパラメタで方法をコード化します。

   A number of encoding methods in Section 6.8.2.4 have one or more
   arguments for which the derivation of the parameter's value is
   outside the scope of the ROHC-FN [RFC4997] specification of the
   header formats.

ヘッダー形式のROHC-FN[RFC4997]仕様の範囲の外の.4には1つ以上の議論があるセクション6.8.2におけるパラメタの価値の派生がそうである方法をコード化する数。

   The following is a list of encoding methods with external parameters
   as arguments, from Section 6.8.2.4:

以下、セクション6.8.2からの議論としての外部のパラメタがあるコード化方法のリストは.4です:

   o  udp(profile_value, reorder_ratio_value)

o udp(プロフィール_価値、追加注文_比率_価値)

   o  udp_lite(profile_value, reorder_ratio_value,
      coverage_behavior_value)

o udp_lite(プロフィール_価値、追加注文_比率_価値、適用範囲_振舞い_価値)

   o  esp(profile_value, reorder_ratio_value)

o esp(プロフィール_価値、追加注文_比率_価値)

   o  rtp(profile_value, ts_stride_value, time_stride_value,
      reorder_ratio_value)

o rtp(プロフィール_価値、t_ストライド_価値、時間_ストライド_価値、追加注文_比率_価値)

   o  ipv4(profile_value, is_innermost, outer_ip_flag,
      ip_id_behavior_value, reorder_ratio_value))

o ipv4(_値の輪郭を描いて、_の最も奥深くて、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値です)

   o  ipv6(profile_value, is_innermost, outer_ip_flag,
      reorder_ratio_value))

o ipv6(_プロフィール_値は_の最も奥深くて、外側の_ip_旗であり、追加注文_比率は値です)

   o  iponly_baseheader(profile_value, outer_ip_flag,
      ip_id_behavior_value, reorder_ratio_value)

o iponly_baseheader(プロフィール_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値)

   o  udp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
      reorder_ratio_value)

o udp_baseheader(プロフィール_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値)

   o  udplite_baseheader(profile_value, outer_ip_flag,
      ip_id_behavior_value, reorder_ratio_value)

o udplite_baseheader(プロフィール_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値)

   o  esp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
      reorder_ratio_value)

o esp_baseheader(プロフィール_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値)

   o  rtp_baseheader(profile_value, ts_stride_value, time_stride_value,
      outer_ip_flag, ip_id_behavior_value, reorder_ratio_value)

o rtp_baseheader(プロフィール_価値、t_ストライド_価値、時間_ストライド_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値)

   o  udplite_rtp_baseheader(profile_value, ts_stride_value,
      time_stride_value, outer_ip_flag, ip_id_behavior_value,
      reorder_ratio_value, coverage_behavior_value)

o udplite_rtp_baseheader(プロフィール_価値、t_ストライド_価値、時間_ストライド_価値、外側の_ip_旗、ip_イド_振舞い_価値、追加注文_比率_価値、適用範囲_振舞い_価値)

   The following applies for all parameters listed below: At the
   compressor, the value of the parameter is set according to the
   recommendations for each parameter.  At the decompressor, the value

以下は以下にリストアップされたすべてのパラメタに申し込みます: コンプレッサーでは、各パラメタのための推薦に従って、パラメタの値は設定されます。 減圧装置、値で

Pelletier & Sandlund        Standards Track                    [Page 38]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[38ページ]

   of the parameter is set to undefined and will get bound by encoding
   methods, except where otherwise noted.

パラメタは、未定義の状態で設定されて、別の方法で述べられるところを除いて、方法をコード化することによって、縛られるでしょう。

   The following is a list of external arguments with their respective
   definition:

↓これは彼らのそれぞれの定義との外部の議論のリストです:

   o  profile_value:

o _値の輪郭を描いてください:

         Set to the 16-bit number that identifies the profile used to
         compress this packet.  When processing the static chain at the
         decompressor, this parameter is set to the value of the profile
         field in the IR header (see Section 6.8.1).

このパケットを圧縮するのに使用されるプロフィールを特定する16ビットの数にセットしてください。 減圧装置で静的なチェーンを処理するとき、このパラメタはIRヘッダーのプロフィール分野の値に設定されます(セクション6.8.1を見てください)。

   o  reorder_ratio_value:

o 追加注文_比率_価値:

         Set to a 2-bit integer value, using one of the constants whose
         name begins with the prefix REORDERING_ and as defined in
         Section 6.8.2.4.

2ビットの整数値にセットしてください、名前が接頭語REORDERING_、セクション6.8.2で.4に定義されるように始まる定数の1つを使用して

   o  ip_id_behavior_value:

o ip_イド_振舞い_価値:

         Set to a 2-bit integer value, using one of the constants whose
         name begins with the prefix IP_ID_BEHAVIOR_ and as defined in
         Section 6.8.2.4.

2ビットの整数値にセットしてください、名前が_接頭語IP_ID BEHAVIOR_、セクション6.8.2で.4に定義されるように始まる定数の1つを使用して

   o  coverage_behavior_value:

o 適用範囲_振舞い_価値:

         Set to a 2-bit integer value, using one of the constants whose
         name begins with the prefix UDP_LITE_COVERAGE_ and as defined
         in Section 6.8.2.4.

2ビットの整数値にセットしてください、名前が接頭語UDP_LITE_COVERAGE_、セクション6.8.2で.4に定義されるように始まる定数の1つを使用して

   o  outer_ip_flag:

o 外側の_ip_旗:

         This parameter is set to 1 if at least one of the TOS/TC or
         TTL/Hop Limit fields in outer IP headers has changed compared
         to their reference values in the context; otherwise, it is set
         to 0.  This flag may only be set to 1 for the "co_common"
         header format in the different profiles.

文脈の彼らの基準値と比べて、少なくとも外側のIPヘッダーのTOS/TCかTTL/ホップLimit分野の1つが変化したなら、このパラメタは1に設定されます。 さもなければ、それは0に設定されます。 この旗は異なったプロフィールの「共同_一般的な」ヘッダー形式のために1にしか設定されないかもしれません。

   o  is_innermost:

o _最も奥深いです:

         This boolean flag is set to 1 when processing the innermost of
         the compressible IP headers; otherwise, it is set to 0.

圧縮性のIPヘッダーの最も奥深さを処理するとき、この論理演算子旗は1に設定されます。 さもなければ、それは0に設定されます。

Pelletier & Sandlund        Standards Track                    [Page 39]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[39ページ]

   o  ts_stride_value

o t_ストライド_価値

         The value of this parameter should be set to the expected
         increase in the RTP Timestamp between consecutive RTP sequence
         numbers.  The value selected is implementation-specific.  See
         also Section 6.6.8.

このパラメタの値は連続したRTP一連番号の間のRTP Timestampの予想された増加に設定されるべきです。 選択された値は実現特有です。 また、セクション6.6.8を見てください。

   o  time_stride_value

o 時間_ストライド_価値

         The value of this parameter should be set to the expected
         inter-arrival time between consecutive packets for the flow.
         The value selected is implementation-specific.  This parameter
         MUST be set to zero, unless the compressor has received a
         feedback message with the CLOCK_RESOLUTION option set to a non-
         zero value.  See also Section 6.6.9.

このパラメタの値は流れのための連続したパケットの間の予想された相互到着時間までセットであるべきです。 選択された値は実現特有です。 このパラメタをゼロに設定しなければならなくて、コンプレッサーがフィードバックメッセージを受け取っていない場合、CLOCK_RESOLUTIONオプションで、値は非ゼロにセットしていました。 また、セクション6.6.9を見てください。

6.8.  Header Formats

6.8. ヘッダー形式

   ROHCv2 profiles use two different header types: the Initialization
   and Refresh (IR) header type, and the Compressed header type (CO).

ROHCv2プロフィールは2つの異なったヘッダータイプを使用します: 初期設定、Refresh(IR)ヘッダータイプ、およびCompressedヘッダータイプ(CO)。

   The CO header type defines a number of header formats: there are two
   sets of base header formats, with a few additional formats that are
   common to both sets.

COヘッダータイプは多くのヘッダー形式を定義します: いくつかの両方のセットに共通の追加形式がある2セットのベースヘッダー形式があります。

6.8.1.  Initialization and Refresh Header Format (IR)

6.8.1. 初期設定、ヘッダー形式をリフレッシュしてください。(IR)

   The IR header format uses the structure of the ROHC IR header as
   defined in Section 5.2.2.1 of [RFC4995].

IRヘッダー形式は、セクション5.2.2で.1[RFC4995]を定義するので、ROHC IRヘッダーの構造を使用します。

   Header type: IR

ヘッダータイプ: IR

      This header format communicates the static part and the dynamic
      part of the context.

このヘッダー形式は静的な部分と文脈のダイナミックな部分を伝えます。

Pelletier & Sandlund        Standards Track                    [Page 40]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[40ページ]

   The ROHCv2 IR header has the following format:

ROHCv2IRヘッダーには、以下の形式があります:

        0   1   2   3   4   5   6   7
       --- --- --- --- --- --- --- ---
      :        Add-CID octet          : if for small CIDs and (CID != 0)
      +---+---+---+---+---+---+---+---+
      | 1   1   1   1   1   1   0   1 | IR type octet
      +---+---+---+---+---+---+---+---+
      :                               :
      /       0-2 octets of CID       / 1-2 octets if for large CIDs
      :                               :
      +---+---+---+---+---+---+---+---+
      |            Profile            | 1 octet
      +---+---+---+---+---+---+---+---+
      |              CRC              | 1 octet
      +---+---+---+---+---+---+---+---+
      |                               |
      /         Static chain          / variable length
      |                               |
       - - - - - - - - - - - - - - - -
      |                               |
      /         Dynamic chain         / variable length
      |                               |
       - - - - - - - - - - - - - - - -

0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- : CIDを加えている八重奏: 小さいCIDsと(CID!=0)+のために---+---+---+---+---+---+---+---+ | 1 1 1 1 1 1 0 1 | IRタイプ八重奏+---+---+---+---+---+---+---+---+ : : CID / 1-2八重奏の/0-2八重奏、大きいCIDsのために: : +---+---+---+---+---+---+---+---+ | プロフィール| 1 八重奏+---+---+---+---+---+---+---+---+ | CRC| 1 八重奏+---+---+---+---+---+---+---+---+ | | /静的なチェーン/可変長| | - - - - - - - - - - - - - - - - | | /ダイナミックなチェーン/可変長| | - - - - - - - - - - - - - - - -

      CRC: 8-bit CRC over the entire IR-header, including any CID fields
      and up until the end of the dynamic chain, using the polynomial
      defined in [RFC4995].  For purposes of computing the CRC, the CRC
      field is zero.

CRC: どんなCID分野も含んで、[RFC4995]で多項式を使用するダイナミックなチェーンの端まで定義された全体のIRヘッダーの上の8ビットのCRC。 CRCを計算する目的のために、CRC分野はゼロです。

      Static chain: See Section 6.5.

静的なチェーン: セクション6.5を見てください。

      Dynamic chain: See Section 6.5.

ダイナミックなチェーン: セクション6.5を見てください。

6.8.2.  Compressed Header Formats (CO)

6.8.2. 圧縮されたヘッダー形式(CO)

6.8.2.1.  Design Rationale for Compressed Base Headers

6.8.2.1. 圧縮された基地のヘッダーのためのデザイン原理

   The compressed header formats are defined as two separate sets for
   each profile: one set for the headers where the innermost IP header
   contains a sequential IP-ID (either network byte order or byte-
   swapped), and one set for the headers without sequential IP-ID
   (either random, zero, or no IP-ID).  There are also a number of
   common header formats shared between both sets.  In the description
   below, the naming convention used for header formats that belong to
   the sequential set is to include "seq" in the name of the format,
   while similarly "rnd" is used for those that belong to the non-
   sequential set.

圧縮されたヘッダー形式は各プロフィールあたり別々の2セットと定義されます: 1つが最も奥深いIPヘッダーがヘッダーのために連続したIP-IDなしで連続したIP-ID(ネットワークバイトオーダーかバイトはスワップされた)、および1セットを含むヘッダーのためにセットした、(無作為である、ゼロにもかかわらず、IP-IDがありません) また、両方のセットの間で共有された多くの一般的なヘッダー形式があります。 以下での記述では、連続したセットに属すヘッダー形式に使用される命名規則は形式の名にかけて"seq"を含めることになっています、同様に"rnd"は非連続したセットに属すものに使用されますが。

Pelletier & Sandlund        Standards Track                    [Page 41]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[41ページ]

   The design of the header formats is derived from the field behavior
   analysis found in Appendix A.

Appendix Aで見つけられた分野振舞い分析からヘッダー形式のデザインを得ます。

   All of the compressed base headers transmit lsb-encoded MSN bits and
   a CRC.

圧縮されたベースヘッダーは皆、lsbによってコード化されたMSNビットとCRCを伝えます。

   The following header formats exist for all profiles defined in this
   document, and are common to both the sequential and the random header
   format sets:

以下のヘッダー形式は、本書では定義されたすべてのプロフィールのために存在していて、連続したヘッダー形式と無作為のヘッダー形式が設定する両方に共通です:

   o  co_common: This format can be used to update the context when the
      established change pattern of a dynamic field changes, for any of
      the dynamic fields.  However, not all dynamic fields are updated
      by conveying their uncompressed value; some fields can only be
      transmitted using a compressed representation.  This format is
      especially useful when a rarely changing field needs to be
      updated.  This format contains a set of flags to indicate what
      fields are present in the header, and its size can vary
      accordingly.  This format is protected by a 7-bit CRC.  It can
      update control fields, and it thus also carries a 3-bit CRC to
      protect those fields.  This format is similar in purpose to the
      UOR-2-extension 3 format of [RFC3095].

o 共同_一般的: ダイナミックな分野の確立した変化パターンが変化するとき、文脈をアップデートするのにこの形式を使用できます、ダイナミックな分野のいずれにも。 しかしながら、それらの解凍された値を伝えることによって、すべてのダイナミックな分野をアップデートするというわけではありません。 圧縮された表現を使用することでいくつかの野原を伝えることができるだけです。 めったに変化していない分野が、アップデートする必要があるとき、この形式は特に役に立ちます。 この形式はヘッダーでどんな分野が存在しているかを示す旗のセットを含んでいます、そして、サイズはそれに従って、異なることができます。 この形式は7ビットのCRCによって保護されます。 それは制御フィールドをアップデートできます、そして、その結果、また、それらの分野を保護するために3ビットのCRCを運びます。 この形式は目的において3がフォーマットする[RFC3095]のUOR2拡張子と同様です。

   o  co_repair: This format can be used to update the context of all
      the dynamic fields by conveying their uncompressed value.  This is
      especially useful when context damage is assumed (e.g., from the
      reception of a NACK) and a context repair is performed.  This
      format is protected by a 7-bit CRC.  It also carries a 3-bit CRC
      over the control fields that it can update.  This format is
      similar in purpose to the IR-DYN format of [RFC3095] when
      performing context repairs.

o _の共同修理: それらの解凍された値を伝えることによってすべてのダイナミックな分野の文脈をアップデートするのにこの形式を使用できます。 文脈損害が想定されて(例えば、ナックのレセプションから)、文脈修理が実行されるとき、これは特に役に立ちます。 この形式は7ビットのCRCによって保護されます。 また、それはそれがアップデートできる制御フィールドの上まで3ビットのCRCを運びます。 文脈修理を実行するとき、この形式は目的において[RFC3095]のIR-DYN形式と同様です。

   o  pt_0_crc3: This format conveys only the MSN; it can therefore only
      update the MSN and fields that are derived from the MSN, such as
      IP-ID and the RTP Timestamp (for applicable profiles).  It is
      protected by a 3-bit CRC.  This format is equivalent to the UO-0
      header format in [RFC3095].

o _Pt0_crc3: この形式はMSNだけを運びます。 したがって、それはMSNから得られるMSNと野原をアップデートできるだけです、IP-IDやRTP Timestamp(適切なプロフィールのための)のように。 それは3ビットのCRCによって保護されます。 この形式は[RFC3095]のUO-0ヘッダー形式に同等です。

   o  pt_0_crc7: This format has the same properties as pt_0_crc3, but
      is instead protected by a 7-bit CRC and contains a larger amount
      of lsb-encoded MSN bits.  This format is useful in environments
      where a high amount of reordering or a high-residual error rate
      can occur.

o _Pt0_crc7: この形式は、_Pt0_crc3と同じ特性を持っていますが、代わりに7ビットのCRCによって保護されて、多く以上の量のlsbによってコード化されたMSNビットを含んでいます。 この形式は再命令の多量か高見逃し誤りレートが起こることができるところで環境で役に立ちます。

Pelletier & Sandlund        Standards Track                    [Page 42]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[42ページ]

   The following header format descriptions apply to profiles 0x0101 and
   0x0107.

以下のヘッダー書式の記述はプロフィール0×0101と0x0107に適用されます。

   o  pt_1_rnd: This format can convey changes to the MSN and to the RTP
      Marker bit, and it can update the RTP timestamp using scaled
      timestamp encoding.  It is protected by a 3-bit CRC.  It is
      similar in purpose to the UO-1 format in [RFC3095].

o _Pt1_rnd: この形式はMSNと、そして、RTP Markerビットへの変化を運ぶことができます、そして、それはスケーリングされたタイムスタンプコード化を使用することでRTPタイムスタンプをアップデートできます。 それは3ビットのCRCによって保護されます。 それは目的において[RFC3095]のUO-1形式と同様です。

   o  pt_1_seq_id: This format can convey changes to the MSN and to the
      IP-ID.  It is protected by a 3-bit CRC.  It is similar in purpose
      to the UO-1-ID format in [RFC3095].

o Pt_1_seq_イド: この形式はMSNと、そして、IP-IDへの変化を運ぶことができます。 それは3ビットのCRCによって保護されます。 それはUO1IDへの目的が[RFC3095]でフォーマットする同様のコネです。

   o  pt_1_seq_ts: This format can convey changes to the MSN and to the
      RTP Marker bit, and it can update the RTP Timestamp using scaled
      timestamp encoding.  It is protected by a 3-bit CRC.  It is
      similar in purpose to the UO-1-TS format in [RFC3095].

o Pt_1_seq_t: この形式はMSNと、そして、RTP Markerビットへの変化を運ぶことができます、そして、それはスケーリングされたタイムスタンプコード化を使用することでRTP Timestampをアップデートできます。 それは3ビットのCRCによって保護されます。 それは目的において[RFC3095]のUO-1-TS形式と同様です。

   o  pt_2_rnd: This format can convey changes to the MSN, to the RTP
      Marker bit, and to the RTP Timestamp.  It is protected by a 7-bit
      CRC.  It is similar in purpose to the UOR-2 format in [RFC3095].

o _Pt2_rnd: この形式はMSNと、そして、RTP Markerビットと、そして、RTP Timestampへの変化を運ぶことができます。 それは7ビットのCRCによって保護されます。 それは目的において[RFC3095]のUOR-2形式と同様です。

   o  pt_2_seq_id: This format can convey changes to the MSN and to the
      IP-ID.  It is protected by a 7-bit CRC.  It is similar in purpose
      to the UO-2-ID format in [RFC3095].

o Pt_2_seq_イド: この形式はMSNと、そして、IP-IDへの変化を運ぶことができます。 それは7ビットのCRCによって保護されます。 それは目的において[RFC3095]のUO2ID形式と同様です。

   o  pt_2_seq_ts: This format can convey changes to the MSN, to the RTP
      Marker bit and it can update the RTP Timestamp using scaled
      timestamp encoding.  It is protected by a 7-bit CRC.  It is
      similar in purpose to the UO-2-TS format in [RFC3095].

o Pt_2_seq_t: この形式はMSN、RTP Markerビットへの変化を運ぶことができます、そして、それはスケーリングされたタイムスタンプコード化を使用することでRTP Timestampをアップデートできます。 それは7ビットのCRCによって保護されます。 それは目的において[RFC3095]のUO-2-TS形式と同様です。

   o  pt_2_seq_both: This format can convey changes to both the RTP
      Timestamp and the IP-ID, in addition to the MSN and to the Marker
      bit.  It is protected by a 7-bit CRC.  It is similar in purpose to
      the UOR-2-ID extension 1 format in [RFC3095].

o __seqについてPt2_ともに: この形式はRTP TimestampとIP-IDの両方と、そして、MSNに加えたMarkerビットへの変化を運ぶことができます。 それは7ビットのCRCによって保護されます。 それは目的において拡大1が[RFC3095]でフォーマットするUOR2IDと同様です。

   The following header format descriptions apply to profiles 0x0102,
   0x0103, 0x0104, and 0x0108.

以下のヘッダー書式の記述はプロフィール0×0102、0×0103、0×0104、および0x0108に適用されます。

   o  pt_1_seq_id: This format can convey changes to the MSN and to the
      IP-ID.  It is protected by a 7-bit CRC.  It is similar in purpose
      to the UO-1-ID format in [RFC3095].

o Pt_1_seq_イド: この形式はMSNと、そして、IP-IDへの変化を運ぶことができます。 それは7ビットのCRCによって保護されます。 それはUO1IDへの目的が[RFC3095]でフォーマットする同様のコネです。

   o  pt_2_seq_id: This format can convey changes to the MSN and to the
      IP-ID.  It is protected by a 7-bit CRC.  It is similar in purpose
      to the UO-2-ID format in [RFC3095].

o Pt_2_seq_イド: この形式はMSNと、そして、IP-IDへの変化を運ぶことができます。 それは7ビットのCRCによって保護されます。 それは目的において[RFC3095]のUO2ID形式と同様です。

Pelletier & Sandlund        Standards Track                    [Page 43]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[43ページ]

6.8.2.2.  co_repair Header Format

6.8.2.2. _の共同修理Header Format

   The ROHCv2 co_repair header has the following format:

ROHCv2_の修理の共同ヘッダーには、以下の形式があります:

        0   1   2   3   4   5   6   7
       --- --- --- --- --- --- --- ---
      :         Add-CID octet         : if for small CIDs and CID 1-15
      +---+---+---+---+---+---+---+---+
      | 1   1   1   1   1   0   1   1 | discriminator
      +---+---+---+---+---+---+---+---+
      :                               :
      /   0, 1, or 2 octets of CID    / 1-2 octets if large CIDs
      :                               :
      +---+---+---+---+---+---+---+---+
      |r1 |         CRC-7             |
      +---+---+---+---+---+---+---+---+
      |        r2         |   CRC-3   |
      +---+---+---+---+---+---+---+---+
      |                               |
      /         Dynamic chain         / variable length
      |                               |
       - - - - - - - - - - - - - - - -

0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- : CIDを加えている八重奏: 小さいCIDsとCID1-15+のために---+---+---+---+---+---+---+---+ | 1 1 1 1 1 0 1 1 | 弁別器+---+---+---+---+---+---+---+---+ : : CID / 1-2八重奏の/0、1、または2八重奏、大きいCIDsであるなら: : +---+---+---+---+---+---+---+---+ |r1| CRC-7| +---+---+---+---+---+---+---+---+ | r2| CRC-3| +---+---+---+---+---+---+---+---+ | | /ダイナミックなチェーン/可変長| | - - - - - - - - - - - - - - - -

      r1: MUST be set to zero; otherwise, the decompressor MUST discard
      the packet.

r1: ゼロに設定しなければなりません。 さもなければ、減圧装置はパケットを捨てなければなりません。

      CRC-7: A 7-bit CRC over the entire uncompressed header, computed
      using the crc7 (data_value, data_length) encoding method defined
      in Section 6.8.2.4, where data_value corresponds to the entire
      uncompressed header chain and where data_length corresponds to the
      length of this header chain.

CRC-7: セクション6.8.2で定義された.4、どこデータ_が全体の解凍されたヘッダーチェーニングとデータ_長さがどこでこのヘッダーチェーンの長さに相当しているかと対応するのを評価する方法をコード化しながらcrc7(データ_価値、データ_の長さ)を使用することで計算された全体の解凍されたヘッダーの上の7ビットのCRC。

      r2: MUST be set to zero; otherwise, the decompressor MUST discard
      the packet.

r2: ゼロに設定しなければなりません。 さもなければ、減圧装置はパケットを捨てなければなりません。

      CRC-3: Encoded using the control_crc3_encoding method defined in
      Section 6.6.11.

CRC-3: セクション6.6.11で定義された方法をコード化するコントロール_crc3_を使用することで、コード化されます。

      Dynamic chain: See Section 6.5.

ダイナミックなチェーン: セクション6.5を見てください。

6.8.2.3.  General CO Header Format

6.8.2.3. 一般COヘッダー形式

   The CO header format communicates irregularities in the packet
   header.  All CO formats carry a CRC and can update the context.  All
   CO header formats use the general format defined in this section,
   with the exception of the co_repair format, which is defined in
   Section 6.8.2.2.

COヘッダー形式はパケットのヘッダーで不規則を伝えます。 すべてのCO形式が、CRCを運んで、文脈をアップデートできます。 すべてのCOヘッダー形式がこのセクションで定義された一般形式を使用します、_の修理の共同書式を除いて。(それは、セクション6.8.2で.2に定義されます)。

Pelletier & Sandlund        Standards Track                    [Page 44]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 44] RFC 5225 ROHCv2 Profiles April 2008

   The general format for a compressed header is as follows:

The general format for a compressed header is as follows:

        0   1   2   3   4   5   6   7
       --- --- --- --- --- --- --- ---
      :         Add-CID octet         : if for small CIDs and CID 1-15
      +---+---+---+---+---+---+---+---+
      |  first octet of base header   | (with type indication)
      +---+---+---+---+---+---+---+---+
      :                               :
      /   0, 1, or 2 octets of CID    / 1-2 octets if large CIDs
      :                               :
      +---+---+---+---+---+---+---+---+
      /   remainder of base header    / variable length
      +---+---+---+---+---+---+---+---+
      :                               :
      /        Irregular Chain        / variable length
      :                               :
       --- --- --- --- --- --- --- ---

0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- : Add-CID octet : if for small CIDs and CID 1-15 +---+---+---+---+---+---+---+---+ | first octet of base header | (with type indication) +---+---+---+---+---+---+---+---+ : : / 0, 1, or 2 octets of CID / 1-2 octets if large CIDs : : +---+---+---+---+---+---+---+---+ / remainder of base header / variable length +---+---+---+---+---+---+---+---+ : : / Irregular Chain / variable length : : --- --- --- --- --- --- --- ---

   The base header in the figure above is the compressed representation
   of the innermost IP header and other header(s), if any, in the
   uncompressed packet.  The base header formats are defined in
   Section 6.8.2.4.  In the formal description of the header formats,
   the base header for each profile is labeled
   <profile_name>_baseheader, where <profile_name> is defined in the
   following table:

The base header in the figure above is the compressed representation of the innermost IP header and other header(s), if any, in the uncompressed packet. The base header formats are defined in Section 6.8.2.4. In the formal description of the header formats, the base header for each profile is labeled <profile_name>_baseheader, where <profile_name> is defined in the following table:

      +------------------+----------------+
      | Profile number   | profile_name   |
      +------------------+----------------+
      | 0x0101           | rtp            |
      | 0x0102           | udp            |
      | 0x0103           | esp            |
      | 0x0104           | ip             |
      | 0x0107           | udplite_rtp    |
      | 0x0108           | udplite        |
      +------------------+----------------+

+------------------+----------------+ | Profile number | profile_name | +------------------+----------------+ | 0x0101 | rtp | | 0x0102 | udp | | 0x0103 | esp | | 0x0104 | ip | | 0x0107 | udplite_rtp | | 0x0108 | udplite | +------------------+----------------+

6.8.2.4.  Header Formats in ROHC-FN

6.8.2.4. Header Formats in ROHC-FN

   This section defines the complete set of base header formats for
   ROHCv2 profiles.  The base header formats are defined using the ROHC
   Formal Notation [RFC4997].

This section defines the complete set of base header formats for ROHCv2 profiles. The base header formats are defined using the ROHC Formal Notation [RFC4997].

Pelletier & Sandlund        Standards Track                    [Page 45]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 45] RFC 5225 ROHCv2 Profiles April 2008

// NOTE: The irregular, static, and dynamic chains (see Section 6.5)
// are defined across multiple encoding methods and are embodied
// in the correspondingly named formats within those encoding
// methods.  In particular, note that the static and dynamic
// chains ordinarily go together.  The uncompressed fields are
// defined across these two formats combined, rather than in one
// or the other of them.  The irregular chain items are likewise
// combined with a baseheader format.

// NOTE: The irregular, static, and dynamic chains (see Section 6.5) // are defined across multiple encoding methods and are embodied // in the correspondingly named formats within those encoding // methods. In particular, note that the static and dynamic // chains ordinarily go together. The uncompressed fields are // defined across these two formats combined, rather than in one // or the other of them. The irregular chain items are likewise // combined with a baseheader format.

////////////////////////////////////////////
// Constants
////////////////////////////////////////////

//////////////////////////////////////////// // Constants ////////////////////////////////////////////

// IP-ID behavior constants
IP_ID_BEHAVIOR_SEQUENTIAL         = 0;
IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED = 1;
IP_ID_BEHAVIOR_RANDOM             = 2;
IP_ID_BEHAVIOR_ZERO               = 3;

// IP-ID behavior constants IP_ID_BEHAVIOR_SEQUENTIAL = 0; IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED = 1; IP_ID_BEHAVIOR_RANDOM = 2; IP_ID_BEHAVIOR_ZERO = 3;

// UDP-lite checksum coverage behavior constants
UDP_LITE_COVERAGE_INFERRED  = 0;
UDP_LITE_COVERAGE_STATIC    = 1;
UDP_LITE_COVERAGE_IRREGULAR = 2;
// The value 3 is reserved and cannot be used for coverage behavior

// UDP-lite checksum coverage behavior constants UDP_LITE_COVERAGE_INFERRED = 0; UDP_LITE_COVERAGE_STATIC = 1; UDP_LITE_COVERAGE_IRREGULAR = 2; // The value 3 is reserved and cannot be used for coverage behavior

// Variable reordering offset
REORDERING_NONE          = 0;
REORDERING_QUARTER       = 1;
REORDERING_HALF          = 2;
REORDERING_THREEQUARTERS = 3;

// Variable reordering offset REORDERING_NONE = 0; REORDERING_QUARTER = 1; REORDERING_HALF = 2; REORDERING_THREEQUARTERS = 3;

// Profile names and versions
PROFILE_RTP_0101     = 0x0101;
PROFILE_UDP_0102     = 0x0102;
PROFILE_ESP_0103     = 0x0103;
PROFILE_IP_0104      = 0x0104;
PROFILE_RTP_0107     = 0x0107; // With UDP-LITE
PROFILE_UDPLITE_0108 = 0x0108; // Without RTP

// Profile names and versions PROFILE_RTP_0101 = 0x0101; PROFILE_UDP_0102 = 0x0102; PROFILE_ESP_0103 = 0x0103; PROFILE_IP_0104 = 0x0104; PROFILE_RTP_0107 = 0x0107; // With UDP-LITE PROFILE_UDPLITE_0108 = 0x0108; // Without RTP

// Default values for RTP timestamp encoding
TS_STRIDE_DEFAULT    = 160;
TIME_STRIDE_DEFAULT  = 0;

// Default values for RTP timestamp encoding TS_STRIDE_DEFAULT = 160; TIME_STRIDE_DEFAULT = 0;

////////////////////////////////////////////
// Global control fields
////////////////////////////////////////////

//////////////////////////////////////////// // Global control fields ////////////////////////////////////////////

CONTROL {

CONTROL {

Pelletier & Sandlund        Standards Track                    [Page 46]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 46] RFC 5225 ROHCv2 Profiles April 2008

  profile                                    [ 16 ];
  msn                                        [ 16 ];
  reorder_ratio                              [  2 ];
  // ip_id fields are for innermost IP header only
  ip_id_offset                               [ 16 ];
  ip_id_behavior_innermost                   [  2 ];
  // The following are only used in RTP-based profiles
  ts_stride                                  [ 32 ];
  time_stride                                [ 32 ];
  ts_scaled                                  [ 32 ];
  ts_offset                                  [ 32 ];
  // UDP-lite-based profiles only
  coverage_behavior                          [  2 ];
}

profile [ 16 ]; msn [ 16 ]; reorder_ratio [ 2 ]; // ip_id fields are for innermost IP header only ip_id_offset [ 16 ]; ip_id_behavior_innermost [ 2 ]; // The following are only used in RTP-based profiles ts_stride [ 32 ]; time_stride [ 32 ]; ts_scaled [ 32 ]; ts_offset [ 32 ]; // UDP-lite-based profiles only coverage_behavior [ 2 ]; }

///////////////////////////////////////////////
// Encoding methods not specified in FN syntax:
///////////////////////////////////////////////

/////////////////////////////////////////////// // Encoding methods not specified in FN syntax: ///////////////////////////////////////////////

baseheader_extension_headers       "defined in Section 6.6.1";
baseheader_outer_headers           "defined in Section 6.6.2";
control_crc3_encoding              "defined in Section 6.6.11";
inferred_ip_v4_header_checksum     "defined in Section 6.6.4";
inferred_ip_v4_length              "defined in Section 6.6.6";
inferred_ip_v6_length              "defined in Section 6.6.7";
inferred_mine_header_checksum      "defined in Section 6.6.5";
inferred_scaled_field              "defined in Section 6.6.10";
inferred_sequential_ip_id          "defined in Section 6.6.12";
inferred_udp_length                "defined in Section 6.6.3";
list_csrc(cc_value)                "defined in Section 6.6.13";
timer_based_lsb(time_stride, k, p) "defined in Section 6.6.9";

baseheader_extension_headers "defined in Section 6.6.1"; baseheader_outer_headers "defined in Section 6.6.2"; control_crc3_encoding "defined in Section 6.6.11"; inferred_ip_v4_header_checksum "defined in Section 6.6.4"; inferred_ip_v4_length "defined in Section 6.6.6"; inferred_ip_v6_length "defined in Section 6.6.7"; inferred_mine_header_checksum "defined in Section 6.6.5"; inferred_scaled_field "defined in Section 6.6.10"; inferred_sequential_ip_id "defined in Section 6.6.12"; inferred_udp_length "defined in Section 6.6.3"; list_csrc(cc_value) "defined in Section 6.6.13"; timer_based_lsb(time_stride, k, p) "defined in Section 6.6.9";

////////////////////////////////////////////
// General encoding methods
////////////////////////////////////////////

//////////////////////////////////////////// // General encoding methods ////////////////////////////////////////////

static_or_irreg(flag, width)
{
  UNCOMPRESSED {
    field [ width ];
  }

static_or_irreg(flag, width) { UNCOMPRESSED { field [ width ]; }

  COMPRESSED irreg_enc {
    ENFORCE(flag == 1);
    field =:= irregular(width) [ width ];
  }

COMPRESSED irreg_enc { ENFORCE(flag == 1); field =:= irregular(width) [ width ]; }

  COMPRESSED static_enc {

COMPRESSED static_enc {

Pelletier & Sandlund        Standards Track                    [Page 47]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 47] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(flag == 0);
    field =:= static [ 0 ];
  }
}

ENFORCE(flag == 0); field =:= static [ 0 ]; } }

optional_32(flag)
{
  UNCOMPRESSED {
    item [ 0, 32 ];
  }

optional_32(flag) { UNCOMPRESSED { item [ 0, 32 ]; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    item =:= irregular(32) [ 32 ];
  }

COMPRESSED present { ENFORCE(flag == 1); item =:= irregular(32) [ 32 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    item =:= compressed_value(0, 0) [ 0 ];
  }
}

COMPRESSED not_present { ENFORCE(flag == 0); item =:= compressed_value(0, 0) [ 0 ]; } }

// Send the entire value, or keep previous value
sdvl_or_static(flag)
{
  UNCOMPRESSED {
    field [ 32 ];
  }

// Send the entire value, or keep previous value sdvl_or_static(flag) { UNCOMPRESSED { field [ 32 ]; }

  COMPRESSED present_7bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^7);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '0' [ 1 ];
    field                 [ 7 ];
  }

COMPRESSED present_7bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^7); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '0' [ 1 ]; field [ 7 ]; }

  COMPRESSED present_14bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^14);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '10'   [  2 ];
    field                    [ 14 ];
  }

COMPRESSED present_14bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^14); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '10' [ 2 ]; field [ 14 ]; }

  COMPRESSED present_21bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^21);

COMPRESSED present_21bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^21);

Pelletier & Sandlund        Standards Track                    [Page 48]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 48] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '110'  [  3 ];
    field                    [ 21 ];
  }

ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '110' [ 3 ]; field [ 21 ]; }

  COMPRESSED present_28bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^28);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '1110'  [  4 ];
    field                     [ 28 ];
  }

COMPRESSED present_28bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^28); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '1110' [ 4 ]; field [ 28 ]; }

  COMPRESSED present_32bit {
    ENFORCE(flag == 1);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '11111111'  [  8 ];
    field                         [ 32 ];
  }

COMPRESSED present_32bit { ENFORCE(flag == 1); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '11111111' [ 8 ]; field [ 32 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    field =:= static;
  }
}

COMPRESSED not_present { ENFORCE(flag == 0); field =:= static; } }

// Send the entire value, or revert to default value
sdvl_or_default(flag, default_value)
{
  UNCOMPRESSED {
    field [ 32 ];
  }

// Send the entire value, or revert to default value sdvl_or_default(flag, default_value) { UNCOMPRESSED { field [ 32 ]; }

  COMPRESSED present_7bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^7);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '0' [ 1 ];
    field                 [ 7 ];
  }

COMPRESSED present_7bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^7); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '0' [ 1 ]; field [ 7 ]; }

  COMPRESSED present_14bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^14);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '10'   [  2 ];
    field                    [ 14 ];
  }

COMPRESSED present_14bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^14); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '10' [ 2 ]; field [ 14 ]; }

Pelletier & Sandlund        Standards Track                    [Page 49]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 49] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED present_21bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^21);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '110'  [  3 ];
    field                    [ 21 ];
  }

COMPRESSED present_21bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^21); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '110' [ 3 ]; field [ 21 ]; }

  COMPRESSED present_28bit {
    ENFORCE(flag == 1);
    ENFORCE(field.UVALUE < 2^28);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '1110'  [  4 ];
    field                     [ 28 ];
  }

COMPRESSED present_28bit { ENFORCE(flag == 1); ENFORCE(field.UVALUE < 2^28); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '1110' [ 4 ]; field [ 28 ]; }

  COMPRESSED present_32bit {
    ENFORCE(flag == 1);
    ENFORCE(field.CVALUE == field.UVALUE);
    discriminator =:= '11111111'  [  8 ];
    field                         [ 32 ];
  }

COMPRESSED present_32bit { ENFORCE(flag == 1); ENFORCE(field.CVALUE == field.UVALUE); discriminator =:= '11111111' [ 8 ]; field [ 32 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    field =:= uncompressed_value(32, default_value);
  }
}

COMPRESSED not_present { ENFORCE(flag == 0); field =:= uncompressed_value(32, default_value); } }

lsb_7_or_31
{
  UNCOMPRESSED {
    item [ 32 ];
  }

lsb_7_or_31 { UNCOMPRESSED { item [ 32 ]; }

  COMPRESSED lsb_7 {
    discriminator =:= '0'                       [  1 ];
    item          =:= lsb(7, ((2^7) / 4) - 1)   [  7 ];
  }

COMPRESSED lsb_7 { discriminator =:= '0' [ 1 ]; item =:= lsb(7, ((2^7) / 4) - 1) [ 7 ]; }

  COMPRESSED lsb_31 {
    discriminator =:= '1'                       [  1 ];
    item          =:= lsb(31, ((2^31) / 4) - 1) [ 31 ];
  }
}

COMPRESSED lsb_31 { discriminator =:= '1' [ 1 ]; item =:= lsb(31, ((2^31) / 4) - 1) [ 31 ]; } }

crc3(data_value, data_length)
{

crc3(data_value, data_length) {

Pelletier & Sandlund        Standards Track                    [Page 50]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 50] RFC 5225 ROHCv2 Profiles April 2008

  UNCOMPRESSED {
  }
  COMPRESSED {
    crc_value =:= crc(3, 0x06, 0x07, data_value, data_length) [ 3 ];
  }
}

UNCOMPRESSED { } COMPRESSED { crc_value =:= crc(3, 0x06, 0x07, data_value, data_length) [ 3 ]; } }

crc7(data_value, data_length)
{
  UNCOMPRESSED {
  }

crc7(data_value, data_length) { UNCOMPRESSED { }

  COMPRESSED {
    crc_value =:= crc(7, 0x79, 0x7f, data_value, data_length) [ 7 ];
  }
}

COMPRESSED { crc_value =:= crc(7, 0x79, 0x7f, data_value, data_length) [ 7 ]; } }

// Encoding method for updating a scaled field and its associated
// control fields.  Should be used both when the value is scaled
// or unscaled in a compressed format.
// Does not have an uncompressed side.
field_scaling(stride_value, scaled_value, unscaled_value, residue_value)
{
  UNCOMPRESSED {
    // Nothing
  }

// Encoding method for updating a scaled field and its associated // control fields. Should be used both when the value is scaled // or unscaled in a compressed format. // Does not have an uncompressed side. field_scaling(stride_value, scaled_value, unscaled_value, residue_value) { UNCOMPRESSED { // Nothing }

  COMPRESSED no_scaling {
    ENFORCE(stride_value == 0);
    ENFORCE(residue_value == unscaled_value);
    ENFORCE(scaled_value == 0);
  }

COMPRESSED no_scaling { ENFORCE(stride_value == 0); ENFORCE(residue_value == unscaled_value); ENFORCE(scaled_value == 0); }

  COMPRESSED scaling_used {
    ENFORCE(stride_value != 0);
    ENFORCE(residue_value == (unscaled_value % stride_value));
    ENFORCE(unscaled_value ==
            scaled_value * stride_value + residue_value);
  }
}

COMPRESSED scaling_used { ENFORCE(stride_value != 0); ENFORCE(residue_value == (unscaled_value % stride_value)); ENFORCE(unscaled_value == scaled_value * stride_value + residue_value); } }

////////////////////////////////////////////
// IPv6 Destination options header
////////////////////////////////////////////

//////////////////////////////////////////// // IPv6 Destination options header ////////////////////////////////////////////

ip_dest_opt
{
  UNCOMPRESSED {

ip_dest_opt { UNCOMPRESSED {

Pelletier & Sandlund        Standards Track                    [Page 51]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 51] RFC 5225 ROHCv2 Profiles April 2008

    next_header [ 8 ];
    length      [ 8 ];
    value       [ length.UVALUE * 64 + 48 ];
  }

next_header [ 8 ]; length [ 8 ]; value [ length.UVALUE * 64 + 48 ]; }

  DEFAULT {
    length      =:= static;
    next_header =:= static;
    value       =:= static;
  }

DEFAULT { length =:= static; next_header =:= static; value =:= static; }

  COMPRESSED dest_opt_static {
    next_header =:= irregular(8) [ 8 ];
    length      =:= irregular(8) [ 8 ];
  }

COMPRESSED dest_opt_static { next_header =:= irregular(8) [ 8 ]; length =:= irregular(8) [ 8 ]; }

  COMPRESSED dest_opt_dynamic {
    value =:=
      irregular(length.UVALUE * 64 + 48) [ length.UVALUE * 64 + 48 ];
  }

COMPRESSED dest_opt_dynamic { value =:= irregular(length.UVALUE * 64 + 48) [ length.UVALUE * 64 + 48 ]; }

  COMPRESSED dest_opt_irregular {
  }

COMPRESSED dest_opt_irregular { }

}

}

////////////////////////////////////////////
// IPv6 Hop-by-Hop options header
////////////////////////////////////////////

//////////////////////////////////////////// // IPv6 Hop-by-Hop options header ////////////////////////////////////////////

ip_hop_opt
{
  UNCOMPRESSED {
    next_header [ 8 ];
    length      [ 8 ];
    value       [ length.UVALUE * 64 + 48 ];
  }

ip_hop_opt { UNCOMPRESSED { next_header [ 8 ]; length [ 8 ]; value [ length.UVALUE * 64 + 48 ]; }

  DEFAULT {
    length      =:= static;
    next_header =:= static;
    value       =:= static;
  }

DEFAULT { length =:= static; next_header =:= static; value =:= static; }

  COMPRESSED hop_opt_static {
    next_header =:= irregular(8) [ 8 ];
    length      =:= irregular(8) [ 8 ];
  }

COMPRESSED hop_opt_static { next_header =:= irregular(8) [ 8 ]; length =:= irregular(8) [ 8 ]; }

Pelletier & Sandlund        Standards Track                    [Page 52]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 52] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED hop_opt_dynamic {
    value =:=
      irregular(length.UVALUE*64+48) [ length.UVALUE * 64 + 48 ];
  }

COMPRESSED hop_opt_dynamic { value =:= irregular(length.UVALUE*64+48) [ length.UVALUE * 64 + 48 ]; }

  COMPRESSED hop_opt_irregular {
  }

COMPRESSED hop_opt_irregular { }

}

}

////////////////////////////////////////////
// IPv6 Routing header
////////////////////////////////////////////

//////////////////////////////////////////// // IPv6 Routing header ////////////////////////////////////////////

ip_rout_opt
{
  UNCOMPRESSED {
    next_header [ 8 ];
    length      [ 8 ];
    value       [ length.UVALUE * 64 + 48 ];
  }

ip_rout_opt { UNCOMPRESSED { next_header [ 8 ]; length [ 8 ]; value [ length.UVALUE * 64 + 48 ]; }

  DEFAULT {
    length      =:= static;
    next_header =:= static;
    value       =:= static;
  }

DEFAULT { length =:= static; next_header =:= static; value =:= static; }

  COMPRESSED rout_opt_static {
    next_header =:= irregular(8)                   [ 8 ];
    length      =:= irregular(8)                   [ 8 ];
    value       =:=
      irregular(length.UVALUE*64+48) [ length.UVALUE * 64 + 48 ];
  }

COMPRESSED rout_opt_static { next_header =:= irregular(8) [ 8 ]; length =:= irregular(8) [ 8 ]; value =:= irregular(length.UVALUE*64+48) [ length.UVALUE * 64 + 48 ]; }

  COMPRESSED rout_opt_dynamic {
  }

COMPRESSED rout_opt_dynamic { }

  COMPRESSED rout_opt_irregular {
  }
}

COMPRESSED rout_opt_irregular { } }

////////////////////////////////////////////
// GRE Header
////////////////////////////////////////////

//////////////////////////////////////////// // GRE Header ////////////////////////////////////////////

optional_lsb_7_or_31(flag)
{

optional_lsb_7_or_31(flag) {

Pelletier & Sandlund        Standards Track                    [Page 53]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 53] RFC 5225 ROHCv2 Profiles April 2008

  UNCOMPRESSED {
    item [ 0, 32 ];
  }

UNCOMPRESSED { item [ 0, 32 ]; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    item =:= lsb_7_or_31 [ 8, 32 ];
  }

COMPRESSED present { ENFORCE(flag == 1); item =:= lsb_7_or_31 [ 8, 32 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    item =:= compressed_value(0, 0) [ 0 ];
  }
}

COMPRESSED not_present { ENFORCE(flag == 0); item =:= compressed_value(0, 0) [ 0 ]; } }

optional_checksum(flag_value)
{
  UNCOMPRESSED {
    value     [ 0, 16 ];
    reserved1 [ 0, 16 ];
  }

optional_checksum(flag_value) { UNCOMPRESSED { value [ 0, 16 ]; reserved1 [ 0, 16 ]; }

  COMPRESSED cs_present {
    ENFORCE(flag_value == 1);
    value     =:= irregular(16)             [ 16 ];
    reserved1 =:= uncompressed_value(16, 0) [  0 ];
  }

COMPRESSED cs_present { ENFORCE(flag_value == 1); value =:= irregular(16) [ 16 ]; reserved1 =:= uncompressed_value(16, 0) [ 0 ]; }

  COMPRESSED not_present {
    ENFORCE(flag_value == 0);
    value     =:= compressed_value(0, 0) [ 0 ];
    reserved1 =:= compressed_value(0, 0) [ 0 ];
  }
}

COMPRESSED not_present { ENFORCE(flag_value == 0); value =:= compressed_value(0, 0) [ 0 ]; reserved1 =:= compressed_value(0, 0) [ 0 ]; } }

gre_proto
{
  UNCOMPRESSED {
    protocol [ 16 ];
  }

gre_proto { UNCOMPRESSED { protocol [ 16 ]; }

  COMPRESSED ether_v4 {
    discriminator =:= '0'                            [ 1 ];
    protocol      =:= uncompressed_value(16, 0x0800) [ 0 ];
  }

COMPRESSED ether_v4 { discriminator =:= '0' [ 1 ]; protocol =:= uncompressed_value(16, 0x0800) [ 0 ]; }

  COMPRESSED ether_v6 {
    discriminator =:= '1'                            [ 1 ];

COMPRESSED ether_v6 { discriminator =:= '1' [ 1 ];

Pelletier & Sandlund        Standards Track                    [Page 54]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 54] RFC 5225 ROHCv2 Profiles April 2008

    protocol      =:= uncompressed_value(16, 0x86DD) [ 0 ];
  }
}

protocol =:= uncompressed_value(16, 0x86DD) [ 0 ]; } }

gre
{
  UNCOMPRESSED {
    c_flag                                 [  1 ];
    r_flag    =:= uncompressed_value(1, 0) [  1 ];
    k_flag                                 [  1 ];
    s_flag                                 [  1 ];
    reserved0 =:= uncompressed_value(9, 0) [  9 ];
    version   =:= uncompressed_value(3, 0) [  3 ];
    protocol                               [ 16 ];
    checksum_and_res                       [ 0, 32 ];
    key                                    [ 0, 32 ];
    sequence_number                        [ 0, 32 ];
  }

gre { UNCOMPRESSED { c_flag [ 1 ]; r_flag =:= uncompressed_value(1, 0) [ 1 ]; k_flag [ 1 ]; s_flag [ 1 ]; reserved0 =:= uncompressed_value(9, 0) [ 9 ]; version =:= uncompressed_value(3, 0) [ 3 ]; protocol [ 16 ]; checksum_and_res [ 0, 32 ]; key [ 0, 32 ]; sequence_number [ 0, 32 ]; }

  DEFAULT {
    c_flag           =:= static;
    k_flag           =:= static;
    s_flag           =:= static;
    protocol         =:= static;
    key              =:= static;
    sequence_number  =:= static;
  }

DEFAULT { c_flag =:= static; k_flag =:= static; s_flag =:= static; protocol =:= static; key =:= static; sequence_number =:= static; }

  COMPRESSED gre_static {
    ENFORCE((c_flag.UVALUE == 1 && checksum_and_res.ULENGTH == 32)
            || checksum_and_res.ULENGTH == 0);
    ENFORCE((s_flag.UVALUE == 1 && sequence_number.ULENGTH == 32)
            || sequence_number.ULENGTH == 0);
    protocol =:= gre_proto                  [ 1 ];
    c_flag   =:= irregular(1)               [ 1 ];
    k_flag   =:= irregular(1)               [ 1 ];
    s_flag   =:= irregular(1)               [ 1 ];
    padding  =:= compressed_value(4, 0)     [ 4 ];
    key      =:= optional_32(k_flag.UVALUE) [ 0, 32 ];
  }

COMPRESSED gre_static { ENFORCE((c_flag.UVALUE == 1 && checksum_and_res.ULENGTH == 32) || checksum_and_res.ULENGTH == 0); ENFORCE((s_flag.UVALUE == 1 && sequence_number.ULENGTH == 32) || sequence_number.ULENGTH == 0); protocol =:= gre_proto [ 1 ]; c_flag =:= irregular(1) [ 1 ]; k_flag =:= irregular(1) [ 1 ]; s_flag =:= irregular(1) [ 1 ]; padding =:= compressed_value(4, 0) [ 4 ]; key =:= optional_32(k_flag.UVALUE) [ 0, 32 ]; }

  COMPRESSED gre_dynamic {
    checksum_and_res =:=
      optional_checksum(c_flag.UVALUE)              [ 0, 16 ];
    sequence_number  =:= optional_32(s_flag.UVALUE) [ 0, 32 ];
  }

COMPRESSED gre_dynamic { checksum_and_res =:= optional_checksum(c_flag.UVALUE) [ 0, 16 ]; sequence_number =:= optional_32(s_flag.UVALUE) [ 0, 32 ]; }

  COMPRESSED gre_irregular {

COMPRESSED gre_irregular {

Pelletier & Sandlund        Standards Track                    [Page 55]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 55] RFC 5225 ROHCv2 Profiles April 2008

    checksum_and_res =:= optional_checksum(c_flag.UVALUE) [ 0, 16 ];
    sequence_number  =:=
      optional_lsb_7_or_31(s_flag.UVALUE)           [ 0, 8, 32 ];
  }

checksum_and_res =:= optional_checksum(c_flag.UVALUE) [ 0, 16 ]; sequence_number =:= optional_lsb_7_or_31(s_flag.UVALUE) [ 0, 8, 32 ]; }

}

}

/////////////////////////////////////////////
// MINE header
/////////////////////////////////////////////

///////////////////////////////////////////// // MINE header /////////////////////////////////////////////

mine
{
  UNCOMPRESSED {
    next_header [  8 ];
    s_bit       [  1 ];
    res_bits    [  7 ];
    checksum    [ 16 ];
    orig_dest   [ 32 ];
    orig_src    [ 0, 32 ];
  }

mine { UNCOMPRESSED { next_header [ 8 ]; s_bit [ 1 ]; res_bits [ 7 ]; checksum [ 16 ]; orig_dest [ 32 ]; orig_src [ 0, 32 ]; }

  DEFAULT {
    next_header =:= static;
    s_bit       =:= static;
    res_bits    =:= static;
    checksum    =:= inferred_mine_header_checksum;
    orig_dest   =:= static;
    orig_src    =:= static;
  }

DEFAULT { next_header =:= static; s_bit =:= static; res_bits =:= static; checksum =:= inferred_mine_header_checksum; orig_dest =:= static; orig_src =:= static; }

  COMPRESSED mine_static {
    next_header =:= irregular(8)              [  8 ];
    s_bit       =:= irregular(1)              [  1 ];
    // Reserved bits are included to achieve byte-alignment
    res_bits    =:= irregular(7)              [  7 ];
    orig_dest   =:= irregular(32)             [ 32 ];
    orig_src    =:= optional_32(s_bit.UVALUE) [ 0, 32 ];
  }

COMPRESSED mine_static { next_header =:= irregular(8) [ 8 ]; s_bit =:= irregular(1) [ 1 ]; // Reserved bits are included to achieve byte-alignment res_bits =:= irregular(7) [ 7 ]; orig_dest =:= irregular(32) [ 32 ]; orig_src =:= optional_32(s_bit.UVALUE) [ 0, 32 ]; }

  COMPRESSED mine_dynamic {
  }

COMPRESSED mine_dynamic { }

  COMPRESSED mine_irregular {
  }
}

COMPRESSED mine_irregular { } }

/////////////////////////////////////////////

/////////////////////////////////////////////

Pelletier & Sandlund        Standards Track                    [Page 56]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 56] RFC 5225 ROHCv2 Profiles April 2008

// Authentication Header (AH)
/////////////////////////////////////////////

// Authentication Header (AH) /////////////////////////////////////////////

ah
{
  UNCOMPRESSED {
    next_header                            [  8 ];
    length                                 [  8 ];
    res_bits =:= uncompressed_value(16, 0) [ 16 ];
    spi                                    [ 32 ];
    sequence_number                        [ 32 ];
    icv                   [ length.UVALUE*32-32 ];
  }

ah { UNCOMPRESSED { next_header [ 8 ]; length [ 8 ]; res_bits =:= uncompressed_value(16, 0) [ 16 ]; spi [ 32 ]; sequence_number [ 32 ]; icv [ length.UVALUE*32-32 ]; }

  DEFAULT {
    next_header     =:= static;
    length          =:= static;
    spi             =:= static;
    sequence_number =:= static;
  }

DEFAULT { next_header =:= static; length =:= static; spi =:= static; sequence_number =:= static; }

  COMPRESSED ah_static {
    next_header =:= irregular(8)      [  8 ];
    length      =:= irregular(8)      [  8 ];
    spi         =:= irregular(32)     [ 32 ];
  }

COMPRESSED ah_static { next_header =:= irregular(8) [ 8 ]; length =:= irregular(8) [ 8 ]; spi =:= irregular(32) [ 32 ]; }

  COMPRESSED ah_dynamic {
    sequence_number =:= irregular(32) [ 32 ];
    icv       =:=
      irregular(length.UVALUE*32-32)  [ length.UVALUE*32-32 ];
  }

COMPRESSED ah_dynamic { sequence_number =:= irregular(32) [ 32 ]; icv =:= irregular(length.UVALUE*32-32) [ length.UVALUE*32-32 ]; }

  COMPRESSED ah_irregular {
    sequence_number =:= lsb_7_or_31   [ 8, 32 ];
    icv       =:=
      irregular(length.UVALUE*32-32)  [ length.UVALUE*32-32 ];
  }

COMPRESSED ah_irregular { sequence_number =:= lsb_7_or_31 [ 8, 32 ]; icv =:= irregular(length.UVALUE*32-32) [ length.UVALUE*32-32 ]; }

}

}

/////////////////////////////////////////////
// IPv6 Header
/////////////////////////////////////////////

///////////////////////////////////////////// // IPv6 Header /////////////////////////////////////////////

fl_enc
{
  UNCOMPRESSED {

fl_enc { UNCOMPRESSED {

Pelletier & Sandlund        Standards Track                    [Page 57]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 57] RFC 5225 ROHCv2 Profiles April 2008

    flow_label [ 20 ];
  }

flow_label [ 20 ]; }

  COMPRESSED fl_zero {
    discriminator =:= '0'                       [ 1 ];
    flow_label    =:= uncompressed_value(20, 0) [ 0 ];
    reserved      =:= '0000'                    [ 4 ];
  }

COMPRESSED fl_zero { discriminator =:= '0' [ 1 ]; flow_label =:= uncompressed_value(20, 0) [ 0 ]; reserved =:= '0000' [ 4 ]; }

  COMPRESSED fl_non_zero {
    discriminator =:= '1'           [  1 ];
    flow_label    =:= irregular(20) [ 20 ];
  }
}

COMPRESSED fl_non_zero { discriminator =:= '1' [ 1 ]; flow_label =:= irregular(20) [ 20 ]; } }

ipv6(profile_value, is_innermost, outer_ip_flag, reorder_ratio_value)
{
  UNCOMPRESSED {
    version         =:= uncompressed_value(4, 6) [   4 ];
    tos_tc                                       [   8 ];
    flow_label                                   [  20 ];
    payload_length                               [  16 ];
    next_header                                  [   8 ];
    ttl_hopl                                     [   8 ];
    src_addr                                     [ 128 ];
    dst_addr                                     [ 128 ];
  }

ipv6(profile_value, is_innermost, outer_ip_flag, reorder_ratio_value) { UNCOMPRESSED { version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dst_addr [ 128 ]; }

  CONTROL {
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(innermost_ip.UVALUE == is_innermost);
    innermost_ip [ 1 ];
  }

CONTROL { ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(innermost_ip.UVALUE == is_innermost); innermost_ip [ 1 ]; }

  DEFAULT {
    tos_tc         =:= static;
    flow_label     =:= static;
    payload_length =:= inferred_ip_v6_length;
    next_header    =:= static;
    ttl_hopl       =:= static;
    src_addr       =:= static;
    dst_addr       =:= static;
  }

DEFAULT { tos_tc =:= static; flow_label =:= static; payload_length =:= inferred_ip_v6_length; next_header =:= static; ttl_hopl =:= static; src_addr =:= static; dst_addr =:= static; }

  COMPRESSED ipv6_static {
    version_flag        =:= '1'              [   1 ];
    innermost_ip        =:= irregular(1)     [   1 ];

COMPRESSED ipv6_static { version_flag =:= '1' [ 1 ]; innermost_ip =:= irregular(1) [ 1 ];

Pelletier & Sandlund        Standards Track                    [Page 58]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 58] RFC 5225 ROHCv2 Profiles April 2008

    reserved            =:= '0'              [   1 ];
    flow_label          =:= fl_enc           [ 5, 21 ];
    next_header         =:= irregular(8)     [   8 ];
    src_addr            =:= irregular(128)   [ 128 ];
    dst_addr            =:= irregular(128)   [ 128 ];
  }

reserved =:= '0' [ 1 ]; flow_label =:= fl_enc [ 5, 21 ]; next_header =:= irregular(8) [ 8 ]; src_addr =:= irregular(128) [ 128 ]; dst_addr =:= irregular(128) [ 128 ]; }

  COMPRESSED ipv6_endpoint_dynamic {
    ENFORCE((is_innermost == 1) &&
            (profile_value == PROFILE_IP_0104));
    tos_tc        =:= irregular(8)           [  8 ];
    ttl_hopl      =:= irregular(8)           [  8 ];
    reserved      =:= compressed_value(6, 0) [  6 ];
    reorder_ratio =:= irregular(2)           [  2 ];
    msn           =:= irregular(16)          [ 16 ];
  }

COMPRESSED ipv6_endpoint_dynamic { ENFORCE((is_innermost == 1) && (profile_value == PROFILE_IP_0104)); tos_tc =:= irregular(8) [ 8 ]; ttl_hopl =:= irregular(8) [ 8 ]; reserved =:= compressed_value(6, 0) [ 6 ]; reorder_ratio =:= irregular(2) [ 2 ]; msn =:= irregular(16) [ 16 ]; }

  COMPRESSED ipv6_regular_dynamic {
    ENFORCE((is_innermost == 0) ||
            (profile_value != PROFILE_IP_0104));
    tos_tc       =:= irregular(8) [ 8 ];
    ttl_hopl     =:= irregular(8) [ 8 ];
  }

COMPRESSED ipv6_regular_dynamic { ENFORCE((is_innermost == 0) || (profile_value != PROFILE_IP_0104)); tos_tc =:= irregular(8) [ 8 ]; ttl_hopl =:= irregular(8) [ 8 ]; }

  COMPRESSED ipv6_outer_irregular {
    ENFORCE(is_innermost == 0);
    tos_tc       =:=
        static_or_irreg(outer_ip_flag, 8) [ 0, 8 ];
    ttl_hopl     =:=
        static_or_irreg(outer_ip_flag, 8) [ 0, 8 ];
  }

COMPRESSED ipv6_outer_irregular { ENFORCE(is_innermost == 0); tos_tc =:= static_or_irreg(outer_ip_flag, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(outer_ip_flag, 8) [ 0, 8 ]; }

  COMPRESSED ipv6_innermost_irregular {
    ENFORCE(is_innermost == 1);
  }

COMPRESSED ipv6_innermost_irregular { ENFORCE(is_innermost == 1); }

}

}

/////////////////////////////////////////////
// IPv4 Header
/////////////////////////////////////////////

///////////////////////////////////////////// // IPv4 Header /////////////////////////////////////////////

ip_id_enc_dyn(behavior)
{
  UNCOMPRESSED {
    ip_id [ 16 ];
  }

ip_id_enc_dyn(behavior) { UNCOMPRESSED { ip_id [ 16 ]; }

Pelletier & Sandlund        Standards Track                    [Page 59]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 59] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED ip_id_seq {
    ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE);
    ip_id =:= irregular(16) [ 16 ];
  }

COMPRESSED ip_id_seq { ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) || (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE); ip_id =:= irregular(16) [ 16 ]; }

  COMPRESSED ip_id_random {
    ENFORCE(behavior == IP_ID_BEHAVIOR_RANDOM);
    ip_id =:= irregular(16) [ 16 ];
  }

COMPRESSED ip_id_random { ENFORCE(behavior == IP_ID_BEHAVIOR_RANDOM); ip_id =:= irregular(16) [ 16 ]; }

  COMPRESSED ip_id_zero {
    ENFORCE(behavior == IP_ID_BEHAVIOR_ZERO);
    ip_id =:= uncompressed_value(16, 0) [ 0 ];
  }
}

COMPRESSED ip_id_zero { ENFORCE(behavior == IP_ID_BEHAVIOR_ZERO); ip_id =:= uncompressed_value(16, 0) [ 0 ]; } }

ip_id_enc_irreg(behavior)
{
  UNCOMPRESSED {
    ip_id [ 16 ];
  }

ip_id_enc_irreg(behavior) { UNCOMPRESSED { ip_id [ 16 ]; }

  COMPRESSED ip_id_seq {
    ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL);
  }

COMPRESSED ip_id_seq { ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL); }

  COMPRESSED ip_id_seq_swapped {
    ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED);
  }

COMPRESSED ip_id_seq_swapped { ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED); }

  COMPRESSED ip_id_rand {
    ENFORCE(behavior == IP_ID_BEHAVIOR_RANDOM);
    ip_id =:= irregular(16) [ 16 ];
  }

COMPRESSED ip_id_rand { ENFORCE(behavior == IP_ID_BEHAVIOR_RANDOM); ip_id =:= irregular(16) [ 16 ]; }

  COMPRESSED ip_id_zero {
    ENFORCE(behavior == IP_ID_BEHAVIOR_ZERO);
    ip_id =:= uncompressed_value(16, 0) [ 0 ];
  }
}

COMPRESSED ip_id_zero { ENFORCE(behavior == IP_ID_BEHAVIOR_ZERO); ip_id =:= uncompressed_value(16, 0) [ 0 ]; } }

ipv4(profile_value, is_innermost, outer_ip_flag, ip_id_behavior_value,
  reorder_ratio_value)
{
  UNCOMPRESSED {
    version     =:= uncompressed_value(4, 4)       [  4 ];

ipv4(profile_value, is_innermost, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value) { UNCOMPRESSED { version =:= uncompressed_value(4, 4) [ 4 ];

Pelletier & Sandlund        Standards Track                    [Page 60]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 60] RFC 5225 ROHCv2 Profiles April 2008

    hdr_length  =:= uncompressed_value(4, 5)       [  4 ];
    tos_tc                                         [  8 ];
    length      =:= inferred_ip_v4_length          [ 16 ];
    ip_id                                          [ 16 ];
    rf          =:= uncompressed_value(1, 0)       [  1 ];
    df                                             [  1 ];
    mf          =:= uncompressed_value(1, 0)       [  1 ];
    frag_offset =:= uncompressed_value(13, 0)      [ 13 ];
    ttl_hopl                                       [  8 ];
    protocol                                       [  8 ];
    checksum    =:= inferred_ip_v4_header_checksum [ 16 ];
    src_addr                                       [ 32 ];
    dst_addr                                       [ 32 ];
  }

hdr_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; protocol [ 8 ]; checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dst_addr [ 32 ]; }

  CONTROL {
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(innermost_ip.UVALUE == is_innermost);
    ip_id_behavior_outer [ 2 ];
    innermost_ip [ 1 ];
  }

CONTROL { ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(innermost_ip.UVALUE == is_innermost); ip_id_behavior_outer [ 2 ]; innermost_ip [ 1 ]; }

  DEFAULT {
    tos_tc               =:= static;
    df                   =:= static;
    ttl_hopl             =:= static;
    protocol             =:= static;
    src_addr             =:= static;
    dst_addr             =:= static;
    ip_id_behavior_outer =:= static;
  }

DEFAULT { tos_tc =:= static; df =:= static; ttl_hopl =:= static; protocol =:= static; src_addr =:= static; dst_addr =:= static; ip_id_behavior_outer =:= static; }

  COMPRESSED ipv4_static {
    version_flag        =:= '0'                    [  1 ];
    innermost_ip        =:= irregular(1)           [  1 ];
    reserved            =:= '000000'               [  6 ];
    protocol            =:= irregular(8)           [  8 ];
    src_addr            =:= irregular(32)          [ 32 ];
    dst_addr            =:= irregular(32)          [ 32 ];
  }

COMPRESSED ipv4_static { version_flag =:= '0' [ 1 ]; innermost_ip =:= irregular(1) [ 1 ]; reserved =:= '000000' [ 6 ]; protocol =:= irregular(8) [ 8 ]; src_addr =:= irregular(32) [ 32 ]; dst_addr =:= irregular(32) [ 32 ]; }

  COMPRESSED ipv4_endpoint_innermost_dynamic {
    ENFORCE((is_innermost == 1) && (profile_value == PROFILE_IP_0104));
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
    reserved       =:= '000'                                 [  3 ];
    reorder_ratio  =:= irregular(2)                          [  2 ];
    df             =:= irregular(1)                          [  1 ];

COMPRESSED ipv4_endpoint_innermost_dynamic { ENFORCE((is_innermost == 1) && (profile_value == PROFILE_IP_0104)); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); reserved =:= '000' [ 3 ]; reorder_ratio =:= irregular(2) [ 2 ]; df =:= irregular(1) [ 1 ];

Pelletier & Sandlund        Standards Track                    [Page 61]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 61] RFC 5225 ROHCv2 Profiles April 2008

    ip_id_behavior_innermost =:= irregular(2)                [  2 ];
    tos_tc         =:= irregular(8)                          [  8 ];
    ttl_hopl       =:= irregular(8)                          [  8 ];
    ip_id =:= ip_id_enc_dyn(ip_id_behavior_innermost.UVALUE) [ 0, 16 ];
    msn            =:= irregular(16)                         [ 16 ];
  }

ip_id_behavior_innermost =:= irregular(2) [ 2 ]; tos_tc =:= irregular(8) [ 8 ]; ttl_hopl =:= irregular(8) [ 8 ]; ip_id =:= ip_id_enc_dyn(ip_id_behavior_innermost.UVALUE) [ 0, 16 ]; msn =:= irregular(16) [ 16 ]; }

  COMPRESSED ipv4_regular_innermost_dynamic {
    ENFORCE((is_innermost == 1) && (profile_value != PROFILE_IP_0104));
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
    reserved       =:= '00000'                               [ 5 ];
    df             =:= irregular(1)                          [ 1 ];
    ip_id_behavior_innermost =:= irregular(2)                [ 2 ];
    tos_tc         =:= irregular(8)                          [ 8 ];
    ttl_hopl       =:= irregular(8)                          [ 8 ];
    ip_id =:= ip_id_enc_dyn(ip_id_behavior_innermost.UVALUE) [ 0, 16 ];
  }

COMPRESSED ipv4_regular_innermost_dynamic { ENFORCE((is_innermost == 1) && (profile_value != PROFILE_IP_0104)); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); reserved =:= '00000' [ 5 ]; df =:= irregular(1) [ 1 ]; ip_id_behavior_innermost =:= irregular(2) [ 2 ]; tos_tc =:= irregular(8) [ 8 ]; ttl_hopl =:= irregular(8) [ 8 ]; ip_id =:= ip_id_enc_dyn(ip_id_behavior_innermost.UVALUE) [ 0, 16 ]; }

  COMPRESSED ipv4_outer_dynamic {
    ENFORCE(is_innermost == 0);
    ENFORCE(ip_id_behavior_outer.UVALUE == ip_id_behavior_value);
    reserved       =:= '00000'                             [ 5 ];
    df             =:= irregular(1)                        [ 1 ];
    ip_id_behavior_outer =:=     irregular(2)              [ 2 ];
    tos_tc         =:= irregular(8)                        [ 8 ];
    ttl_hopl       =:= irregular(8)                        [ 8 ];
    ip_id =:= ip_id_enc_dyn(ip_id_behavior_outer.UVALUE)   [ 0, 16 ];
  }

COMPRESSED ipv4_outer_dynamic { ENFORCE(is_innermost == 0); ENFORCE(ip_id_behavior_outer.UVALUE == ip_id_behavior_value); reserved =:= '00000' [ 5 ]; df =:= irregular(1) [ 1 ]; ip_id_behavior_outer =:= irregular(2) [ 2 ]; tos_tc =:= irregular(8) [ 8 ]; ttl_hopl =:= irregular(8) [ 8 ]; ip_id =:= ip_id_enc_dyn(ip_id_behavior_outer.UVALUE) [ 0, 16 ]; }

  COMPRESSED ipv4_outer_irregular {
    ENFORCE(is_innermost == 0);
    ip_id    =:=
      ip_id_enc_irreg(ip_id_behavior_outer.UVALUE)      [ 0, 16 ];
    tos_tc   =:= static_or_irreg(outer_ip_flag, 8)      [  0, 8 ];
    ttl_hopl =:= static_or_irreg(outer_ip_flag, 8)      [  0, 8 ];
  }

COMPRESSED ipv4_outer_irregular { ENFORCE(is_innermost == 0); ip_id =:= ip_id_enc_irreg(ip_id_behavior_outer.UVALUE) [ 0, 16 ]; tos_tc =:= static_or_irreg(outer_ip_flag, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(outer_ip_flag, 8) [ 0, 8 ]; }

  COMPRESSED ipv4_innermost_irregular {
    ENFORCE(is_innermost == 1);
    ip_id =:=
      ip_id_enc_irreg(ip_id_behavior_innermost.UVALUE)  [ 0, 16 ];
  }

COMPRESSED ipv4_innermost_irregular { ENFORCE(is_innermost == 1); ip_id =:= ip_id_enc_irreg(ip_id_behavior_innermost.UVALUE) [ 0, 16 ]; }

}

}

/////////////////////////////////////////////
// UDP Header
/////////////////////////////////////////////

///////////////////////////////////////////// // UDP Header /////////////////////////////////////////////

Pelletier & Sandlund        Standards Track                    [Page 62]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 62] RFC 5225 ROHCv2 Profiles April 2008

udp(profile_value, reorder_ratio_value)
{
  UNCOMPRESSED {
    ENFORCE((profile_value == PROFILE_RTP_0101) ||
            (profile_value == PROFILE_UDP_0102));
    src_port                           [ 16 ];
    dst_port                           [ 16 ];
    udp_length =:= inferred_udp_length [ 16 ];
    checksum                           [ 16 ];
  }

udp(profile_value, reorder_ratio_value) { UNCOMPRESSED { ENFORCE((profile_value == PROFILE_RTP_0101) || (profile_value == PROFILE_UDP_0102)); src_port [ 16 ]; dst_port [ 16 ]; udp_length =:= inferred_udp_length [ 16 ]; checksum [ 16 ]; }

  CONTROL {
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    checksum_used [ 1 ];
  }

CONTROL { ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); checksum_used [ 1 ]; }

  DEFAULT {
    src_port      =:= static;
    dst_port      =:= static;
    checksum_used =:= static;
  }

DEFAULT { src_port =:= static; dst_port =:= static; checksum_used =:= static; }

  COMPRESSED udp_static {
    src_port   =:= irregular(16) [ 16 ];
    dst_port   =:= irregular(16) [ 16 ];
  }

COMPRESSED udp_static { src_port =:= irregular(16) [ 16 ]; dst_port =:= irregular(16) [ 16 ]; }

  COMPRESSED udp_endpoint_dynamic {
    ENFORCE(profile_value == PROFILE_UDP_0102);
    ENFORCE(profile == PROFILE_UDP_0102);
    ENFORCE(checksum_used.UVALUE == (checksum.UVALUE != 0));
    checksum      =:= irregular(16)          [ 16 ];
    msn           =:= irregular(16)          [ 16 ];
    reserved      =:= compressed_value(6, 0) [  6 ];
    reorder_ratio =:= irregular(2)           [  2 ];
  }

COMPRESSED udp_endpoint_dynamic { ENFORCE(profile_value == PROFILE_UDP_0102); ENFORCE(profile == PROFILE_UDP_0102); ENFORCE(checksum_used.UVALUE == (checksum.UVALUE != 0)); checksum =:= irregular(16) [ 16 ]; msn =:= irregular(16) [ 16 ]; reserved =:= compressed_value(6, 0) [ 6 ]; reorder_ratio =:= irregular(2) [ 2 ]; }

  COMPRESSED udp_regular_dynamic {
    ENFORCE(profile_value == PROFILE_RTP_0101);
    ENFORCE(checksum_used.UVALUE == (checksum.UVALUE != 0));
    checksum =:= irregular(16) [ 16 ];
  }

COMPRESSED udp_regular_dynamic { ENFORCE(profile_value == PROFILE_RTP_0101); ENFORCE(checksum_used.UVALUE == (checksum.UVALUE != 0)); checksum =:= irregular(16) [ 16 ]; }

  COMPRESSED udp_zero_checksum_irregular {
    ENFORCE(checksum_used.UVALUE == 0);
    checksum =:= uncompressed_value(16, 0)   [ 0 ];
  }

COMPRESSED udp_zero_checksum_irregular { ENFORCE(checksum_used.UVALUE == 0); checksum =:= uncompressed_value(16, 0) [ 0 ]; }

Pelletier & Sandlund        Standards Track                    [Page 63]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 63] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED udp_with_checksum_irregular {
    ENFORCE(checksum_used.UVALUE == 1);
    checksum =:= irregular(16) [ 16 ];
  }

COMPRESSED udp_with_checksum_irregular { ENFORCE(checksum_used.UVALUE == 1); checksum =:= irregular(16) [ 16 ]; }

}

}

/////////////////////////////////////////////
// RTP Header
/////////////////////////////////////////////

///////////////////////////////////////////// // RTP Header /////////////////////////////////////////////

csrc_list_dynchain(presence, cc_value)
{
  UNCOMPRESSED {
    csrc_list;
  }

csrc_list_dynchain(presence, cc_value) { UNCOMPRESSED { csrc_list; }

  COMPRESSED no_list {
    ENFORCE(cc_value == 0);
    ENFORCE(presence == 0);
    csrc_list =:= uncompressed_value(0, 0) [ 0 ];
  }

COMPRESSED no_list { ENFORCE(cc_value == 0); ENFORCE(presence == 0); csrc_list =:= uncompressed_value(0, 0) [ 0 ]; }

  COMPRESSED list_present {
    ENFORCE(presence == 1);
    csrc_list =:= list_csrc(cc_value) [ VARIABLE ];
  }
}

COMPRESSED list_present { ENFORCE(presence == 1); csrc_list =:= list_csrc(cc_value) [ VARIABLE ]; } }

rtp(profile_value, ts_stride_value, time_stride_value,
    reorder_ratio_value)
{
  UNCOMPRESSED {
    ENFORCE((profile_value == PROFILE_RTP_0101) ||
            (profile_value == PROFILE_RTP_0107));
    rtp_version =:= uncompressed_value(2, 0) [  2 ];
    pad_bit                                  [  1 ];
    extension                                [  1 ];
    cc                                       [  4 ];
    marker                                   [  1 ];
    payload_type                             [  7 ];
    sequence_number                          [ 16 ];
    timestamp                                [ 32 ];
    ssrc                                     [ 32 ];
    csrc_list                                [ cc.UVALUE * 32 ];
  }

rtp(profile_value, ts_stride_value, time_stride_value, reorder_ratio_value) { UNCOMPRESSED { ENFORCE((profile_value == PROFILE_RTP_0101) || (profile_value == PROFILE_RTP_0107)); rtp_version =:= uncompressed_value(2, 0) [ 2 ]; pad_bit [ 1 ]; extension [ 1 ]; cc [ 4 ]; marker [ 1 ]; payload_type [ 7 ]; sequence_number [ 16 ]; timestamp [ 32 ]; ssrc [ 32 ]; csrc_list [ cc.UVALUE * 32 ]; }

  CONTROL {

CONTROL {

Pelletier & Sandlund        Standards Track                    [Page 64]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 64] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(time_stride_value == time_stride.UVALUE);
    ENFORCE(ts_stride_value == ts_stride.UVALUE);
    dummy_field =:= field_scaling(ts_stride.UVALUE,
      ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ];
  }

ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(time_stride_value == time_stride.UVALUE); ENFORCE(ts_stride_value == ts_stride.UVALUE); dummy_field =:= field_scaling(ts_stride.UVALUE, ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ]; }

  INITIAL {
    ts_stride     =:= uncompressed_value(32, TS_STRIDE_DEFAULT);
    time_stride   =:= uncompressed_value(32, TIME_STRIDE_DEFAULT);
  }

INITIAL { ts_stride =:= uncompressed_value(32, TS_STRIDE_DEFAULT); time_stride =:= uncompressed_value(32, TIME_STRIDE_DEFAULT); }

  DEFAULT {
    ENFORCE(msn.UVALUE == sequence_number.UVALUE);
    pad_bit         =:= static;
    extension       =:= static;
    cc              =:= static;
    marker          =:= static;
    payload_type    =:= static;
    sequence_number =:= static;
    timestamp       =:= static;
    ssrc            =:= static;
    csrc_list       =:= static;
    ts_stride       =:= static;
    time_stride     =:= static;
    ts_scaled       =:= static;
    ts_offset       =:= static;
  }

DEFAULT { ENFORCE(msn.UVALUE == sequence_number.UVALUE); pad_bit =:= static; extension =:= static; cc =:= static; marker =:= static; payload_type =:= static; sequence_number =:= static; timestamp =:= static; ssrc =:= static; csrc_list =:= static; ts_stride =:= static; time_stride =:= static; ts_scaled =:= static; ts_offset =:= static; }

  COMPRESSED rtp_static {
    ssrc            =:= irregular(32)  [ 32 ];
  }

COMPRESSED rtp_static { ssrc =:= irregular(32) [ 32 ]; }

  COMPRESSED rtp_dynamic {
    reserved        =:= compressed_value(1, 0)       [  1 ];
    reorder_ratio   =:= irregular(2)                 [  2 ];
    list_present    =:= irregular(1)                 [  1 ];
    tss_indicator   =:= irregular(1)                 [  1 ];
    tis_indicator   =:= irregular(1)                 [  1 ];
    pad_bit         =:= irregular(1)                 [  1 ];
    extension       =:= irregular(1)                 [  1 ];
    marker          =:= irregular(1)                 [  1 ];
    payload_type    =:= irregular(7)                 [  7 ];
    sequence_number =:= irregular(16)                [ 16 ];
    timestamp       =:= irregular(32)                [ 32 ];
    ts_stride       =:= sdvl_or_default(tss_indicator.CVALUE,
      TS_STRIDE_DEFAULT)                             [ VARIABLE ];

COMPRESSED rtp_dynamic { reserved =:= compressed_value(1, 0) [ 1 ]; reorder_ratio =:= irregular(2) [ 2 ]; list_present =:= irregular(1) [ 1 ]; tss_indicator =:= irregular(1) [ 1 ]; tis_indicator =:= irregular(1) [ 1 ]; pad_bit =:= irregular(1) [ 1 ]; extension =:= irregular(1) [ 1 ]; marker =:= irregular(1) [ 1 ]; payload_type =:= irregular(7) [ 7 ]; sequence_number =:= irregular(16) [ 16 ]; timestamp =:= irregular(32) [ 32 ]; ts_stride =:= sdvl_or_default(tss_indicator.CVALUE, TS_STRIDE_DEFAULT) [ VARIABLE ];

Pelletier & Sandlund        Standards Track                    [Page 65]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 65] RFC 5225 ROHCv2 Profiles April 2008

    time_stride     =:= sdvl_or_default(tis_indicator.CVALUE,
      TIME_STRIDE_DEFAULT)                           [ VARIABLE ];
    csrc_list   =:= csrc_list_dynchain(list_present.CVALUE,
      cc.UVALUE)                                     [ VARIABLE ];
  }

time_stride =:= sdvl_or_default(tis_indicator.CVALUE, TIME_STRIDE_DEFAULT) [ VARIABLE ]; csrc_list =:= csrc_list_dynchain(list_present.CVALUE, cc.UVALUE) [ VARIABLE ]; }

  COMPRESSED rtp_irregular {
  }
}

COMPRESSED rtp_irregular { } }

/////////////////////////////////////////////
// UDP-Lite Header
/////////////////////////////////////////////

///////////////////////////////////////////// // UDP-Lite Header /////////////////////////////////////////////

checksum_coverage_dynchain(behavior)
{
  UNCOMPRESSED {
    checksum_coverage [ 16 ];
  }

checksum_coverage_dynchain(behavior) { UNCOMPRESSED { checksum_coverage [ 16 ]; }

  COMPRESSED inferred_coverage {
    ENFORCE(behavior == UDP_LITE_COVERAGE_INFERRED);
    checksum_coverage =:= inferred_udp_length [  0 ];
  }

COMPRESSED inferred_coverage { ENFORCE(behavior == UDP_LITE_COVERAGE_INFERRED); checksum_coverage =:= inferred_udp_length [ 0 ]; }

  COMPRESSED static_coverage {
    ENFORCE(behavior == UDP_LITE_COVERAGE_STATIC);
    checksum_coverage =:= irregular(16)       [ 16 ];
  }

COMPRESSED static_coverage { ENFORCE(behavior == UDP_LITE_COVERAGE_STATIC); checksum_coverage =:= irregular(16) [ 16 ]; }

  COMPRESSED irregular_coverage {
    ENFORCE(behavior == UDP_LITE_COVERAGE_IRREGULAR);
    checksum_coverage =:= irregular(16)       [ 16 ];
  }
}

COMPRESSED irregular_coverage { ENFORCE(behavior == UDP_LITE_COVERAGE_IRREGULAR); checksum_coverage =:= irregular(16) [ 16 ]; } }

checksum_coverage_irregular(behavior)
{
  UNCOMPRESSED {
    checksum_coverage [ 16 ];
  }

checksum_coverage_irregular(behavior) { UNCOMPRESSED { checksum_coverage [ 16 ]; }

  COMPRESSED inferred_coverage {
    ENFORCE(behavior == UDP_LITE_COVERAGE_INFERRED);
    checksum_coverage =:= inferred_udp_length [  0 ];
  }

COMPRESSED inferred_coverage { ENFORCE(behavior == UDP_LITE_COVERAGE_INFERRED); checksum_coverage =:= inferred_udp_length [ 0 ]; }

  COMPRESSED static_coverage {

COMPRESSED static_coverage {

Pelletier & Sandlund        Standards Track                    [Page 66]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 66] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(behavior == UDP_LITE_COVERAGE_STATIC);
    checksum_coverage =:= static              [  0 ];
  }

ENFORCE(behavior == UDP_LITE_COVERAGE_STATIC); checksum_coverage =:= static [ 0 ]; }

  COMPRESSED irregular_coverage {
    ENFORCE(behavior == UDP_LITE_COVERAGE_IRREGULAR);
    checksum_coverage =:= irregular(16)       [ 16 ];
  }
}

COMPRESSED irregular_coverage { ENFORCE(behavior == UDP_LITE_COVERAGE_IRREGULAR); checksum_coverage =:= irregular(16) [ 16 ]; } }

udp_lite(profile_value, reorder_ratio_value, coverage_behavior_value)
{
  UNCOMPRESSED {
    ENFORCE((profile_value == PROFILE_RTP_0107) ||
            (profile_value == PROFILE_UDPLITE_0108));
    src_port          [ 16 ];
    dst_port          [ 16 ];
    checksum_coverage [ 16 ];
    checksum          [ 16 ];
  }

udp_lite(profile_value, reorder_ratio_value, coverage_behavior_value) { UNCOMPRESSED { ENFORCE((profile_value == PROFILE_RTP_0107) || (profile_value == PROFILE_UDPLITE_0108)); src_port [ 16 ]; dst_port [ 16 ]; checksum_coverage [ 16 ]; checksum [ 16 ]; }

  CONTROL {
    ENFORCE(profile == profile_value);
    ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
  }

CONTROL { ENFORCE(profile == profile_value); ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); }

  DEFAULT {
    src_port          =:= static;
    dst_port          =:= static;
    coverage_behavior =:= static;
  }

DEFAULT { src_port =:= static; dst_port =:= static; coverage_behavior =:= static; }

  COMPRESSED udp_lite_static {
    src_port   =:= irregular(16) [ 16 ];
    dst_port   =:= irregular(16) [ 16 ];
  }

COMPRESSED udp_lite_static { src_port =:= irregular(16) [ 16 ]; dst_port =:= irregular(16) [ 16 ]; }

  COMPRESSED udp_lite_endpoint_dynamic {
    ENFORCE(profile_value == PROFILE_UDPLITE_0108);
    reserved =:= compressed_value(4, 0)                      [  4 ];
    coverage_behavior =:= irregular(2)                       [  2 ];
    reorder_ratio     =:= irregular(2)                       [  2 ];
    checksum_coverage =:=
      checksum_coverage_dynchain(coverage_behavior.UVALUE)   [ 16 ];
    checksum          =:= irregular(16)                      [ 16 ];
    msn               =:= irregular(16)                      [ 16 ];
  }

COMPRESSED udp_lite_endpoint_dynamic { ENFORCE(profile_value == PROFILE_UDPLITE_0108); reserved =:= compressed_value(4, 0) [ 4 ]; coverage_behavior =:= irregular(2) [ 2 ]; reorder_ratio =:= irregular(2) [ 2 ]; checksum_coverage =:= checksum_coverage_dynchain(coverage_behavior.UVALUE) [ 16 ]; checksum =:= irregular(16) [ 16 ]; msn =:= irregular(16) [ 16 ]; }

Pelletier & Sandlund        Standards Track                    [Page 67]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 67] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED udp_lite_regular_dynamic {
    ENFORCE(profile_value == PROFILE_RTP_0107);
    coverage_behavior =:= irregular(2)                       [  2 ];
    reserved =:= compressed_value(6, 0)                      [  6 ];
    checksum_coverage =:=
        checksum_coverage_dynchain(coverage_behavior.UVALUE) [ 16 ];
    checksum =:= irregular(16)                               [ 16 ];
  }

COMPRESSED udp_lite_regular_dynamic { ENFORCE(profile_value == PROFILE_RTP_0107); coverage_behavior =:= irregular(2) [ 2 ]; reserved =:= compressed_value(6, 0) [ 6 ]; checksum_coverage =:= checksum_coverage_dynchain(coverage_behavior.UVALUE) [ 16 ]; checksum =:= irregular(16) [ 16 ]; }

  COMPRESSED udp_lite_irregular {
    checksum_coverage =:=
      checksum_coverage_irregular(coverage_behavior.UVALUE) [ 0, 16 ];
    checksum          =:= irregular(16)                     [ 16 ];
  }
}

COMPRESSED udp_lite_irregular { checksum_coverage =:= checksum_coverage_irregular(coverage_behavior.UVALUE) [ 0, 16 ]; checksum =:= irregular(16) [ 16 ]; } }

/////////////////////////////////////////////
// ESP Header
/////////////////////////////////////////////

///////////////////////////////////////////// // ESP Header /////////////////////////////////////////////

esp(profile_value, reorder_ratio_value)
{
  UNCOMPRESSED {
    ENFORCE(profile_value == PROFILE_ESP_0103);
    ENFORCE(msn.UVALUE == sequence_number.UVALUE % 65536);
    spi             [ 32 ];
    sequence_number [ 32 ];
  }

esp(profile_value, reorder_ratio_value) { UNCOMPRESSED { ENFORCE(profile_value == PROFILE_ESP_0103); ENFORCE(msn.UVALUE == sequence_number.UVALUE % 65536); spi [ 32 ]; sequence_number [ 32 ]; }

  CONTROL {
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
  }

CONTROL { ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); }

  DEFAULT {
    spi             =:= static;
    sequence_number =:= static;
  }

DEFAULT { spi =:= static; sequence_number =:= static; }

  COMPRESSED esp_static {
    spi =:= irregular(32)                         [ 32 ];
  }

COMPRESSED esp_static { spi =:= irregular(32) [ 32 ]; }

  COMPRESSED esp_dynamic {
    sequence_number =:= irregular(32)             [ 32 ];
    reserved        =:= compressed_value(6, 0)    [  6 ];
    reorder_ratio   =:= irregular(2)              [  2 ];
  }

COMPRESSED esp_dynamic { sequence_number =:= irregular(32) [ 32 ]; reserved =:= compressed_value(6, 0) [ 6 ]; reorder_ratio =:= irregular(2) [ 2 ]; }

Pelletier & Sandlund        Standards Track                    [Page 68]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 68] RFC 5225 ROHCv2 Profiles April 2008

  COMPRESSED esp_irregular {
  }
}

COMPRESSED esp_irregular { } }

///////////////////////////////////////////////////
// Encoding methods used in the profiles' CO headers
///////////////////////////////////////////////////

/////////////////////////////////////////////////// // Encoding methods used in the profiles' CO headers ///////////////////////////////////////////////////

// Variable reordering offset used for MSN
msn_lsb(k)
{
  UNCOMPRESSED {
    master [ VARIABLE ];
  }

// Variable reordering offset used for MSN msn_lsb(k) { UNCOMPRESSED { master [ VARIABLE ]; }

  COMPRESSED none {
    ENFORCE(reorder_ratio.UVALUE == REORDERING_NONE);
    master =:= lsb(k, 1);
  }

COMPRESSED none { ENFORCE(reorder_ratio.UVALUE == REORDERING_NONE); master =:= lsb(k, 1); }

  COMPRESSED quarter {
    ENFORCE(reorder_ratio.UVALUE == REORDERING_QUARTER);
    master =:= lsb(k, ((2^k) / 4) - 1);
  }

COMPRESSED quarter { ENFORCE(reorder_ratio.UVALUE == REORDERING_QUARTER); master =:= lsb(k, ((2^k) / 4) - 1); }

  COMPRESSED half {
    ENFORCE(reorder_ratio.UVALUE == REORDERING_HALF);
    master =:= lsb(k, ((2^k) / 2) - 1);
  }

COMPRESSED half { ENFORCE(reorder_ratio.UVALUE == REORDERING_HALF); master =:= lsb(k, ((2^k) / 2) - 1); }

  COMPRESSED threequarters {
    ENFORCE(reorder_ratio.UVALUE == REORDERING_THREEQUARTERS);
    master =:= lsb(k, (((2^k) * 3) / 4) - 1);
  }
}

COMPRESSED threequarters { ENFORCE(reorder_ratio.UVALUE == REORDERING_THREEQUARTERS); master =:= lsb(k, (((2^k) * 3) / 4) - 1); } }

ip_id_lsb(behavior, k)
{
  UNCOMPRESSED {
    ip_id [ 16 ];
  }

ip_id_lsb(behavior, k) { UNCOMPRESSED { ip_id [ 16 ]; }

  CONTROL {
    ip_id_nbo    [ 16 ];
  }

CONTROL { ip_id_nbo [ 16 ]; }

  COMPRESSED nbo {
    ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL);

COMPRESSED nbo { ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL);

Pelletier & Sandlund        Standards Track                    [Page 69]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 69] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE);
    ip_id_offset =:= lsb(k, ((2^k) / 4) - 1) [ k ];
  }

ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE); ip_id_offset =:= lsb(k, ((2^k) / 4) - 1) [ k ]; }

  COMPRESSED non_nbo {
    ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED);
    ENFORCE(ip_id_nbo.UVALUE ==
            (ip_id.UVALUE / 256) + (ip_id.UVALUE % 256) * 256);
    ENFORCE(ip_id_nbo.ULENGTH == 16);
    ENFORCE(ip_id_offset.UVALUE == ip_id_nbo.UVALUE - msn.UVALUE);
    ip_id_offset =:= lsb(k, ((2^k) / 4) - 1) [ k ];
  }
}

COMPRESSED non_nbo { ENFORCE(behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED); ENFORCE(ip_id_nbo.UVALUE == (ip_id.UVALUE / 256) + (ip_id.UVALUE % 256) * 256); ENFORCE(ip_id_nbo.ULENGTH == 16); ENFORCE(ip_id_offset.UVALUE == ip_id_nbo.UVALUE - msn.UVALUE); ip_id_offset =:= lsb(k, ((2^k) / 4) - 1) [ k ]; } }

ip_id_sequential_variable(behavior, indicator)
{
  UNCOMPRESSED {
    ip_id [ 16 ];
  }

ip_id_sequential_variable(behavior, indicator) { UNCOMPRESSED { ip_id [ 16 ]; }

  COMPRESSED short {
    ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    ENFORCE(indicator == 0);
    ip_id =:= ip_id_lsb(behavior, 8) [ 8 ];
  }

COMPRESSED short { ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) || (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); ENFORCE(indicator == 0); ip_id =:= ip_id_lsb(behavior, 8) [ 8 ]; }

  COMPRESSED long {
    ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    ENFORCE(indicator == 1);
    ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE);
    ip_id =:= irregular(16)  [ 16 ];
  }

COMPRESSED long { ENFORCE((behavior == IP_ID_BEHAVIOR_SEQUENTIAL) || (behavior == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); ENFORCE(indicator == 1); ENFORCE(ip_id_offset.UVALUE == ip_id.UVALUE - msn.UVALUE); ip_id =:= irregular(16) [ 16 ]; }

  COMPRESSED not_present {
    ENFORCE((behavior == IP_ID_BEHAVIOR_RANDOM) ||
            (behavior == IP_ID_BEHAVIOR_ZERO));
  }
}

COMPRESSED not_present { ENFORCE((behavior == IP_ID_BEHAVIOR_RANDOM) || (behavior == IP_ID_BEHAVIOR_ZERO)); } }

dont_fragment(version)
{
  UNCOMPRESSED {
    df [ 0, 1 ];
  }

dont_fragment(version) { UNCOMPRESSED { df [ 0, 1 ]; }

  COMPRESSED v4 {

COMPRESSED v4 {

Pelletier & Sandlund        Standards Track                    [Page 70]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 70] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(version == 4);
    df =:= irregular(1) [ 1 ];
  }

ENFORCE(version == 4); df =:= irregular(1) [ 1 ]; }

  COMPRESSED v6 {
    ENFORCE(version == 6);
    unused =:= compressed_value(1, 0) [ 1 ];
  }
}

COMPRESSED v6 { ENFORCE(version == 6); unused =:= compressed_value(1, 0) [ 1 ]; } }

pt_irr_or_static(flag)
{
  UNCOMPRESSED {
    payload_type [ 7 ];
  }

pt_irr_or_static(flag) { UNCOMPRESSED { payload_type [ 7 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    payload_type =:= static [ 0 ];
  }

COMPRESSED not_present { ENFORCE(flag == 0); payload_type =:= static [ 0 ]; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    reserved     =:= compressed_value(1, 0) [ 1 ];
    payload_type =:= irregular(7)           [ 7 ];
  }
}

COMPRESSED present { ENFORCE(flag == 1); reserved =:= compressed_value(1, 0) [ 1 ]; payload_type =:= irregular(7) [ 7 ]; } }

csrc_list_presence(presence, cc_value)
{
  UNCOMPRESSED {
    csrc_list;
  }

csrc_list_presence(presence, cc_value) { UNCOMPRESSED { csrc_list; }

  COMPRESSED no_list {
    ENFORCE(presence == 0);
    csrc_list =:= static [ 0 ];
  }

COMPRESSED no_list { ENFORCE(presence == 0); csrc_list =:= static [ 0 ]; }

  COMPRESSED list_present {
    ENFORCE(presence == 1);
    csrc_list =:= list_csrc(cc_value) [ VARIABLE ];
  }
}

COMPRESSED list_present { ENFORCE(presence == 1); csrc_list =:= list_csrc(cc_value) [ VARIABLE ]; } }

scaled_ts_lsb(time_stride_value, k)
{
  UNCOMPRESSED {

scaled_ts_lsb(time_stride_value, k) { UNCOMPRESSED {

Pelletier & Sandlund        Standards Track                    [Page 71]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 71] RFC 5225 ROHCv2 Profiles April 2008

    timestamp [ 32 ];
  }

timestamp [ 32 ]; }

  COMPRESSED timerbased {
    ENFORCE(time_stride_value != 0);
    timestamp =:= timer_based_lsb(time_stride_value, k,
                                  ((2^k) / 2) - 1);
  }

COMPRESSED timerbased { ENFORCE(time_stride_value != 0); timestamp =:= timer_based_lsb(time_stride_value, k, ((2^k) / 2) - 1); }

  COMPRESSED regular {
    ENFORCE(time_stride_value == 0);
    timestamp =:= lsb(k, ((2^k) / 4) - 1);
  }
}

COMPRESSED regular { ENFORCE(time_stride_value == 0); timestamp =:= lsb(k, ((2^k) / 4) - 1); } }

// Self-describing variable length encoding with reordering offset
sdvl_sn_lsb(field_width)
{
  UNCOMPRESSED {
    field [ field_width ];
  }

// Self-describing variable length encoding with reordering offset sdvl_sn_lsb(field_width) { UNCOMPRESSED { field [ field_width ]; }

  COMPRESSED lsb7 {
    discriminator =:= '0'   [ 1 ];
    field =:= msn_lsb(7)    [ 7 ];
  }

COMPRESSED lsb7 { discriminator =:= '0' [ 1 ]; field =:= msn_lsb(7) [ 7 ]; }

  COMPRESSED lsb14 {
    discriminator =:= '10'  [  2 ];
    field =:= msn_lsb(14)   [ 14 ];
  }

COMPRESSED lsb14 { discriminator =:= '10' [ 2 ]; field =:= msn_lsb(14) [ 14 ]; }

  COMPRESSED lsb21 {
    discriminator =:= '110'  [  3 ];
    field =:= msn_lsb(21)    [ 21 ];
  }

COMPRESSED lsb21 { discriminator =:= '110' [ 3 ]; field =:= msn_lsb(21) [ 21 ]; }

  COMPRESSED lsb28 {
    discriminator =:= '1110' [  4 ];
    field =:= msn_lsb(28)    [ 28 ];
  }

COMPRESSED lsb28 { discriminator =:= '1110' [ 4 ]; field =:= msn_lsb(28) [ 28 ]; }

  COMPRESSED lsb32 {
    discriminator =:= '11111111'        [  8 ];
    field =:= irregular(field_width)    [ field_width ];
  }
}

COMPRESSED lsb32 { discriminator =:= '11111111' [ 8 ]; field =:= irregular(field_width) [ field_width ]; } }

Pelletier & Sandlund        Standards Track                    [Page 72]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 72] RFC 5225 ROHCv2 Profiles April 2008

// Self-describing variable length encoding
sdvl_lsb(field_width)
{
  UNCOMPRESSED {
    field [ field_width ];
  }

// Self-describing variable length encoding sdvl_lsb(field_width) { UNCOMPRESSED { field [ field_width ]; }

  COMPRESSED lsb7 {
    discriminator =:= '0'               [ 1 ];
    field =:= lsb(7, ((2^7) / 4) - 1)   [ 7 ];
  }

COMPRESSED lsb7 { discriminator =:= '0' [ 1 ]; field =:= lsb(7, ((2^7) / 4) - 1) [ 7 ]; }

  COMPRESSED lsb14 {
    discriminator =:= '10'              [  2 ];
    field =:= lsb(14, ((2^14) / 4) - 1) [ 14 ];
  }

COMPRESSED lsb14 { discriminator =:= '10' [ 2 ]; field =:= lsb(14, ((2^14) / 4) - 1) [ 14 ]; }

  COMPRESSED lsb21 {
    discriminator =:= '110'             [  3 ];
    field =:= lsb(21, ((2^21) / 4) - 1) [ 21 ];
  }

COMPRESSED lsb21 { discriminator =:= '110' [ 3 ]; field =:= lsb(21, ((2^21) / 4) - 1) [ 21 ]; }

  COMPRESSED lsb28 {
    discriminator =:= '1110'            [  4 ];
    field =:= lsb(28, ((2^28) / 4) - 1) [ 28 ];
  }

COMPRESSED lsb28 { discriminator =:= '1110' [ 4 ]; field =:= lsb(28, ((2^28) / 4) - 1) [ 28 ]; }

  COMPRESSED lsb32 {
    discriminator =:= '11111111'        [  8 ];
    field =:= irregular(field_width)    [ field_width ];
  }
}

COMPRESSED lsb32 { discriminator =:= '11111111' [ 8 ]; field =:= irregular(field_width) [ field_width ]; } }

sdvl_scaled_ts_lsb(time_stride)
{
   UNCOMPRESSED {
     field [ 32 ];
   }

sdvl_scaled_ts_lsb(time_stride) { UNCOMPRESSED { field [ 32 ]; }

   COMPRESSED lsb7 {
     discriminator =:= '0'                     [  1 ];
     field =:= scaled_ts_lsb(time_stride, 7)   [  7 ];
   }

COMPRESSED lsb7 { discriminator =:= '0' [ 1 ]; field =:= scaled_ts_lsb(time_stride, 7) [ 7 ]; }

   COMPRESSED lsb14 {
     discriminator =:= '10'                    [  2 ];
     field =:= scaled_ts_lsb(time_stride, 14)  [ 14 ];
   }

COMPRESSED lsb14 { discriminator =:= '10' [ 2 ]; field =:= scaled_ts_lsb(time_stride, 14) [ 14 ]; }

Pelletier & Sandlund        Standards Track                    [Page 73]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 73] RFC 5225 ROHCv2 Profiles April 2008

   COMPRESSED lsb21 {
     discriminator =:= '110'                   [  3 ];
     field =:= scaled_ts_lsb(time_stride, 21)  [ 21 ];
   }

COMPRESSED lsb21 { discriminator =:= '110' [ 3 ]; field =:= scaled_ts_lsb(time_stride, 21) [ 21 ]; }

   COMPRESSED lsb28 {
     discriminator =:= '1110'                  [  4 ];
     field =:= scaled_ts_lsb(time_stride, 28)  [ 28 ];
   }

COMPRESSED lsb28 { discriminator =:= '1110' [ 4 ]; field =:= scaled_ts_lsb(time_stride, 28) [ 28 ]; }

   COMPRESSED lsb32 {
     discriminator =:= '11111111'              [  8 ];
     field =:= irregular(32)                   [ 32 ];
   }
}

COMPRESSED lsb32 { discriminator =:= '11111111' [ 8 ]; field =:= irregular(32) [ 32 ]; } }

variable_scaled_timestamp(tss_flag, tsc_flag, ts_stride, time_stride)
{
  UNCOMPRESSED {
    scaled_value [ 32 ];
  }

variable_scaled_timestamp(tss_flag, tsc_flag, ts_stride, time_stride) { UNCOMPRESSED { scaled_value [ 32 ]; }

  COMPRESSED present {
    ENFORCE((tss_flag == 0) && (tsc_flag == 1));
    ENFORCE(ts_stride != 0);
    scaled_value =:= sdvl_scaled_ts_lsb(time_stride) [ VARIABLE ];
  }

COMPRESSED present { ENFORCE((tss_flag == 0) && (tsc_flag == 1)); ENFORCE(ts_stride != 0); scaled_value =:= sdvl_scaled_ts_lsb(time_stride) [ VARIABLE ]; }

  COMPRESSED not_present {
    ENFORCE(((tss_flag == 1) && (tsc_flag == 0)) ||
            ((tss_flag == 0) && (tsc_flag == 0)));
  }
}

COMPRESSED not_present { ENFORCE(((tss_flag == 1) && (tsc_flag == 0)) || ((tss_flag == 0) && (tsc_flag == 0))); } }

variable_unscaled_timestamp(tss_flag, tsc_flag)
{
  UNCOMPRESSED {
    timestamp [ 32 ];
  }

variable_unscaled_timestamp(tss_flag, tsc_flag) { UNCOMPRESSED { timestamp [ 32 ]; }

  COMPRESSED present {
    ENFORCE(((tss_flag == 1) && (tsc_flag == 0)) ||
            ((tss_flag == 0) && (tsc_flag == 0)));
    timestamp =:= sdvl_lsb(32);
  }

COMPRESSED present { ENFORCE(((tss_flag == 1) && (tsc_flag == 0)) || ((tss_flag == 0) && (tsc_flag == 0))); timestamp =:= sdvl_lsb(32); }

  COMPRESSED not_present {
    ENFORCE((tss_flag == 0) && (tsc_flag == 1));

COMPRESSED not_present { ENFORCE((tss_flag == 0) && (tsc_flag == 1));

Pelletier & Sandlund        Standards Track                    [Page 74]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 74] RFC 5225 ROHCv2 Profiles April 2008

  }
}

} }

profile_1_7_flags1_enc(flag, ip_version)
{
  UNCOMPRESSED {
    ip_outer_indicator  [ 1 ];
    ttl_hopl_indicator  [ 1 ];
    tos_tc_indicator    [ 1 ];
    df                  [ 0, 1 ];
    ip_id_behavior      [ 2 ];
    reorder_ratio       [ 2 ];
  }

profile_1_7_flags1_enc(flag, ip_version) { UNCOMPRESSED { ip_outer_indicator [ 1 ]; ttl_hopl_indicator [ 1 ]; tos_tc_indicator [ 1 ]; df [ 0, 1 ]; ip_id_behavior [ 2 ]; reorder_ratio [ 2 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    ENFORCE(ip_outer_indicator.CVALUE == 0);
    ENFORCE(ttl_hopl_indicator.CVALUE == 0);
    ENFORCE(tos_tc_indicator.CVALUE == 0);
    df                   =:= static;
    ip_id_behavior       =:= static;
    reorder_ratio        =:= static;
  }

COMPRESSED not_present { ENFORCE(flag == 0); ENFORCE(ip_outer_indicator.CVALUE == 0); ENFORCE(ttl_hopl_indicator.CVALUE == 0); ENFORCE(tos_tc_indicator.CVALUE == 0); df =:= static; ip_id_behavior =:= static; reorder_ratio =:= static; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    ip_outer_indicator  =:= irregular(1)                [ 1 ];
    ttl_hopl_indicator  =:= irregular(1)                [ 1 ];
    tos_tc_indicator    =:= irregular(1)                [ 1 ];
    df                  =:= dont_fragment(ip_version)   [ 1 ];
    ip_id_behavior      =:= irregular(2)                [ 2 ];
    reorder_ratio       =:= irregular(2)                [ 2 ];
  }
}

COMPRESSED present { ENFORCE(flag == 1); ip_outer_indicator =:= irregular(1) [ 1 ]; ttl_hopl_indicator =:= irregular(1) [ 1 ]; tos_tc_indicator =:= irregular(1) [ 1 ]; df =:= dont_fragment(ip_version) [ 1 ]; ip_id_behavior =:= irregular(2) [ 2 ]; reorder_ratio =:= irregular(2) [ 2 ]; } }

profile_1_flags2_enc(flag)
{
  UNCOMPRESSED {
    list_indicator        [ 1 ];
    pt_indicator          [ 1 ];
    time_stride_indicator [ 1 ];
    pad_bit               [ 1 ];
    extension             [ 1 ];
  }

profile_1_flags2_enc(flag) { UNCOMPRESSED { list_indicator [ 1 ]; pt_indicator [ 1 ]; time_stride_indicator [ 1 ]; pad_bit [ 1 ]; extension [ 1 ]; }

  COMPRESSED not_present{
    ENFORCE(flag == 0);
    ENFORCE(list_indicator.UVALUE == 0);

COMPRESSED not_present{ ENFORCE(flag == 0); ENFORCE(list_indicator.UVALUE == 0);

Pelletier & Sandlund        Standards Track                    [Page 75]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 75] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(pt_indicator.UVALUE == 0);
    ENFORCE(time_stride_indicator.UVALUE == 0);
    pad_bit      =:= static;
    extension    =:= static;
  }

ENFORCE(pt_indicator.UVALUE == 0); ENFORCE(time_stride_indicator.UVALUE == 0); pad_bit =:= static; extension =:= static; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    list_indicator =:= irregular(1)                  [ 1 ];
    pt_indicator   =:= irregular(1)                  [ 1 ];
    time_stride_indicator =:= irregular(1)           [ 1 ];
    pad_bit        =:= irregular(1)                  [ 1 ];
    extension      =:= irregular(1)                  [ 1 ];
    reserved       =:= compressed_value(3, 0)        [ 3 ];
  }
}

COMPRESSED present { ENFORCE(flag == 1); list_indicator =:= irregular(1) [ 1 ]; pt_indicator =:= irregular(1) [ 1 ]; time_stride_indicator =:= irregular(1) [ 1 ]; pad_bit =:= irregular(1) [ 1 ]; extension =:= irregular(1) [ 1 ]; reserved =:= compressed_value(3, 0) [ 3 ]; } }

profile_2_3_4_flags_enc(flag, ip_version)
{
  UNCOMPRESSED {
    ip_outer_indicator [ 1 ];
    df                 [ 0, 1 ];
    ip_id_behavior     [ 2 ];
  }

profile_2_3_4_flags_enc(flag, ip_version) { UNCOMPRESSED { ip_outer_indicator [ 1 ]; df [ 0, 1 ]; ip_id_behavior [ 2 ]; }

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    ENFORCE(ip_outer_indicator.CVALUE == 0);
    df                 =:= static;
    ip_id_behavior     =:= static;
  }

COMPRESSED not_present { ENFORCE(flag == 0); ENFORCE(ip_outer_indicator.CVALUE == 0); df =:= static; ip_id_behavior =:= static; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    ip_outer_indicator =:= irregular(1)              [ 1 ];
    df                 =:= dont_fragment(ip_version) [ 1 ];
    ip_id_behavior     =:= irregular(2)              [ 2 ];
    reserved           =:= compressed_value(4, 0)    [ 4 ];
  }
}

COMPRESSED present { ENFORCE(flag == 1); ip_outer_indicator =:= irregular(1) [ 1 ]; df =:= dont_fragment(ip_version) [ 1 ]; ip_id_behavior =:= irregular(2) [ 2 ]; reserved =:= compressed_value(4, 0) [ 4 ]; } }

profile_8_flags_enc(flag, ip_version)
{
  UNCOMPRESSED {
    ip_outer_indicator  [ 1 ];
    df                  [ 0, 1 ];
    ip_id_behavior      [ 2 ];
    coverage_behavior   [ 2 ];

profile_8_flags_enc(flag, ip_version) { UNCOMPRESSED { ip_outer_indicator [ 1 ]; df [ 0, 1 ]; ip_id_behavior [ 2 ]; coverage_behavior [ 2 ];

Pelletier & Sandlund        Standards Track                    [Page 76]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 76] RFC 5225 ROHCv2 Profiles April 2008

  }

}

  COMPRESSED not_present {
    ENFORCE(flag == 0);
    ENFORCE(ip_outer_indicator.CVALUE == 0);
    df                  =:= static;
    ip_id_behavior      =:= static;
    coverage_behavior   =:= static;
  }

COMPRESSED not_present { ENFORCE(flag == 0); ENFORCE(ip_outer_indicator.CVALUE == 0); df =:= static; ip_id_behavior =:= static; coverage_behavior =:= static; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    reserved            =:= compressed_value(2, 0)      [ 2 ];
    ip_outer_indicator  =:= irregular(1)                [ 1 ];
    df                  =:= dont_fragment(ip_version)   [ 1 ];
    ip_id_behavior      =:= irregular(2)                [ 2 ];
    coverage_behavior   =:= irregular(2)                [ 2 ];
  }
}

COMPRESSED present { ENFORCE(flag == 1); reserved =:= compressed_value(2, 0) [ 2 ]; ip_outer_indicator =:= irregular(1) [ 1 ]; df =:= dont_fragment(ip_version) [ 1 ]; ip_id_behavior =:= irregular(2) [ 2 ]; coverage_behavior =:= irregular(2) [ 2 ]; } }

profile_7_flags2_enc(flag)
{
  UNCOMPRESSED {
    list_indicator          [ 1 ];
    pt_indicator            [ 1 ];
    time_stride_indicator   [ 1 ];
    pad_bit                 [ 1 ];
    extension               [ 1 ];
    coverage_behavior       [ 2 ];
  }

profile_7_flags2_enc(flag) { UNCOMPRESSED { list_indicator [ 1 ]; pt_indicator [ 1 ]; time_stride_indicator [ 1 ]; pad_bit [ 1 ]; extension [ 1 ]; coverage_behavior [ 2 ]; }

  COMPRESSED not_present{
    ENFORCE(flag == 0);
    ENFORCE(list_indicator.CVALUE == 0);
    ENFORCE(pt_indicator.CVALUE == 0);
    ENFORCE(time_stride_indicator.CVALUE == 0);
    pad_bit             =:= static;
    extension           =:= static;
    coverage_behavior   =:= static;
  }

COMPRESSED not_present{ ENFORCE(flag == 0); ENFORCE(list_indicator.CVALUE == 0); ENFORCE(pt_indicator.CVALUE == 0); ENFORCE(time_stride_indicator.CVALUE == 0); pad_bit =:= static; extension =:= static; coverage_behavior =:= static; }

  COMPRESSED present {
    ENFORCE(flag == 1);
    reserved       =:= compressed_value(1, 0)      [ 1 ];
    list_indicator =:= irregular(1)                [ 1 ];
    pt_indicator   =:= irregular(1)                [ 1 ];
    time_stride_indicator =:= irregular(1)         [ 1 ];
    pad_bit        =:= irregular(1)                [ 1 ];

COMPRESSED present { ENFORCE(flag == 1); reserved =:= compressed_value(1, 0) [ 1 ]; list_indicator =:= irregular(1) [ 1 ]; pt_indicator =:= irregular(1) [ 1 ]; time_stride_indicator =:= irregular(1) [ 1 ]; pad_bit =:= irregular(1) [ 1 ];

Pelletier & Sandlund        Standards Track                    [Page 77]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 77] RFC 5225 ROHCv2 Profiles April 2008

    extension      =:= irregular(1)                [ 1 ];
    coverage_behavior =:= irregular(2)             [ 2 ];
  }
}

extension =:= irregular(1) [ 1 ]; coverage_behavior =:= irregular(2) [ 2 ]; } }

////////////////////////////////////////////
// RTP profile
////////////////////////////////////////////

//////////////////////////////////////////// // RTP profile ////////////////////////////////////////////

rtp_baseheader(profile_value, ts_stride_value, time_stride_value,
               outer_ip_flag, ip_id_behavior_value,
               reorder_ratio_value)
{
  UNCOMPRESSED v4 {
    ENFORCE(msn.UVALUE == sequence_number.UVALUE);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];
    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];
    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [ 16 ];
    dst_port                                           [ 16 ];
    udp_length  =:= inferred_udp_length                [ 16 ];
    udp_checksum                                       [ 16 ];
    rtp_version =:= uncompressed_value(2, 2)           [  2 ];
    pad_bit                                            [  1 ];
    extension                                          [  1 ];
    cc                                                 [  4 ];
    marker                                             [  1 ];
    payload_type                                       [  7 ];
    sequence_number                                    [ 16 ];
    timestamp                                          [ 32 ];
    ssrc                                               [ 32 ];
    csrc_list                                          [ VARIABLE ];
  }

rtp_baseheader(profile_value, ts_stride_value, time_stride_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value) { UNCOMPRESSED v4 { ENFORCE(msn.UVALUE == sequence_number.UVALUE); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; udp_length =:= inferred_udp_length [ 16 ]; udp_checksum [ 16 ]; rtp_version =:= uncompressed_value(2, 2) [ 2 ]; pad_bit [ 1 ]; extension [ 1 ]; cc [ 4 ]; marker [ 1 ]; payload_type [ 7 ]; sequence_number [ 16 ]; timestamp [ 32 ]; ssrc [ 32 ]; csrc_list [ VARIABLE ]; }

  UNCOMPRESSED v6 {

UNCOMPRESSED v6 {

Pelletier & Sandlund        Standards Track                    [Page 78]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 78] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);
    ENFORCE(msn.UVALUE == sequence_number.UVALUE);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 6)        [   4 ];
    tos_tc                                             [   8 ];
    flow_label                                         [  20 ];
    payload_length =:= inferred_ip_v6_length           [  16 ];
    next_header                                        [   8 ];
    ttl_hopl                                           [   8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [  16 ];
    dst_port                                           [  16 ];
    udp_length     =:= inferred_udp_length             [  16 ];
    udp_checksum                                       [  16 ];
    rtp_version    =:= uncompressed_value(2, 2)        [   2 ];
    pad_bit                                            [   1 ];
    extension                                          [   1 ];
    cc                                                 [   4 ];
    marker                                             [   1 ];
    payload_type                                       [   7 ];
    sequence_number                                    [  16 ];
    timestamp                                          [  32 ];
    ssrc                                               [  32 ];
    csrc_list                                          [ VARIABLE ];
    df    =:= uncompressed_value(0,0)                  [   0 ];
    ip_id =:= uncompressed_value(0,0)                  [   0 ];
  }

ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM); ENFORCE(msn.UVALUE == sequence_number.UVALUE); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; udp_length =:= inferred_udp_length [ 16 ]; udp_checksum [ 16 ]; rtp_version =:= uncompressed_value(2, 2) [ 2 ]; pad_bit [ 1 ]; extension [ 1 ]; cc [ 4 ]; marker [ 1 ]; payload_type [ 7 ]; sequence_number [ 16 ]; timestamp [ 32 ]; ssrc [ 32 ]; csrc_list [ VARIABLE ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_RTP_0101);
    ENFORCE(profile == profile_value);
    ENFORCE(time_stride.UVALUE == time_stride_value);
    ENFORCE(ts_stride.UVALUE == ts_stride_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
    dummy_field =:= field_scaling(ts_stride.UVALUE,
      ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ];
  }

CONTROL { ENFORCE(profile_value == PROFILE_RTP_0101); ENFORCE(profile == profile_value); ENFORCE(time_stride.UVALUE == time_stride_value); ENFORCE(ts_stride.UVALUE == ts_stride_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); dummy_field =:= field_scaling(ts_stride.UVALUE, ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ]; }

  INITIAL {
    ts_stride     =:= uncompressed_value(32, TS_STRIDE_DEFAULT);
    time_stride   =:= uncompressed_value(32, TIME_STRIDE_DEFAULT);
  }

INITIAL { ts_stride =:= uncompressed_value(32, TS_STRIDE_DEFAULT); time_stride =:= uncompressed_value(32, TIME_STRIDE_DEFAULT); }

  DEFAULT {
    ENFORCE(outer_ip_flag == 0);

DEFAULT { ENFORCE(outer_ip_flag == 0);

Pelletier & Sandlund        Standards Track                    [Page 79]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 79] RFC 5225 ROHCv2 Profiles April 2008

    tos_tc          =:= static;
    dest_addr       =:= static;
    ttl_hopl        =:= static;
    src_addr        =:= static;
    df              =:= static;
    flow_label      =:= static;
    next_header     =:= static;
    src_port        =:= static;
    dst_port        =:= static;
    pad_bit         =:= static;
    extension       =:= static;
    cc              =:= static;
    // When marker not present in packets, it is assumed 0
    marker          =:= uncompressed_value(1, 0);
    payload_type    =:= static;
    sequence_number =:= static;
    timestamp       =:= static;
    ssrc            =:= static;
    csrc_list       =:= static;
    ts_stride       =:= static;
    time_stride     =:= static;
    ts_scaled       =:= static;
    ts_offset       =:= static;
    reorder_ratio   =:= static;
    ip_id_behavior_innermost =:= static;
  }

tos_tc =:= static; dest_addr =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; src_port =:= static; dst_port =:= static; pad_bit =:= static; extension =:= static; cc =:= static; // When marker not present in packets, it is assumed 0 marker =:= uncompressed_value(1, 0); payload_type =:= static; sequence_number =:= static; timestamp =:= static; ssrc =:= static; csrc_list =:= static; ts_stride =:= static; time_stride =:= static; ts_scaled =:= static; ts_offset =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    marker               =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags1_indicator     =:= irregular(1)                  [ 1 ];
    flags2_indicator     =:= irregular(1)                  [ 1 ];
    tsc_indicator        =:= irregular(1)                  [ 1 ];
    tss_indicator        =:= irregular(1)                  [ 1 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags1_indicator =:= irregular(1) [ 1 ]; flags2_indicator =:= irregular(1) [ 1 ]; tsc_indicator =:= irregular(1) [ 1 ]; tss_indicator =:= irregular(1) [ 1 ]; ip_id_indicator =:= irregular(1) [ 1 ]; control_crc3 =:= control_crc3_encoding [ 3 ];

    outer_ip_indicator : ttl_hopl_indicator :
      tos_tc_indicator : df : ip_id_behavior_innermost : reorder_ratio
      =:= profile_1_7_flags1_enc(flags1_indicator.CVALUE,
        ip_version.UVALUE)                                 [ 0, 8 ];
    list_indicator : pt_indicator : tis_indicator : pad_bit :
      extension =:= profile_1_flags2_enc(
        flags2_indicator.CVALUE)                           [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];

outer_ip_indicator : ttl_hopl_indicator : tos_tc_indicator : df : ip_id_behavior_innermost : reorder_ratio =:= profile_1_7_flags1_enc(flags1_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; list_indicator : pt_indicator : tis_indicator : pad_bit : extension =:= profile_1_flags2_enc( flags2_indicator.CVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];

Pelletier & Sandlund        Standards Track                    [Page 80]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 80] RFC 5225 ROHCv2 Profiles April 2008

    ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE,
      ttl_hopl.ULENGTH)                                    [ 0, 8 ];
    payload_type =:= pt_irr_or_static(pt_indicator)        [ 0, 8 ];
    sequence_number =:=
      sdvl_sn_lsb(sequence_number.ULENGTH)                [ VARIABLE ];
    ip_id =:= ip_id_sequential_variable(
      ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE) [ 0, 8, 16 ];
    ts_scaled =:= variable_scaled_timestamp(tss_indicator.CVALUE,
      tsc_indicator.CVALUE, ts_stride.UVALUE,
      time_stride.UVALUE)                                 [ VARIABLE ];
    timestamp =:= variable_unscaled_timestamp(tss_indicator.CVALUE,
      tsc_indicator.CVALUE)                               [ VARIABLE ];
    ts_stride =:= sdvl_or_static(tss_indicator.CVALUE)    [ VARIABLE ];
    time_stride =:= sdvl_or_static(tis_indicator.CVALUE)  [ VARIABLE ];
    csrc_list =:= csrc_list_presence(list_indicator.CVALUE,
      cc.UVALUE)                                          [ VARIABLE ];
  }

ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE, ttl_hopl.ULENGTH) [ 0, 8 ]; payload_type =:= pt_irr_or_static(pt_indicator) [ 0, 8 ]; sequence_number =:= sdvl_sn_lsb(sequence_number.ULENGTH) [ VARIABLE ]; ip_id =:= ip_id_sequential_variable( ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; ts_scaled =:= variable_scaled_timestamp(tss_indicator.CVALUE, tsc_indicator.CVALUE, ts_stride.UVALUE, time_stride.UVALUE) [ VARIABLE ]; timestamp =:= variable_unscaled_timestamp(tss_indicator.CVALUE, tsc_indicator.CVALUE) [ VARIABLE ]; ts_stride =:= sdvl_or_static(tss_indicator.CVALUE) [ VARIABLE ]; time_stride =:= sdvl_or_static(tis_indicator.CVALUE) [ VARIABLE ]; csrc_list =:= csrc_list_presence(list_indicator.CVALUE, cc.UVALUE) [ VARIABLE ]; }

  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator =:= '0'                             [ 1 ];
    msn           =:= msn_lsb(4)                      [ 4 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    timestamp     =:= inferred_scaled_field           [ 0 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; timestamp =:= inferred_scaled_field [ 0 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {
    discriminator =:= '1000'                          [ 4 ];
    msn           =:= msn_lsb(5)                      [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    timestamp     =:= inferred_scaled_field           [ 0 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 { discriminator =:= '1000' [ 4 ]; msn =:= msn_lsb(5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; timestamp =:= inferred_scaled_field [ 0 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1 replacement
  COMPRESSED pt_1_rnd {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_RANDOM) ||
            (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO));
    discriminator =:= '101'                                [ 3 ];
    marker        =:= irregular(1)                         [ 1 ];
    msn           =:= msn_lsb(4)                           [ 4 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)      [ 3 ];

// UO-1 replacement COMPRESSED pt_1_rnd { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO)); discriminator =:= '101' [ 3 ]; marker =:= irregular(1) [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];

Pelletier & Sandlund        Standards Track                    [Page 81]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 81] RFC 5225 ROHCv2 Profiles April 2008

  }

}

  // UO-1-ID replacement
  COMPRESSED pt_1_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '1001'                                [ 4 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
    msn           =:= msn_lsb(5)                            [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)       [ 3 ];
    timestamp     =:= inferred_scaled_field                 [ 0 ];
  }

// UO-1-ID replacement COMPRESSED pt_1_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '1001' [ 4 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; msn =:= msn_lsb(5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; timestamp =:= inferred_scaled_field [ 0 ]; }

  // UO-1-TS replacement
  COMPRESSED pt_1_seq_ts {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '101'                                [ 3 ];
    marker        =:= irregular(1)                         [ 1 ];
    msn           =:= msn_lsb(4)                           [ 4 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)      [ 3 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-1-TS replacement COMPRESSED pt_1_seq_ts { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; marker =:= irregular(1) [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UOR-2 replacement
  COMPRESSED pt_2_rnd {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_RANDOM) ||
            (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO));
    discriminator =:= '110'                                [ 3 ];
    msn           =:= msn_lsb(7)                           [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 6) [ 6 ];
    marker        =:= irregular(1)                         [ 1 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)      [ 7 ];
  }

// UOR-2 replacement COMPRESSED pt_2_rnd { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO)); discriminator =:= '110' [ 3 ]; msn =:= msn_lsb(7) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 6) [ 6 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE ==

Pelletier & Sandlund        Standards Track                    [Page 82]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 82] RFC 5225 ROHCv2 Profiles April 2008

             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '11000'                               [ 5 ];
    msn           =:= msn_lsb(7)                            [ 7 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    timestamp     =:= inferred_scaled_field                 [ 0 ];
  }

IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '11000' [ 5 ]; msn =:= msn_lsb(7) [ 7 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; timestamp =:= inferred_scaled_field [ 0 ]; }

  // UOR-2-ID-ext1 replacement (both TS and IP-ID)
  COMPRESSED pt_2_seq_both {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '11001'                               [ 5 ];
    msn           =:= msn_lsb(7)                            [ 7 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 7)  [ 7 ];
    marker        =:= irregular(1)                          [ 1 ];
  }

// UOR-2-ID-ext1 replacement (both TS and IP-ID) COMPRESSED pt_2_seq_both { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '11001' [ 5 ]; msn =:= msn_lsb(7) [ 7 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 7) [ 7 ]; marker =:= irregular(1) [ 1 ]; }

  // UOR-2-TS replacement
  COMPRESSED pt_2_seq_ts {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '1101'                               [ 4 ];
    msn           =:= msn_lsb(7)                           [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    marker        =:= irregular(1)                         [ 1 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)      [ 7 ];
    ip_id         =:= inferred_sequential_ip_id            [ 0 ];
  }
}

// UOR-2-TS replacement COMPRESSED pt_2_seq_ts { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '1101' [ 4 ]; msn =:= msn_lsb(7) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; } }

////////////////////////////////////////////
// UDP profile
////////////////////////////////////////////

//////////////////////////////////////////// // UDP profile ////////////////////////////////////////////

udp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
               reorder_ratio_value)
{
  UNCOMPRESSED v4 {
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];

udp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value) { UNCOMPRESSED v4 { outer_headers =:= baseheader_outer_headers [ VARIABLE ];

Pelletier & Sandlund        Standards Track                    [Page 83]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 83] RFC 5225 ROHCv2 Profiles April 2008

    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];
    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];
    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [ 16 ];
    dst_port                                           [ 16 ];
    udp_length     =:= inferred_udp_length             [ 16 ];
    udp_checksum                                       [ 16 ];
  }

ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; udp_length =:= inferred_udp_length [ 16 ]; udp_checksum [ 16 ]; }

  UNCOMPRESSED v6 {
    ENFORCE(ip_id_behavior.UVALUE == IP_ID_BEHAVIOR_RANDOM);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 6)        [  4 ];
    tos_tc                                             [  8 ];
    flow_label                                         [ 20 ];
    payload_length =:= inferred_ip_v6_length           [ 16 ];
    next_header                                        [  8 ];
    ttl_hopl                                           [  8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [ 16 ];
    dst_port                                           [ 16 ];
    udp_length     =:= inferred_udp_length             [ 16 ];
    udp_checksum                                       [ 16 ];
    df    =:= uncompressed_value(0,0)                  [  0 ];
    ip_id =:= uncompressed_value(0,0)                  [  0 ];
  }

UNCOMPRESSED v6 { ENFORCE(ip_id_behavior.UVALUE == IP_ID_BEHAVIOR_RANDOM); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; udp_length =:= inferred_udp_length [ 16 ]; udp_checksum [ 16 ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_UDP_0102);
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
  }

CONTROL { ENFORCE(profile_value == PROFILE_UDP_0102); ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); }

Pelletier & Sandlund        Standards Track                    [Page 84]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 84] RFC 5225 ROHCv2 Profiles April 2008

  DEFAULT {
    ENFORCE(outer_ip_flag == 0);
    tos_tc         =:= static;
    dest_addr      =:= static;
    ip_version     =:= static;
    ttl_hopl       =:= static;
    src_addr       =:= static;
    df             =:= static;
    flow_label     =:= static;
    next_header    =:= static;
    src_port       =:= static;
    dst_port       =:= static;
    reorder_ratio  =:= static;
    ip_id_behavior_innermost =:= static;
  }

DEFAULT { ENFORCE(outer_ip_flag == 0); tos_tc =:= static; dest_addr =:= static; ip_version =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; src_port =:= static; dst_port =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags_indicator      =:= irregular(1)                  [ 1 ];
    ttl_hopl_indicator   =:= irregular(1)                  [ 1 ];
    tos_tc_indicator     =:= irregular(1)                  [ 1 ];
    reorder_ratio        =:= irregular(2)                  [ 2 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];
    outer_ip_indicator : df : ip_id_behavior_innermost =:=
      profile_2_3_4_flags_enc(
      flags_indicator.CVALUE, ip_version.UVALUE)           [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];
    ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE,
      ttl_hopl.ULENGTH)                                    [ 0, 8 ];
    msn                  =:= msn_lsb(8)                    [ 8 ];
    ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE)                          [ 0, 8, 16 ];
  }

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; ip_id_indicator =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags_indicator =:= irregular(1) [ 1 ]; ttl_hopl_indicator =:= irregular(1) [ 1 ]; tos_tc_indicator =:= irregular(1) [ 1 ]; reorder_ratio =:= irregular(2) [ 2 ]; control_crc3 =:= control_crc3_encoding [ 3 ]; outer_ip_indicator : df : ip_id_behavior_innermost =:= profile_2_3_4_flags_enc( flags_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE, ttl_hopl.ULENGTH) [ 0, 8 ]; msn =:= msn_lsb(8) [ 8 ]; ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; }

  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator =:= '0'                             [ 1 ];
    msn           =:= msn_lsb(4)                      [ 4 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 {

Pelletier & Sandlund        Standards Track                    [Page 85]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 85] RFC 5225 ROHCv2 Profiles April 2008

    discriminator =:= '100'                           [ 3 ];
    msn           =:= msn_lsb(6)                      [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

discriminator =:= '100' [ 3 ]; msn =:= msn_lsb(6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1-ID replacement (PT-1 only used for sequential)
  COMPRESSED pt_1_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '101'                                 [ 3 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)       [ 3 ];
    msn           =:= msn_lsb(6)                            [ 6 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
  }

// UO-1-ID replacement (PT-1 only used for sequential) COMPRESSED pt_1_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; msn =:= msn_lsb(6) [ 6 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '110'                                 [ 3 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    msn           =:= msn_lsb(8)                            [ 8 ];
  }
}

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '110' [ 3 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; msn =:= msn_lsb(8) [ 8 ]; } }

////////////////////////////////////////////
// ESP profile
////////////////////////////////////////////

//////////////////////////////////////////// // ESP profile ////////////////////////////////////////////

esp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
               reorder_ratio_value)
{
  UNCOMPRESSED v4 {
    ENFORCE(msn.UVALUE == sequence_number.UVALUE % 65536);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];
    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];

esp_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value) { UNCOMPRESSED v4 { ENFORCE(msn.UVALUE == sequence_number.UVALUE % 65536); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ];

Pelletier & Sandlund        Standards Track                    [Page 86]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 86] RFC 5225 ROHCv2 Profiles April 2008

    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    spi                                                [ 32 ];
    sequence_number                                    [ 32 ];
  }

mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; spi [ 32 ]; sequence_number [ 32 ]; }

  UNCOMPRESSED v6 {
    ENFORCE(msn.UVALUE == (sequence_number.UVALUE % 65536));
    ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 6)        [   4 ];
    tos_tc                                             [   8 ];
    flow_label                                         [  20 ];
    payload_length =:= inferred_ip_v6_length           [  16 ];
    next_header                                        [   8 ];
    ttl_hopl                                           [   8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    spi                                                [  32 ];
    sequence_number                                    [  32 ];
    df    =:= uncompressed_value(0,0)                  [   0 ];
    ip_id =:= uncompressed_value(0,0)                  [   0 ];
  }

UNCOMPRESSED v6 { ENFORCE(msn.UVALUE == (sequence_number.UVALUE % 65536)); ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; spi [ 32 ]; sequence_number [ 32 ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_ESP_0103);
    ENFORCE(profile == profile_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
  }

CONTROL { ENFORCE(profile_value == PROFILE_ESP_0103); ENFORCE(profile == profile_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); }

  DEFAULT {
    ENFORCE(outer_ip_flag == 0);
    tos_tc          =:= static;
    dest_addr       =:= static;
    ttl_hopl        =:= static;
    src_addr        =:= static;
    df              =:= static;
    flow_label      =:= static;
    next_header     =:= static;
    spi             =:= static;

DEFAULT { ENFORCE(outer_ip_flag == 0); tos_tc =:= static; dest_addr =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; spi =:= static;

Pelletier & Sandlund        Standards Track                    [Page 87]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 87] RFC 5225 ROHCv2 Profiles April 2008

    sequence_number =:= static;
    reorder_ratio   =:= static;
    ip_id_behavior_innermost =:= static;
  }

sequence_number =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags_indicator      =:= irregular(1)                  [ 1 ];
    ttl_hopl_indicator   =:= irregular(1)                  [ 1 ];
    tos_tc_indicator     =:= irregular(1)                  [ 1 ];
    reorder_ratio        =:= irregular(2)                  [ 2 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; ip_id_indicator =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags_indicator =:= irregular(1) [ 1 ]; ttl_hopl_indicator =:= irregular(1) [ 1 ]; tos_tc_indicator =:= irregular(1) [ 1 ]; reorder_ratio =:= irregular(2) [ 2 ]; control_crc3 =:= control_crc3_encoding [ 3 ];

    outer_ip_indicator : df : ip_id_behavior_innermost =:=
      profile_2_3_4_flags_enc(
      flags_indicator.CVALUE, ip_version.UVALUE)           [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];
    ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE,
      ttl_hopl.ULENGTH)                                    [ 0, 8 ];
    sequence_number =:=
      sdvl_sn_lsb(sequence_number.ULENGTH)             [ VARIABLE ];
    ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE)                          [ 0, 8, 16 ];
  }

outer_ip_indicator : df : ip_id_behavior_innermost =:= profile_2_3_4_flags_enc( flags_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE, ttl_hopl.ULENGTH) [ 0, 8 ]; sequence_number =:= sdvl_sn_lsb(sequence_number.ULENGTH) [ VARIABLE ]; ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; }

  // Sequence number sent instead of MSN due to field length
  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator   =:= '0'                             [ 1 ];
    sequence_number =:= msn_lsb(4)                      [ 4 ];
    header_crc      =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    ip_id           =:= inferred_sequential_ip_id       [ 0 ];
  }

// Sequence number sent instead of MSN due to field length // UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; sequence_number =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {
    discriminator   =:= '100'                           [ 3 ];
    sequence_number =:= msn_lsb(6)                      [ 6 ];
    header_crc      =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    ip_id           =:= inferred_sequential_ip_id       [ 0 ];
  }

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 { discriminator =:= '100' [ 3 ]; sequence_number =:= msn_lsb(6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1-ID replacement (PT-1 only used for sequential)
  COMPRESSED pt_1_seq_id {

// UO-1-ID replacement (PT-1 only used for sequential) COMPRESSED pt_1_seq_id {

Pelletier & Sandlund        Standards Track                    [Page 88]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 88] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator   =:= '101'                               [ 3 ];
    header_crc      =:= crc3(THIS.UVALUE, THIS.ULENGTH)     [ 3 ];
    sequence_number =:= msn_lsb(6)                          [ 6 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
  }

ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; sequence_number =:= msn_lsb(6) [ 6 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator   =:= '110'                               [ 3 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ];
    header_crc      =:= crc7(THIS.UVALUE, THIS.ULENGTH)     [ 7 ];
    sequence_number =:= msn_lsb(8)                          [ 8 ];
  }
}

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '110' [ 3 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; sequence_number =:= msn_lsb(8) [ 8 ]; } }

////////////////////////////////////////////
// IP-only profile
////////////////////////////////////////////

//////////////////////////////////////////// // IP-only profile ////////////////////////////////////////////

iponly_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
                  reorder_ratio_value)
{
  UNCOMPRESSED v4 {
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];
    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];
    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
  }

iponly_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value) { UNCOMPRESSED v4 { outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; }

Pelletier & Sandlund        Standards Track                    [Page 89]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 89] RFC 5225 ROHCv2 Profiles April 2008

  UNCOMPRESSED v6 {
    ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);
    outer_headers     =:= baseheader_outer_headers     [ VARIABLE ];
    ip_version        =:= uncompressed_value(4, 6)     [   4 ];
    tos_tc                                             [   8 ];
    flow_label                                         [  20 ];
    payload_length    =:= inferred_ip_v6_length        [  16 ];
    next_header                                        [   8 ];
    ttl_hopl                                           [   8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    df    =:= uncompressed_value(0,0)                  [   0 ];
    ip_id =:= uncompressed_value(0,0)                  [   0 ];
  }

UNCOMPRESSED v6 { ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_IP_0104);
    ENFORCE(profile == profile_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
  }

CONTROL { ENFORCE(profile_value == PROFILE_IP_0104); ENFORCE(profile == profile_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); }

  DEFAULT {
    ENFORCE(outer_ip_flag == 0);
    tos_tc         =:= static;
    dest_addr      =:= static;
    ttl_hopl       =:= static;
    src_addr       =:= static;
    df             =:= static;
    flow_label     =:= static;
    next_header    =:= static;
    reorder_ratio  =:= static;
    ip_id_behavior_innermost =:= static;
  }

DEFAULT { ENFORCE(outer_ip_flag == 0); tos_tc =:= static; dest_addr =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags_indicator      =:= irregular(1)                  [ 1 ];
    ttl_hopl_indicator   =:= irregular(1)                  [ 1 ];
    tos_tc_indicator     =:= irregular(1)                  [ 1 ];
    reorder_ratio        =:= irregular(2)                  [ 2 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];
    outer_ip_indicator : df : ip_id_behavior_innermost =:=

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; ip_id_indicator =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags_indicator =:= irregular(1) [ 1 ]; ttl_hopl_indicator =:= irregular(1) [ 1 ]; tos_tc_indicator =:= irregular(1) [ 1 ]; reorder_ratio =:= irregular(2) [ 2 ]; control_crc3 =:= control_crc3_encoding [ 3 ]; outer_ip_indicator : df : ip_id_behavior_innermost =:=

Pelletier & Sandlund        Standards Track                    [Page 90]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 90] RFC 5225 ROHCv2 Profiles April 2008

      profile_2_3_4_flags_enc(
      flags_indicator.CVALUE, ip_version.UVALUE)           [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];
    ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE,
      ttl_hopl.ULENGTH)                                    [ 0, 8 ];
    msn                  =:= msn_lsb(8)                    [ 8 ];
    ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE)                          [ 0, 8, 16 ];
  }

profile_2_3_4_flags_enc( flags_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE, ttl_hopl.ULENGTH) [ 0, 8 ]; msn =:= msn_lsb(8) [ 8 ]; ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; }

  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator =:= '0'                             [ 1 ];
    msn           =:= msn_lsb(4)                      [ 4 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {
    discriminator =:= '100'                           [ 3 ];
    msn           =:= msn_lsb(6)                      [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 { discriminator =:= '100' [ 3 ]; msn =:= msn_lsb(6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1-ID replacement (PT-1 only used for sequential)
  COMPRESSED pt_1_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '101'                                 [ 3 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)       [ 3 ];
    msn           =:= msn_lsb(6)                            [ 6 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
  }

// UO-1-ID replacement (PT-1 only used for sequential) COMPRESSED pt_1_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; msn =:= msn_lsb(6) [ 6 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '110'                                 [ 3 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    msn           =:= msn_lsb(8)                            [ 8 ];

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '110' [ 3 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; msn =:= msn_lsb(8) [ 8 ];

Pelletier & Sandlund        Standards Track                    [Page 91]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 91] RFC 5225 ROHCv2 Profiles April 2008

  }
}

} }

////////////////////////////////////////////
// UDP-lite/RTP profile
////////////////////////////////////////////

//////////////////////////////////////////// // UDP-lite/RTP profile ////////////////////////////////////////////

udplite_rtp_baseheader(profile_value, ts_stride_value,
                       time_stride_value, outer_ip_flag,
                       ip_id_behavior_value, reorder_ratio_value,
                       coverage_behavior_value)
{
  UNCOMPRESSED v4 {
    ENFORCE(msn.UVALUE == sequence_number.UVALUE);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];
    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];
    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [ 16 ];
    dst_port                                           [ 16 ];
    checksum_coverage                                  [ 16 ];
    udp_checksum                                       [ 16 ];
    rtp_version    =:= uncompressed_value(2, 2)        [  2 ];
    pad_bit                                            [  1 ];
    extension                                          [  1 ];
    cc                                                 [  4 ];
    marker                                             [  1 ];
    payload_type                                       [  7 ];
    sequence_number                                    [ 16 ];
    timestamp                                          [ 32 ];
    ssrc                                               [ 32 ];
    csrc_list                                          [ VARIABLE ];
  }

udplite_rtp_baseheader(profile_value, ts_stride_value, time_stride_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value, coverage_behavior_value) { UNCOMPRESSED v4 { ENFORCE(msn.UVALUE == sequence_number.UVALUE); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ]; tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; checksum_coverage [ 16 ]; udp_checksum [ 16 ]; rtp_version =:= uncompressed_value(2, 2) [ 2 ]; pad_bit [ 1 ]; extension [ 1 ]; cc [ 4 ]; marker [ 1 ]; payload_type [ 7 ]; sequence_number [ 16 ]; timestamp [ 32 ]; ssrc [ 32 ]; csrc_list [ VARIABLE ]; }

  UNCOMPRESSED v6 {
    ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);

UNCOMPRESSED v6 { ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);

Pelletier & Sandlund        Standards Track                    [Page 92]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 92] RFC 5225 ROHCv2 Profiles April 2008

    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 6)        [   4 ];
    tos_tc                                             [   8 ];
    flow_label                                         [  20 ];
    payload_length =:= inferred_ip_v6_length           [  16 ];
    next_header                                        [   8 ];
    ttl_hopl                                           [   8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [  16 ];
    dst_port                                           [  16 ];
    checksum_coverage                                  [  16 ];
    udp_checksum                                       [  16 ];
    rtp_version =:= uncompressed_value(2, 2)           [   2 ];
    pad_bit                                            [   1 ];
    extension                                          [   1 ];
    cc                                                 [   4 ];
    marker                                             [   1 ];
    payload_type                                       [   7 ];
    sequence_number                                    [  16 ];
    timestamp                                          [  32 ];
    ssrc                                               [  32 ];
    csrc_list                                          [ VARIABLE ];
    df    =:= uncompressed_value(0,0)                  [   0 ];
    ip_id =:= uncompressed_value(0,0)                  [   0 ];
  }

outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; checksum_coverage [ 16 ]; udp_checksum [ 16 ]; rtp_version =:= uncompressed_value(2, 2) [ 2 ]; pad_bit [ 1 ]; extension [ 1 ]; cc [ 4 ]; marker [ 1 ]; payload_type [ 7 ]; sequence_number [ 16 ]; timestamp [ 32 ]; ssrc [ 32 ]; csrc_list [ VARIABLE ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_RTP_0107);
    ENFORCE(profile == profile_value);
    ENFORCE(time_stride.UVALUE == time_stride_value);
    ENFORCE(ts_stride.UVALUE == ts_stride_value);
    ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
    dummy_field =:= field_scaling(ts_stride.UVALUE,
      ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ];
  }

CONTROL { ENFORCE(profile_value == PROFILE_RTP_0107); ENFORCE(profile == profile_value); ENFORCE(time_stride.UVALUE == time_stride_value); ENFORCE(ts_stride.UVALUE == ts_stride_value); ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); dummy_field =:= field_scaling(ts_stride.UVALUE, ts_scaled.UVALUE, timestamp.UVALUE, ts_offset.UVALUE) [ 0 ]; }

  INITIAL {
    ts_stride     =:= uncompressed_value(32, TS_STRIDE_DEFAULT);
    time_stride   =:= uncompressed_value(32, TIME_STRIDE_DEFAULT);
  }

INITIAL { ts_stride =:= uncompressed_value(32, TS_STRIDE_DEFAULT); time_stride =:= uncompressed_value(32, TIME_STRIDE_DEFAULT); }

  DEFAULT {
    ENFORCE(outer_ip_flag == 0);
    tos_tc            =:= static;

DEFAULT { ENFORCE(outer_ip_flag == 0); tos_tc =:= static;

Pelletier & Sandlund        Standards Track                    [Page 93]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 93] RFC 5225 ROHCv2 Profiles April 2008

    dest_addr         =:= static;
    ttl_hopl          =:= static;
    src_addr          =:= static;
    df                =:= static;
    flow_label        =:= static;
    next_header       =:= static;
    src_port          =:= static;
    dst_port          =:= static;
    pad_bit           =:= static;
    extension         =:= static;
    cc                =:= static;
    // When marker not present in packets, it is assumed 0
    marker            =:= uncompressed_value(1, 0);
    payload_type      =:= static;
    sequence_number   =:= static;
    timestamp         =:= static;
    ssrc              =:= static;
    csrc_list         =:= static;
    ts_stride         =:= static;
    time_stride       =:= static;
    ts_scaled         =:= static;
    ts_offset         =:= static;
    reorder_ratio     =:= static;
    ip_id_behavior_innermost =:= static;
  }

dest_addr =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; src_port =:= static; dst_port =:= static; pad_bit =:= static; extension =:= static; cc =:= static; // When marker not present in packets, it is assumed 0 marker =:= uncompressed_value(1, 0); payload_type =:= static; sequence_number =:= static; timestamp =:= static; ssrc =:= static; csrc_list =:= static; ts_stride =:= static; time_stride =:= static; ts_scaled =:= static; ts_offset =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    marker               =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags1_indicator     =:= irregular(1)                  [ 1 ];
    flags2_indicator     =:= irregular(1)                  [ 1 ];
    tsc_indicator        =:= irregular(1)                  [ 1 ];
    tss_indicator        =:= irregular(1)                  [ 1 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags1_indicator =:= irregular(1) [ 1 ]; flags2_indicator =:= irregular(1) [ 1 ]; tsc_indicator =:= irregular(1) [ 1 ]; tss_indicator =:= irregular(1) [ 1 ]; ip_id_indicator =:= irregular(1) [ 1 ]; control_crc3 =:= control_crc3_encoding [ 3 ];

    outer_ip_indicator : ttl_hopl_indicator :
      tos_tc_indicator : df : ip_id_behavior_innermost : reorder_ratio
      =:= profile_1_7_flags1_enc(flags1_indicator.CVALUE,
        ip_version.UVALUE)                                 [ 0, 8 ];
    list_indicator : pt_indicator : tis_indicator : pad_bit :
      extension : coverage_behavior =:=
      profile_7_flags2_enc(flags2_indicator.CVALUE)        [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];
    ttl_hopl =:=

outer_ip_indicator : ttl_hopl_indicator : tos_tc_indicator : df : ip_id_behavior_innermost : reorder_ratio =:= profile_1_7_flags1_enc(flags1_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; list_indicator : pt_indicator : tis_indicator : pad_bit : extension : coverage_behavior =:= profile_7_flags2_enc(flags2_indicator.CVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ]; ttl_hopl =:=

Pelletier & Sandlund        Standards Track                    [Page 94]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 94] RFC 5225 ROHCv2 Profiles April 2008

      static_or_irreg(ttl_hopl_indicator.CVALUE, 8)        [ 0, 8 ];
    payload_type =:= pt_irr_or_static(pt_indicator.CVALUE) [ 0, 8 ];
    sequence_number =:=
      sdvl_sn_lsb(sequence_number.ULENGTH)               [ VARIABLE ];
    ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE)                            [ 0, 8, 16 ];
    ts_scaled =:= variable_scaled_timestamp(tss_indicator.CVALUE,
      tsc_indicator.CVALUE, ts_stride.UVALUE,
      time_stride.UVALUE)                                [ VARIABLE ];
    timestamp =:= variable_unscaled_timestamp(tss_indicator.CVALUE,
      tsc_indicator.CVALUE)                              [ VARIABLE ];
    ts_stride =:= sdvl_or_static(tss_indicator.CVALUE)   [ VARIABLE ];
    time_stride =:= sdvl_or_static(tis_indicator.CVALUE) [ VARIABLE ];
    csrc_list            =:=
        csrc_list_presence(list_indicator.CVALUE,
          cc.UVALUE)                                     [ VARIABLE ];
  }

static_or_irreg(ttl_hopl_indicator.CVALUE, 8) [ 0, 8 ]; payload_type =:= pt_irr_or_static(pt_indicator.CVALUE) [ 0, 8 ]; sequence_number =:= sdvl_sn_lsb(sequence_number.ULENGTH) [ VARIABLE ]; ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; ts_scaled =:= variable_scaled_timestamp(tss_indicator.CVALUE, tsc_indicator.CVALUE, ts_stride.UVALUE, time_stride.UVALUE) [ VARIABLE ]; timestamp =:= variable_unscaled_timestamp(tss_indicator.CVALUE, tsc_indicator.CVALUE) [ VARIABLE ]; ts_stride =:= sdvl_or_static(tss_indicator.CVALUE) [ VARIABLE ]; time_stride =:= sdvl_or_static(tis_indicator.CVALUE) [ VARIABLE ]; csrc_list =:= csrc_list_presence(list_indicator.CVALUE, cc.UVALUE) [ VARIABLE ]; }

  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator =:= '0'                             [ 1 ];
    msn           =:= msn_lsb(4)                      [ 4 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    timestamp     =:= inferred_scaled_field           [ 0 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; timestamp =:= inferred_scaled_field [ 0 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {
    discriminator =:= '1000'                          [ 4 ];
    msn           =:= msn_lsb(5)                      [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    timestamp     =:= inferred_scaled_field           [ 0 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 { discriminator =:= '1000' [ 4 ]; msn =:= msn_lsb(5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; timestamp =:= inferred_scaled_field [ 0 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1 replacement
  COMPRESSED pt_1_rnd {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_RANDOM) ||
            (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO));
    discriminator =:= '101'                                [ 3 ];
    marker        =:= irregular(1)                         [ 1 ];
    msn           =:= msn_lsb(4)                           [ 4 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)      [ 3 ];
  }

// UO-1 replacement COMPRESSED pt_1_rnd { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO)); discriminator =:= '101' [ 3 ]; marker =:= irregular(1) [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; }

Pelletier & Sandlund        Standards Track                    [Page 95]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 95] RFC 5225 ROHCv2 Profiles April 2008

  // UO-1-ID replacement
  COMPRESSED pt_1_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '1001'                                [ 4 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
    msn           =:= msn_lsb(5)                            [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)       [ 3 ];
    timestamp     =:= inferred_scaled_field                 [ 0 ];
  }

// UO-1-ID replacement COMPRESSED pt_1_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '1001' [ 4 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; msn =:= msn_lsb(5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; timestamp =:= inferred_scaled_field [ 0 ]; }

  // UO-1-TS replacement
  COMPRESSED pt_1_seq_ts {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '101'                                [ 3 ];
    marker        =:= irregular(1)                         [ 1 ];
    msn           =:= msn_lsb(4)                           [ 4 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)      [ 3 ];
    ip_id         =:= inferred_sequential_ip_id            [ 0 ];
  }

// UO-1-TS replacement COMPRESSED pt_1_seq_ts { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; marker =:= irregular(1) [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UOR-2 replacement
  COMPRESSED pt_2_rnd {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_RANDOM) ||
            (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO));
    discriminator =:= '110'                                [ 3 ];
    msn           =:= msn_lsb(7)                           [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 6) [ 6 ];
    marker        =:= irregular(1)                         [ 1 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)      [ 7 ];
  }

// UOR-2 replacement COMPRESSED pt_2_rnd { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_ZERO)); discriminator =:= '110' [ 3 ]; msn =:= msn_lsb(7) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 6) [ 6 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '11000'                               [ 5 ];

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '11000' [ 5 ];

Pelletier & Sandlund        Standards Track                    [Page 96]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 96] RFC 5225 ROHCv2 Profiles April 2008

    msn           =:= msn_lsb(7)                            [ 7 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    timestamp     =:= inferred_scaled_field                 [ 0 ];
  }

msn =:= msn_lsb(7) [ 7 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; timestamp =:= inferred_scaled_field [ 0 ]; }

  // UOR-2-ID-ext1 replacement (both TS and IP-ID)
  COMPRESSED pt_2_seq_both {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '11001'                               [ 5 ];
    msn           =:= msn_lsb(7)                            [ 7 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 7)  [ 7 ];
    marker        =:= irregular(1)                          [ 1 ];
  }

// UOR-2-ID-ext1 replacement (both TS and IP-ID) COMPRESSED pt_2_seq_both { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '11001' [ 5 ]; msn =:= msn_lsb(7) [ 7 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 5) [ 5 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 7) [ 7 ]; marker =:= irregular(1) [ 1 ]; }

  // UOR-2-TS replacement
  COMPRESSED pt_2_seq_ts {
    ENFORCE(ts_stride.UVALUE != 0);
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '1101'                               [ 4 ];
    msn           =:= msn_lsb(7)                           [ 7 ];
    ts_scaled     =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ];
    marker        =:= irregular(1)                         [ 1 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)      [ 7 ];
    ip_id         =:= inferred_sequential_ip_id            [ 0 ];
  }
}

// UOR-2-TS replacement COMPRESSED pt_2_seq_ts { ENFORCE(ts_stride.UVALUE != 0); ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '1101' [ 4 ]; msn =:= msn_lsb(7) [ 7 ]; ts_scaled =:= scaled_ts_lsb(time_stride.UVALUE, 5) [ 5 ]; marker =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; } }

////////////////////////////////////////////
// UDP-lite profile
////////////////////////////////////////////

//////////////////////////////////////////// // UDP-lite profile ////////////////////////////////////////////

udplite_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value,
                   reorder_ratio_value, coverage_behavior_value)
{
  UNCOMPRESSED v4 {
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 4)        [  4 ];
    header_length  =:= uncompressed_value(4, 5)        [  4 ];

udplite_baseheader(profile_value, outer_ip_flag, ip_id_behavior_value, reorder_ratio_value, coverage_behavior_value) { UNCOMPRESSED v4 { outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 4) [ 4 ]; header_length =:= uncompressed_value(4, 5) [ 4 ];

Pelletier & Sandlund        Standards Track                    [Page 97]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 97] RFC 5225 ROHCv2 Profiles April 2008

    tos_tc                                             [  8 ];
    length         =:= inferred_ip_v4_length           [ 16 ];
    ip_id                                              [ 16 ];
    rf             =:= uncompressed_value(1, 0)        [  1 ];
    df                                                 [  1 ];
    mf             =:= uncompressed_value(1, 0)        [  1 ];
    frag_offset    =:= uncompressed_value(13, 0)       [ 13 ];
    ttl_hopl                                           [  8 ];
    next_header                                        [  8 ];
    ip_checksum =:= inferred_ip_v4_header_checksum     [ 16 ];
    src_addr                                           [ 32 ];
    dest_addr                                          [ 32 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [ 16 ];
    dst_port                                           [ 16 ];
    checksum_coverage                                  [ 16 ];
    udp_checksum                                       [ 16 ];
  }

tos_tc [ 8 ]; length =:= inferred_ip_v4_length [ 16 ]; ip_id [ 16 ]; rf =:= uncompressed_value(1, 0) [ 1 ]; df [ 1 ]; mf =:= uncompressed_value(1, 0) [ 1 ]; frag_offset =:= uncompressed_value(13, 0) [ 13 ]; ttl_hopl [ 8 ]; next_header [ 8 ]; ip_checksum =:= inferred_ip_v4_header_checksum [ 16 ]; src_addr [ 32 ]; dest_addr [ 32 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; checksum_coverage [ 16 ]; udp_checksum [ 16 ]; }

  UNCOMPRESSED v6 {
    ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM);
    outer_headers  =:= baseheader_outer_headers        [ VARIABLE ];
    ip_version     =:= uncompressed_value(4, 6)        [   4 ];
    tos_tc                                             [   8 ];
    flow_label                                         [  20 ];
    payload_length =:= inferred_ip_v6_length           [  16 ];
    next_header                                        [   8 ];
    ttl_hopl                                           [   8 ];
    src_addr                                           [ 128 ];
    dest_addr                                          [ 128 ];
    extension_headers =:= baseheader_extension_headers [ VARIABLE ];
    src_port                                           [  16 ];
    dst_port                                           [  16 ];
    checksum_coverage                                  [  16 ];
    udp_checksum                                       [  16 ];
    df    =:= uncompressed_value(0,0)                  [   0 ];
    ip_id =:= uncompressed_value(0,0)                  [   0 ];
  }

UNCOMPRESSED v6 { ENFORCE(ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_RANDOM); outer_headers =:= baseheader_outer_headers [ VARIABLE ]; ip_version =:= uncompressed_value(4, 6) [ 4 ]; tos_tc [ 8 ]; flow_label [ 20 ]; payload_length =:= inferred_ip_v6_length [ 16 ]; next_header [ 8 ]; ttl_hopl [ 8 ]; src_addr [ 128 ]; dest_addr [ 128 ]; extension_headers =:= baseheader_extension_headers [ VARIABLE ]; src_port [ 16 ]; dst_port [ 16 ]; checksum_coverage [ 16 ]; udp_checksum [ 16 ]; df =:= uncompressed_value(0,0) [ 0 ]; ip_id =:= uncompressed_value(0,0) [ 0 ]; }

  CONTROL {
    ENFORCE(profile_value == PROFILE_UDPLITE_0108);
    ENFORCE(profile == profile_value);
    ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value);
    ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value);
    ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value);
  }

CONTROL { ENFORCE(profile_value == PROFILE_UDPLITE_0108); ENFORCE(profile == profile_value); ENFORCE(coverage_behavior.UVALUE == coverage_behavior_value); ENFORCE(reorder_ratio.UVALUE == reorder_ratio_value); ENFORCE(ip_id_behavior_innermost.UVALUE == ip_id_behavior_value); }

  DEFAULT {

DEFAULT {

Pelletier & Sandlund        Standards Track                    [Page 98]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 98] RFC 5225 ROHCv2 Profiles April 2008

    ENFORCE(outer_ip_flag == 0);
    tos_tc            =:= static;
    dest_addr         =:= static;
    ttl_hopl          =:= static;
    src_addr          =:= static;
    df                =:= static;
    flow_label        =:= static;
    next_header       =:= static;
    src_port          =:= static;
    dst_port          =:= static;
    reorder_ratio     =:= static;
    ip_id_behavior_innermost =:= static;
  }

ENFORCE(outer_ip_flag == 0); tos_tc =:= static; dest_addr =:= static; ttl_hopl =:= static; src_addr =:= static; df =:= static; flow_label =:= static; next_header =:= static; src_port =:= static; dst_port =:= static; reorder_ratio =:= static; ip_id_behavior_innermost =:= static; }

  // Replacement for UOR-2-ext3
  COMPRESSED co_common {
    ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE);
    discriminator        =:= '11111010'                    [ 8 ];
    ip_id_indicator      =:= irregular(1)                  [ 1 ];
    header_crc   =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    flags_indicator      =:= irregular(1)                  [ 1 ];
    ttl_hopl_indicator   =:= irregular(1)                  [ 1 ];
    tos_tc_indicator     =:= irregular(1)                  [ 1 ];
    reorder_ratio        =:= irregular(2)                  [ 2 ];
    control_crc3         =:= control_crc3_encoding         [ 3 ];
    outer_ip_indicator : df : ip_id_behavior_innermost :
      coverage_behavior  =:=
      profile_8_flags_enc(flags_indicator.CVALUE,
      ip_version.UVALUE)                                   [ 0, 8 ];
    tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ];
    ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE,
      ttl_hopl.ULENGTH)                                    [ 0, 8 ];
    msn                  =:= msn_lsb(8)                    [ 8 ];
    ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE,
      ip_id_indicator.CVALUE)                          [ 0, 8, 16 ];
  }

// Replacement for UOR-2-ext3 COMPRESSED co_common { ENFORCE(outer_ip_flag == outer_ip_indicator.CVALUE); discriminator =:= '11111010' [ 8 ]; ip_id_indicator =:= irregular(1) [ 1 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; flags_indicator =:= irregular(1) [ 1 ]; ttl_hopl_indicator =:= irregular(1) [ 1 ]; tos_tc_indicator =:= irregular(1) [ 1 ]; reorder_ratio =:= irregular(2) [ 2 ]; control_crc3 =:= control_crc3_encoding [ 3 ]; outer_ip_indicator : df : ip_id_behavior_innermost : coverage_behavior =:= profile_8_flags_enc(flags_indicator.CVALUE, ip_version.UVALUE) [ 0, 8 ]; tos_tc =:= static_or_irreg(tos_tc_indicator.CVALUE, 8) [ 0, 8 ]; ttl_hopl =:= static_or_irreg(ttl_hopl_indicator.CVALUE, ttl_hopl.ULENGTH) [ 0, 8 ]; msn =:= msn_lsb(8) [ 8 ]; ip_id =:= ip_id_sequential_variable(ip_id_behavior_innermost.UVALUE, ip_id_indicator.CVALUE) [ 0, 8, 16 ]; }

  // UO-0
  COMPRESSED pt_0_crc3 {
    discriminator =:= '0'                             [ 1 ];
    msn           =:= msn_lsb(4)                      [ 4 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

// UO-0 COMPRESSED pt_0_crc3 { discriminator =:= '0' [ 1 ]; msn =:= msn_lsb(4) [ 4 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // New format, Type 0 with strong CRC and more SN bits
  COMPRESSED pt_0_crc7 {
    discriminator =:= '100'                           [ 3 ];

// New format, Type 0 with strong CRC and more SN bits COMPRESSED pt_0_crc7 { discriminator =:= '100' [ 3 ];

Pelletier & Sandlund        Standards Track                    [Page 99]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 99] RFC 5225 ROHCv2 Profiles April 2008

    msn           =:= msn_lsb(6)                      [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ];
    ip_id         =:= inferred_sequential_ip_id       [ 0 ];
  }

msn =:= msn_lsb(6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; ip_id =:= inferred_sequential_ip_id [ 0 ]; }

  // UO-1-ID replacement (PT-1 only used for sequential)
  COMPRESSED pt_1_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '101'                                 [ 3 ];
    header_crc    =:= crc3(THIS.UVALUE, THIS.ULENGTH)       [ 3 ];
    msn           =:= msn_lsb(6)                            [ 6 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ];
  }

// UO-1-ID replacement (PT-1 only used for sequential) COMPRESSED pt_1_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '101' [ 3 ]; header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ]; msn =:= msn_lsb(6) [ 6 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 4) [ 4 ]; }

  // UOR-2-ID replacement
  COMPRESSED pt_2_seq_id {
    ENFORCE((ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL) ||
            (ip_id_behavior_innermost.UVALUE ==
             IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED));
    discriminator =:= '110'                                 [ 3 ];
    ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ];
    header_crc    =:= crc7(THIS.UVALUE, THIS.ULENGTH)       [ 7 ];
    msn           =:= msn_lsb(8)                            [ 8 ];
  }
}

// UOR-2-ID replacement COMPRESSED pt_2_seq_id { ENFORCE((ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL) || (ip_id_behavior_innermost.UVALUE == IP_ID_BEHAVIOR_SEQUENTIAL_SWAPPED)); discriminator =:= '110' [ 3 ]; ip_id =:= ip_id_lsb(ip_id_behavior_innermost.UVALUE, 6) [ 6 ]; header_crc =:= crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ]; msn =:= msn_lsb(8) [ 8 ]; } }

6.9.  Feedback Formats and Options

6.9. Feedback Formats and Options

6.9.1.  Feedback Formats

6.9.1. Feedback Formats

   This section describes the feedback format for ROHCv2 profiles, using
   the formats described in Section 5.2.3 of [RFC4995].

This section describes the feedback format for ROHCv2 profiles, using the formats described in Section 5.2.3 of [RFC4995].

   The Acknowledgment Number field of the feedback formats contains the
   least significant bits of the MSN (see Section 6.3.1) that
   corresponds to the reference header that is being acknowledged.  A
   reference header is a header that has been successfully CRC-8
   validated or CRC verified.  If there is no reference header
   available, the feedback MUST carry an ACKNUMBER-NOT-VALID option.
   FEEDBACK-1

The Acknowledgment Number field of the feedback formats contains the least significant bits of the MSN (see Section 6.3.1) that corresponds to the reference header that is being acknowledged. A reference header is a header that has been successfully CRC-8 validated or CRC verified. If there is no reference header available, the feedback MUST carry an ACKNUMBER-NOT-VALID option. FEEDBACK-1

Pelletier & Sandlund        Standards Track                   [Page 100]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 100] RFC 5225 ROHCv2 Profiles April 2008

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |     Acknowledgment Number     |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Acknowledgment Number | +---+---+---+---+---+---+---+---+

      Acknowledgment Number: The eight least significant bits of the
      MSN.

Acknowledgment Number: The eight least significant bits of the MSN.

   A FEEDBACK-1 is an ACK.  In order to send a NACK or a STATIC-NACK,
   FEEDBACK-2 must be used.

A FEEDBACK-1 is an ACK. In order to send a NACK or a STATIC-NACK, FEEDBACK-2 must be used.

   FEEDBACK-2

FEEDBACK-2

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |Acktype| Acknowledgment Number |
      +---+---+---+---+---+---+---+---+
      |     Acknowledgment Number     |
      +---+---+---+---+---+---+---+---+
      |              CRC              |
      +---+---+---+---+---+---+---+---+
      /       Feedback options        /
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ |Acktype| Acknowledgment Number | +---+---+---+---+---+---+---+---+ | Acknowledgment Number | +---+---+---+---+---+---+---+---+ | CRC | +---+---+---+---+---+---+---+---+ / Feedback options / +---+---+---+---+---+---+---+---+

      Acktype:

Acktype:

         0 = ACK

0 = ACK

         1 = NACK

1 = NACK

         2 = STATIC-NACK

2 = STATIC-NACK

         3 is reserved (MUST NOT be used for parsability)

3 is reserved (MUST NOT be used for parsability)

      Acknowledgment Number: The least significant bits of the MSN.

Acknowledgment Number: The least significant bits of the MSN.

      CRC: 8-bit CRC computed over the entire feedback payload including
      any CID fields but excluding the feedback type, the 'Size' field,
      and the 'Code' octet, using the polynomial defined in Section
      5.3.1.1 of [RFC4995].  If the CID is given with an Add-CID octet,
      the Add-CID octet immediately precedes the FEEDBACK-1 or
      FEEDBACK-2 format.  For purposes of computing the CRC, the CRC
      field is zero.

CRC: 8-bit CRC computed over the entire feedback payload including any CID fields but excluding the feedback type, the 'Size' field, and the 'Code' octet, using the polynomial defined in Section 5.3.1.1 of [RFC4995]. If the CID is given with an Add-CID octet, the Add-CID octet immediately precedes the FEEDBACK-1 or FEEDBACK-2 format. For purposes of computing the CRC, the CRC field is zero.

      Feedback options: A variable number of feedback options, see
      Section 6.9.2.  Options may appear in any order.

Feedback options: A variable number of feedback options, see Section 6.9.2. Options may appear in any order.

Pelletier & Sandlund        Standards Track                   [Page 101]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 101] RFC 5225 ROHCv2 Profiles April 2008

   A FEEDBACK-2 of type NACK or STATIC-NACK is always implicitly an
   acknowledgment for a successfully decompressed packet, which
   corresponds to a packet whose LSBs match the Acknowledgment Number of
   the feedback element, unless the ACKNUMBER-NOT-VALID option (see
   Section 6.9.2.2) appears in the feedback element.

A FEEDBACK-2 of type NACK or STATIC-NACK is always implicitly an acknowledgment for a successfully decompressed packet, which corresponds to a packet whose LSBs match the Acknowledgment Number of the feedback element, unless the ACKNUMBER-NOT-VALID option (see Section 6.9.2.2) appears in the feedback element.

   The FEEDBACK-2 format always carries a CRC and is thus more robust
   than the FEEDBACK-1 format.  When receiving FEEDBACK-2, the
   compressor MUST verify the information by computing the CRC and
   comparing the result with the CRC carried in the feedback format.  If
   the two are not identical, the feedback element MUST be discarded.

The FEEDBACK-2 format always carries a CRC and is thus more robust than the FEEDBACK-1 format. When receiving FEEDBACK-2, the compressor MUST verify the information by computing the CRC and comparing the result with the CRC carried in the feedback format. If the two are not identical, the feedback element MUST be discarded.

6.9.2.  Feedback Options

6.9.2. Feedback Options

   A feedback option has variable length and the following general
   format:

A feedback option has variable length and the following general format:

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |   Opt Type    |    Opt Len    |
      +---+---+---+---+---+---+---+---+
      /          Option Data          /  Opt Len (octets)
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Opt Type | Opt Len | +---+---+---+---+---+---+---+---+ / Option Data / Opt Len (octets) +---+---+---+---+---+---+---+---+

      Opt Type: Unsigned integer that represents the type of the
      feedback option.  Section 6.9.2.1 through Section 6.9.2.4
      describes the ROHCv2 feedback options.

Opt Type: Unsigned integer that represents the type of the feedback option. Section 6.9.2.1 through Section 6.9.2.4 describes the ROHCv2 feedback options.

      Opt Len: Unsigned integer that represents the length of the Option
      Data field, in octets.

Opt Len: Unsigned integer that represents the length of the Option Data field, in octets.

      Option Data: Feedback type specific data.  Present if the value of
      the Opt Len field is set to a non-zero value.

Option Data: Feedback type specific data. Present if the value of the Opt Len field is set to a non-zero value.

6.9.2.1.  The REJECT Option

6.9.2.1. The REJECT Option

   The REJECT option informs the compressor that the decompressor does
   not have sufficient resources to handle the flow.

The REJECT option informs the compressor that the decompressor does not have sufficient resources to handle the flow.

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |  Opt Type = 2 |  Opt Len = 0  |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Opt Type = 2 | Opt Len = 0 | +---+---+---+---+---+---+---+---+

   When receiving a REJECT option, the compressor MUST stop compressing
   the packet flow, and SHOULD refrain from attempting to increase the
   number of compressed packet flows for some time.  The REJECT option

When receiving a REJECT option, the compressor MUST stop compressing the packet flow, and SHOULD refrain from attempting to increase the number of compressed packet flows for some time. The REJECT option

Pelletier & Sandlund        Standards Track                   [Page 102]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 102] RFC 5225 ROHCv2 Profiles April 2008

   MUST NOT appear more than once in the FEEDBACK-2 format; otherwise,
   the compressor MUST discard the entire feedback element.

MUST NOT appear more than once in the FEEDBACK-2 format; otherwise, the compressor MUST discard the entire feedback element.

6.9.2.2.  The ACKNUMBER-NOT-VALID Option

6.9.2.2. The ACKNUMBER-NOT-VALID Option

   The ACKNUMBER-NOT-VALID option indicates that the Acknowledgment
   Number field of the feedback is not valid.

The ACKNUMBER-NOT-VALID option indicates that the Acknowledgment Number field of the feedback is not valid.

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |  Opt Type = 3 |  Opt Len = 0  |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Opt Type = 3 | Opt Len = 0 | +---+---+---+---+---+---+---+---+

   A compressor MUST NOT use the Acknowledgment Number of the feedback
   to find the corresponding sent header when this option is present.
   When this option is used, the Acknowledgment Number field of the
   FEEDBACK-2 format is set to zero.  Consequently, a NACK or a STATIC-
   NACK feedback type sent with the ACKNUMBER-NOT-VALID option is
   equivalent to a STATIC-NACK with respect to the type of context
   repair requested by the decompressor.

A compressor MUST NOT use the Acknowledgment Number of the feedback to find the corresponding sent header when this option is present. When this option is used, the Acknowledgment Number field of the FEEDBACK-2 format is set to zero. Consequently, a NACK or a STATIC- NACK feedback type sent with the ACKNUMBER-NOT-VALID option is equivalent to a STATIC-NACK with respect to the type of context repair requested by the decompressor.

   The ACKNUMBER-NOT-VALID option MUST NOT appear more than once in the
   FEEDBACK-2 format; otherwise, the compressor MUST discard the entire
   feedback element.

The ACKNUMBER-NOT-VALID option MUST NOT appear more than once in the FEEDBACK-2 format; otherwise, the compressor MUST discard the entire feedback element.

6.9.2.3.  The CONTEXT_MEMORY Option

6.9.2.3. The CONTEXT_MEMORY Option

   The CONTEXT_MEMORY option informs the compressor that the
   decompressor does not have sufficient memory resources to handle the
   context of the packet flow, as the flow is currently compressed.

The CONTEXT_MEMORY option informs the compressor that the decompressor does not have sufficient memory resources to handle the context of the packet flow, as the flow is currently compressed.

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      |  Opt Type = 9 |  Opt Len = 0  |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Opt Type = 9 | Opt Len = 0 | +---+---+---+---+---+---+---+---+

   When receiving a CONTEXT_MEMORY option, the compressor SHOULD take
   actions to compress the packet flow in a way that requires less
   decompressor memory resources or stop compressing the packet flow.
   The CONTEXT_MEMORY option MUST NOT appear more than once in the
   FEEDBACK-2 format; otherwise, the compressor MUST discard the entire
   feedback element.

When receiving a CONTEXT_MEMORY option, the compressor SHOULD take actions to compress the packet flow in a way that requires less decompressor memory resources or stop compressing the packet flow. The CONTEXT_MEMORY option MUST NOT appear more than once in the FEEDBACK-2 format; otherwise, the compressor MUST discard the entire feedback element.

6.9.2.4.  The CLOCK_RESOLUTION Option

6.9.2.4. The CLOCK_RESOLUTION Option

   The CLOCK_RESOLUTION option informs the compressor of the clock
   resolution of the decompressor.  It also informs whether or not the
   decompressor supports timer-based compression of the RTP TS timestamp

The CLOCK_RESOLUTION option informs the compressor of the clock resolution of the decompressor. It also informs whether or not the decompressor supports timer-based compression of the RTP TS timestamp

Pelletier & Sandlund        Standards Track                   [Page 103]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 103] RFC 5225 ROHCv2 Profiles April 2008

   (see Section 6.6.9).  The CLOCK_RESOLUTION option is applicable per
   channel, i.e., it applies to any context associated with a profile
   for which the option is relevant between a compressor and
   decompressor pair.

(see Section 6.6.9). The CLOCK_RESOLUTION option is applicable per channel, i.e., it applies to any context associated with a profile for which the option is relevant between a compressor and decompressor pair.

        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
      | Opt Type = 10 |  Opt Len = 1  |
      +---+---+---+---+---+---+---+---+
      |     Clock resolution (ms)     |
      +---+---+---+---+---+---+---+---+

0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | Opt Type = 10 | Opt Len = 1 | +---+---+---+---+---+---+---+---+ | Clock resolution (ms) | +---+---+---+---+---+---+---+---+

      Clock resolution: Unsigned integer that represents the clock
      resolution of the decompressor expressed in milliseconds.

Clock resolution: Unsigned integer that represents the clock resolution of the decompressor expressed in milliseconds.

   The smallest clock resolution that can be indicated is 1 millisecond.
   The value zero has a special meaning: it indicates that the
   decompressor cannot do timer-based compression of the RTP Timestamp.
   The CLOCK_RESOLUTION option MUST NOT appear more than once in the
   FEEDBACK-2 format; otherwise, the compressor MUST discard the entire
   feedback element.

The smallest clock resolution that can be indicated is 1 millisecond. The value zero has a special meaning: it indicates that the decompressor cannot do timer-based compression of the RTP Timestamp. The CLOCK_RESOLUTION option MUST NOT appear more than once in the FEEDBACK-2 format; otherwise, the compressor MUST discard the entire feedback element.

6.9.2.5.  Unknown Option Types

6.9.2.5. Unknown Option Types

   If an option type other than those defined in this document is
   encountered, the compressor MUST discard the entire feedback element.

If an option type other than those defined in this document is encountered, the compressor MUST discard the entire feedback element.

7.  Security Considerations

7. Security Considerations

   Impairments such as bit errors on the received compressed headers,
   missing packets, and reordering between packets could cause the
   header decompressor to reconstitute erroneous packets, i.e., packets
   that do not match the original packet, but still have a valid IP, UDP
   (or UDP-Lite), and RTP headers, and possibly also valid UDP (or UDP-
   Lite) checksums.

Impairments such as bit errors on the received compressed headers, missing packets, and reordering between packets could cause the header decompressor to reconstitute erroneous packets, i.e., packets that do not match the original packet, but still have a valid IP, UDP (or UDP-Lite), and RTP headers, and possibly also valid UDP (or UDP- Lite) checksums.

   The header compression profiles defined herein use an internal
   checksum for verification of reconstructed headers.  This reduces the
   probability that a header decompressor delivers erroneous packets to
   upper layers without the error being noticed.  In particular, the
   probability that consecutive erroneous packets are not detected by
   the internal checksum is close to zero.

The header compression profiles defined herein use an internal checksum for verification of reconstructed headers. This reduces the probability that a header decompressor delivers erroneous packets to upper layers without the error being noticed. In particular, the probability that consecutive erroneous packets are not detected by the internal checksum is close to zero.

   This small but non-zero probability remains unchanged when integrity
   protection is applied after compression and verified before
   decompression, in the case where an attacker could discard or reorder
   packets between the compression endpoints.

This small but non-zero probability remains unchanged when integrity protection is applied after compression and verified before decompression, in the case where an attacker could discard or reorder packets between the compression endpoints.

Pelletier & Sandlund        Standards Track                   [Page 104]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 104] RFC 5225 ROHCv2 Profiles April 2008

   The impairments mentioned above could be caused by a malfunctioning
   or malicious header compressor.  Such corruption may be detected with
   end-to-end integrity mechanisms that will not be affected by the
   compression.  Moreover, the internal checksum can also be useful in
   the case of malfunctioning compressors.

The impairments mentioned above could be caused by a malfunctioning or malicious header compressor. Such corruption may be detected with end-to-end integrity mechanisms that will not be affected by the compression. Moreover, the internal checksum can also be useful in the case of malfunctioning compressors.

   Denial-of-service attacks are possible if an intruder can introduce
   (for example) bogus IR or FEEDBACK packets onto the link and thereby
   cause compression efficiency to be reduced.  However, an intruder
   having the ability to inject arbitrary packets at the link layer in
   this manner raises additional security issues that dwarf those
   related to the use of header compression.

Denial-of-service attacks are possible if an intruder can introduce (for example) bogus IR or FEEDBACK packets onto the link and thereby cause compression efficiency to be reduced. However, an intruder having the ability to inject arbitrary packets at the link layer in this manner raises additional security issues that dwarf those related to the use of header compression.

8.  IANA Considerations

8. IANA Considerations

   The following ROHC profile identifiers have been assigned by the IANA
   for the profiles defined in this document:

The following ROHC profile identifiers have been assigned by the IANA for the profiles defined in this document:

     Identifier        Profile
     ----------        -------
     0x0101            ROHCv2 RTP
     0x0102            ROHCv2 UDP
     0x0103            ROHCv2 ESP
     0x0104            ROHCv2 IP
     0x0107            ROHCv2 RTP/UDP-Lite
     0x0108            ROHCv2 UDP-Lite

Identifier Profile ---------- ------- 0x0101 ROHCv2 RTP 0x0102 ROHCv2 UDP 0x0103 ROHCv2 ESP 0x0104 ROHCv2 IP 0x0107 ROHCv2 RTP/UDP-Lite 0x0108 ROHCv2 UDP-Lite

9.  Acknowledgements

9. Acknowledgements

   The authors would like to thank Mark West, Robert Finking, Haipeng
   Jin, and Rohit Kapoor for serving as committed document reviewers,
   and also for constructive discussions during the development of this
   document.  Thanks to Carl Knutsson for his extensive contribution to
   this specification, as well as to Jani Juvan and Anders Edqvist for
   useful comments and feedback.  Thanks also to Elwyn Davies for his
   review as the General Area Review Team (Gen-ART) reviewer, and to
   Stephen Kent for his review on behalf of the IETF security
   directorate, during IETF last-call.  Finally, thanks to the many
   people who have contributed to previous ROHC specifications and
   supported this effort.

The authors would like to thank Mark West, Robert Finking, Haipeng Jin, and Rohit Kapoor for serving as committed document reviewers, and also for constructive discussions during the development of this document. Thanks to Carl Knutsson for his extensive contribution to this specification, as well as to Jani Juvan and Anders Edqvist for useful comments and feedback. Thanks also to Elwyn Davies for his review as the General Area Review Team (Gen-ART) reviewer, and to Stephen Kent for his review on behalf of the IETF security directorate, during IETF last-call. Finally, thanks to the many people who have contributed to previous ROHC specifications and supported this effort.

Pelletier & Sandlund        Standards Track                   [Page 105]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 105] RFC 5225 ROHCv2 Profiles April 2008

10.  References

10. References

10.1.  Normative References

10.1. Normative References

   [RFC0768]  Postel, J., "User Datagram Protocol", STD 6, RFC 768,
              August 1980.

[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, August 1980.

   [RFC0791]  Postel, J., "Internet Protocol", STD 5, RFC 791,
              September 1981.

[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.

   [RFC2004]  Perkins, C., "Minimal Encapsulation within IP", RFC 2004,
              October 1996.

[RFC2004] Perkins, C., "Minimal Encapsulation within IP", RFC 2004, October 1996.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
              (IPv6) Specification", RFC 2460, December 1998.

[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.

   [RFC2784]  Farinacci, D., Li, T., Hanks, S., Meyer, D., and P.
              Traina, "Generic Routing Encapsulation (GRE)", RFC 2784,
              March 2000.

[RFC2784] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P. Traina, "Generic Routing Encapsulation (GRE)", RFC 2784, March 2000.

   [RFC2890]  Dommety, G., "Key and Sequence Number Extensions to GRE",
              RFC 2890, September 2000.

[RFC2890] Dommety, G., "Key and Sequence Number Extensions to GRE", RFC 2890, September 2000.

   [RFC3550]  Schulzrinne, H., Casner, S., Frederick, R., and V.
              Jacobson, "RTP: A Transport Protocol for Real-Time
              Applications", STD 64, RFC 3550, July 2003.

[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, July 2003.

   [RFC3828]  Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and
              G. Fairhurst, "The Lightweight User Datagram Protocol
              (UDP-Lite)", RFC 3828, July 2004.

[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and G. Fairhurst, "The Lightweight User Datagram Protocol (UDP-Lite)", RFC 3828, July 2004.

   [RFC4019]  Pelletier, G., "RObust Header Compression (ROHC): Profiles
              for User Datagram Protocol (UDP) Lite", RFC 4019,
              April 2005.

[RFC4019] Pelletier, G., "RObust Header Compression (ROHC): Profiles for User Datagram Protocol (UDP) Lite", RFC 4019, April 2005.

   [RFC4302]  Kent, S., "IP Authentication Header", RFC 4302,
              December 2005.

[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, December 2005.

   [RFC4303]  Kent, S., "IP Encapsulating Security Payload (ESP)",
              RFC 4303, December 2005.

[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, December 2005.

   [RFC4995]  Jonsson, L-E., Pelletier, G., and K. Sandlund, "The RObust
              Header Compression (ROHC) Framework", RFC 4995, July 2007.

[RFC4995] Jonsson, L-E., Pelletier, G., and K. Sandlund, "The RObust Header Compression (ROHC) Framework", RFC 4995, July 2007.

Pelletier & Sandlund        Standards Track                   [Page 106]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 106] RFC 5225 ROHCv2 Profiles April 2008

   [RFC4997]  Finking, R. and G. Pelletier, "Formal Notation for RObust
              Header Compression (ROHC-FN)", RFC 4997, July 2007.

[RFC4997] Finking, R. and G. Pelletier, "Formal Notation for RObust Header Compression (ROHC-FN)", RFC 4997, July 2007.

10.2.  Informative References

10.2. Informative References

   [RFC2675]  Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms",
              RFC 2675, August 1999.

[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms", RFC 2675, August 1999.

   [RFC3095]  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.

[RFC3095] 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.

   [RFC3843]  Jonsson, L-E. and G. Pelletier, "RObust Header Compression
              (ROHC): A Compression Profile for IP", RFC 3843,
              June 2004.

[RFC3843] Jonsson, L-E. and G. Pelletier, "RObust Header Compression (ROHC): A Compression Profile for IP", RFC 3843, June 2004.

   [RFC4224]  Pelletier, G., Jonsson, L-E., and K. Sandlund, "RObust
              Header Compression (ROHC): ROHC over Channels That Can
              Reorder Packets", RFC 4224, January 2006.

[RFC4224] Pelletier, G., Jonsson, L-E., and K. Sandlund, "RObust Header Compression (ROHC): ROHC over Channels That Can Reorder Packets", RFC 4224, January 2006.

Pelletier & Sandlund        Standards Track                   [Page 107]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 107] RFC 5225 ROHCv2 Profiles April 2008

Appendix A.  Detailed Classification of Header Fields

Appendix A. Detailed Classification of Header Fields

   Header compression is possible due to the fact that most header
   fields do not vary randomly from packet to packet.  Many of the
   fields exhibit static behavior or change in a more or less
   predictable way.  When designing a header compression scheme, it is
   of fundamental importance to understand the behavior of the fields in
   detail.

Header compression is possible due to the fact that most header fields do not vary randomly from packet to packet. Many of the fields exhibit static behavior or change in a more or less predictable way. When designing a header compression scheme, it is of fundamental importance to understand the behavior of the fields in detail.

   In this appendix, all fields in the headers compressible by these
   profiles are classified and analyzed.  The analysis is based on
   behavior for the types of traffic that are expected to be the most
   frequently compressed (e.g., RTP field behavior is based on voice
   and/or video traffic behavior).

In this appendix, all fields in the headers compressible by these profiles are classified and analyzed. The analysis is based on behavior for the types of traffic that are expected to be the most frequently compressed (e.g., RTP field behavior is based on voice and/or video traffic behavior).

   Fields are classified as belonging to one of the following classes:

Fields are classified as belonging to one of the following classes:

   INFERRED - These fields contain values that can be inferred from
   other values, for example the size of the frame carrying the packet,
   and thus do not have to be included in compressed packets.

INFERRED - These fields contain values that can be inferred from other values, for example the size of the frame carrying the packet, and thus do not have to be included in compressed packets.

   STATIC - These fields are expected to be constant throughout the
   lifetime of the flow; in general, it is sufficient to design a
   compressed format so that these fields are only updated by IR
   packets.

STATIC - These fields are expected to be constant throughout the lifetime of the flow; in general, it is sufficient to design a compressed format so that these fields are only updated by IR packets.

   STATIC-DEF - These fields are expected to be constant throughout the
   lifetime of the flow and their values can be used to define a flow.
   They are only sent in IR packets.

STATIC-DEF - These fields are expected to be constant throughout the lifetime of the flow and their values can be used to define a flow. They are only sent in IR packets.

   STATIC-KNOWN - These fields are expected to have well-known values
   and therefore do not need to be communicated at all.

STATIC-KNOWN - These fields are expected to have well-known values and therefore do not need to be communicated at all.

   SEMISTATIC - These fields are unchanged most of the time.  However,
   occasionally the value changes but will revert to its original value.
   For ROHCv2, the values of such fields do not need to be possible to
   change with the smallest compressed packet formats, but should be
   possible to change via slightly larger compressed packets.

SEMISTATIC - These fields are unchanged most of the time. However, occasionally the value changes but will revert to its original value. For ROHCv2, the values of such fields do not need to be possible to change with the smallest compressed packet formats, but should be possible to change via slightly larger compressed packets.

   RARELY CHANGING (RACH) - These are fields that change their values
   occasionally and then keep their new values.  For ROHCv2, the values
   of such fields do not need to be possible to change with the smallest
   compressed packet formats, but should be possible to change via
   slightly larger compressed packets.

RARELY CHANGING (RACH) - These are fields that change their values occasionally and then keep their new values. For ROHCv2, the values of such fields do not need to be possible to change with the smallest compressed packet formats, but should be possible to change via slightly larger compressed packets.

   IRREGULAR - These are the fields for which no useful change pattern
   can be identified and should be transmitted uncompressed in all
   compressed packets.

IRREGULAR - These are the fields for which no useful change pattern can be identified and should be transmitted uncompressed in all compressed packets.

Pelletier & Sandlund        Standards Track                   [Page 108]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 108] RFC 5225 ROHCv2 Profiles April 2008

   PATTERN - These are fields that change between each packet, but
   change in a predictable pattern.

PATTERN - These are fields that change between each packet, but change in a predictable pattern.

A.1.  IPv4 Header Fields

A.1. IPv4 Header Fields

   +------------------------+----------------+
   | Field                  | Class          |
   +------------------------+----------------+
   | Version                | STATIC-KNOWN   |
   | Header Length          | STATIC-KNOWN   |
   | Type Of Service        | RACH           |
   | Packet Length          | INFERRED       |
   | Identification         |                |
   |             Sequential | PATTERN        |
   |             Seq. swap  | PATTERN        |
   |             Random     | IRREGULAR      |
   |             Zero       | STATIC         |
   | Reserved flag          | STATIC-KNOWN   |
   | Don't Fragment flag    | RACH           |
   | More Fragments flag    | STATIC-KNOWN   |
   | Fragment Offset        | STATIC-KNOWN   |
   | Time To Live           | RACH           |
   | Protocol               | STATIC-DEF     |
   | Header Checksum        | INFERRED       |
   | Source Address         | STATIC-DEF     |
   | Destination Address    | STATIC-DEF     |
   +------------------------+----------------+

+------------------------+----------------+ | Field | Class | +------------------------+----------------+ | Version | STATIC-KNOWN | | Header Length | STATIC-KNOWN | | Type Of Service | RACH | | Packet Length | INFERRED | | Identification | | | Sequential | PATTERN | | Seq. swap | PATTERN | | Random | IRREGULAR | | Zero | STATIC | | Reserved flag | STATIC-KNOWN | | Don't Fragment flag | RACH | | More Fragments flag | STATIC-KNOWN | | Fragment Offset | STATIC-KNOWN | | Time To Live | RACH | | Protocol | STATIC-DEF | | Header Checksum | INFERRED | | Source Address | STATIC-DEF | | Destination Address | STATIC-DEF | +------------------------+----------------+

   Version

Version

      The version field states which IP version is used and is set to
      the value four.

The version field states which IP version is used and is set to the value four.

   Header Length

Header Length

      As long as no options are present in the IP header, the header
      length is constant with the value five.  If there are options, the
      field could be RACH or STATIC-DEF, but only option-less headers
      are compressed by ROHCv2 profiles.  The field is therefore
      classified as STATIC-KNOWN.

As long as no options are present in the IP header, the header length is constant with the value five. If there are options, the field could be RACH or STATIC-DEF, but only option-less headers are compressed by ROHCv2 profiles. The field is therefore classified as STATIC-KNOWN.

   Type Of Service

Type Of Service

      For the type of flows compressed by the ROHCv2 profiles, the DSCP
      (Differentiated Services Code Point) and ECN (Explicit Congestion
      Notification) fields are expected to change relatively seldom.

For the type of flows compressed by the ROHCv2 profiles, the DSCP (Differentiated Services Code Point) and ECN (Explicit Congestion Notification) fields are expected to change relatively seldom.

Pelletier & Sandlund        Standards Track                   [Page 109]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 109] RFC 5225 ROHCv2 Profiles April 2008

   Packet Length

Packet Length

      Information about packet length is expected to be provided by the
      link layer.  The field is therefore classified as INFERRED.

Information about packet length is expected to be provided by the link layer. The field is therefore classified as INFERRED.

   IPv4 Identification

IPv4 Identification

      The Identification field (IP-ID) is used to identify what
      fragments constitute a datagram when reassembling fragmented
      datagrams.  The IPv4 specification does not specify exactly how
      this field is to be assigned values, only that each packet should
      get an IP-ID that is unique for the source-destination pair and
      protocol for the time the datagram (or any of its fragments) could
      be alive in the network.  This means that assignment of IP-ID
      values can be done in various ways, but the expected behaviors
      have been separated into four classes.

The Identification field (IP-ID) is used to identify what fragments constitute a datagram when reassembling fragmented datagrams. The IPv4 specification does not specify exactly how this field is to be assigned values, only that each packet should get an IP-ID that is unique for the source-destination pair and protocol for the time the datagram (or any of its fragments) could be alive in the network. This means that assignment of IP-ID values can be done in various ways, but the expected behaviors have been separated into four classes.

      Sequential

Sequential

         In this behavior, the IP-ID is expected to increment by one for
         most packets, but may increment by a value larger than one,
         depending on the behavior of the transmitting IPv4 stack.

In this behavior, the IP-ID is expected to increment by one for most packets, but may increment by a value larger than one, depending on the behavior of the transmitting IPv4 stack.

      Sequential Swapped

Sequential Swapped

         When using this behavior, the IP-ID behaves as in the
         Sequential behavior, but the two bytes of IP-ID are byte-
         swapped.  Therefore, the IP-ID can be swapped before
         compression to make it behave exactly as the Sequential
         behavior.

When using this behavior, the IP-ID behaves as in the Sequential behavior, but the two bytes of IP-ID are byte- swapped. Therefore, the IP-ID can be swapped before compression to make it behave exactly as the Sequential behavior.

      Random

Random

         Some IP stacks assign IP-ID values using a pseudo-random number
         generator.  There is thus no correlation between the ID values
         of subsequent datagrams, and therefore there is no way to
         predict the IP-ID value for the next datagram.  For header
         compression purposes, this means that the IP-ID field needs to
         be sent uncompressed with each datagram, resulting in two extra
         octets of header.

Some IP stacks assign IP-ID values using a pseudo-random number generator. There is thus no correlation between the ID values of subsequent datagrams, and therefore there is no way to predict the IP-ID value for the next datagram. For header compression purposes, this means that the IP-ID field needs to be sent uncompressed with each datagram, resulting in two extra octets of header.

      Zero

Zero

         This behavior, although not a legal implementation of IPv4, is
         sometimes seen in existing IPv4 stacks.  When this behavior is
         used, all IP packets have the IP-ID value set to zero.

This behavior, although not a legal implementation of IPv4, is sometimes seen in existing IPv4 stacks. When this behavior is used, all IP packets have the IP-ID value set to zero.

Pelletier & Sandlund        Standards Track                   [Page 110]

RFC 5225                    ROHCv2 Profiles                   April 2008

Pelletier & Sandlund Standards Track [Page 110] RFC 5225 ROHCv2 Profiles April 2008

   Flags

Flags

      The Reserved flag must be set to zero and is therefore classified
      as STATIC-KNOWN.  The Don't Fragment (DF) flag changes rarely and
      is therefore classified as RACH.  Finally, the More Fragments (MF)
      flag is expected to be zero because IP fragments will not be
      compressed by ROHC and is therefore classified as STATIC-KNOWN.

Reserved旗は、ゼロに設定しなければならなくて、したがって、STATIC-KNOWNとして分類されます。 Fragment(DF)旗ではなく、ドンが、めったに変化しないで、したがって、RACHとして分類されます。 最終的に、More Fragments(MF)旗は、IP断片がROHCによって圧縮されないのでゼロであると予想されて、したがって、STATIC-KNOWNとして分類されます。

   Fragment Offset

断片オフセット

      Under the assumption that no fragmentation occurs, the fragment
      offset is always zero and is therefore classified as STATIC-KNOWN.

断片化が全く起こらないという仮定で、断片オフセットは、いつもゼロであり、したがって、STATIC-KNOWNとして分類されます。

   Time To Live

生きる時間

      The Time To Live field is expected to be constant during the
      lifetime of a flow or to alternate between a limited number of
      values due to route changes.

Time To Live分野は、流れの生涯一定であるか、またはルート変化のため限られた数の値の間を行き来すると予想されます。

   Protocol

プロトコル

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

   Header Checksum

ヘッダーチェックサム

      The header checksum protects individual hops from processing a
      corrupted header.  When almost all IP header information is
      compressed away, there is no point in having this additional
      checksum; instead, it can be regenerated at the decompressor side.
      The field is therefore classified as INFERRED.

ヘッダーチェックサムは崩壊したヘッダーを処理するのから個々のホップを保護します。 ほとんどすべてのIPヘッダー情報が遠くに圧縮されるとき、この追加チェックサムを持つ意味が全くありません。 代わりに、減圧装置側でそれを作り直すことができます。 したがって、分野はINFERREDとして分類されます。

   Source and Destination addresses

ソースとDestinationアドレス

      These fields are part of the definition of a flow and must thus be
      constant for all packets in the flow.

これらの分野は、流れの定義の一部であり、流れにおけるすべてのパケットに、その結果、一定であるに違いありません。

Pelletier & Sandlund        Standards Track                   [Page 111]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[111ページ]

A.2.  IPv6 Header Fields

A.2。 IPv6ヘッダーフィールド

   +----------------------+----------------+
   | Field                | Class          |
   +----------------------+----------------+
   | Version              | STATIC-KNOWN   |
   | Traffic Class        | RACH           |
   | Flow Label           | STATIC-DEF     |
   | Payload Length       | INFERRED       |
   | Next Header          | STATIC-DEF     |
   | Hop Limit            | RACH           |
   | Source Address       | STATIC-DEF     |
   | Destination Address  | STATIC-DEF     |
   +----------------------+----------------+

+----------------------+----------------+ | 分野| クラス| +----------------------+----------------+ | バージョン| 静電気は知られています。| | 交通のクラス| RACH| | 流れラベル| 静的にクールです。| | ペイロード長| 推論されます。| | 次のヘッダー| 静的にクールです。| | ホップ限界| RACH| | ソースアドレス| 静的にクールです。| | 送付先アドレス| 静的にクールです。| +----------------------+----------------+

   Version

バージョン

      The version field states which IP version is used and is set to
      the value six.

バージョン分野は、どのIPバージョンが使用されているかを述べて、値sixに設定されます。

   Traffic Class

交通のクラス

      For the type of flows compressed by the ROHCv2 profiles, the DSCP
      and ECN fields are expected to change relatively seldom.

ROHCv2プロフィールによって圧縮された流れのタイプにおいて、DSCPと電子証券取引ネットワーク分野が比較的めったに変化しないと予想されます。

   Flow Label

流れラベル

      This field may be used to identify packets belonging to a specific
      flow.  If it is not used, the value should be set to zero.
      Otherwise, all packets belonging to the same flow must have the
      same value in this field.  The field is therefore classified as
      STATIC-DEF.

この分野は、特定の流れに属すパケットを特定するのに使用されるかもしれません。 それが使用されていないなら、値はゼロに設定されるべきです。 さもなければ、同じ流れに属すすべてのパケットがこの分野に同じ値を持たなければなりません。 したがって、分野はSTATIC-DEFとして分類されます。

   Payload Length

ペイロード長

      Information about packet length (and, consequently, payload
      length) is expected to be provided by the link layer.  The field
      is therefore classified as INFERRED.

リンクレイヤのそばでパケット長(その結果ペイロード長)に関する情報が提供されると予想されます。 したがって、分野はINFERREDとして分類されます。

   Next Header

次のヘッダー

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

Pelletier & Sandlund        Standards Track                   [Page 112]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[112ページ]

   Hop Limit

ホップ限界

      The Hop Limit field is expected to be constant during the lifetime
      of a flow or to alternate between a limited number of values due
      to route changes.

Hop Limit分野は、流れの生涯一定であるか、またはルート変化のため限られた数の値の間を行き来すると予想されます。

   Source and Destination addresses

ソースとDestinationアドレス

      These fields are part of the definition of a flow and must thus be
      constant for all packets in the flow.  The fields are therefore
      classified as STATIC-DEF.

これらの分野は、流れの定義の一部であり、流れにおけるすべてのパケットに、その結果、一定であるに違いありません。 したがって、分野はSTATIC-DEFとして分類されます。

A.3.  UDP Header Fields

A.3。 UDPヘッダーフィールド

   +------------------+-------------+
   | Field            | Class       |
   +------------------+-------------+
   | Source Port      | STATIC-DEF  |
   | Destination Port | STATIC-DEF  |
   | Length           | INFERRED    |
   | Checksum         |             |
   |         Disabled | STATIC      |
   |         Enabled  | IRREGULAR   |
   +------------------+-------------+

+------------------+-------------+ | 分野| クラス| +------------------+-------------+ | ソース港| 静的にクールです。| | 仕向港| 静的にクールです。| | 長さ| 推論されます。| | チェックサム| | | 無能にされます。| 静電気| | 可能にされます。| 不規則| +------------------+-------------+

   Source and Destination ports

ソースとDestinationポート

      These fields are part of the definition of a flow and must thus be
      constant for all packets in the flow.

これらの分野は、流れの定義の一部であり、流れにおけるすべてのパケットに、その結果、一定であるに違いありません。

   Length

長さ

      Information about packet length is expected to be provided by the
      link layer.  The field is therefore classified as INFERRED.

リンクレイヤのそばでパケット長に関する情報が提供されると予想されます。 したがって、分野はINFERREDとして分類されます。

   Checksum

チェックサム

      The checksum can be optional.  If disabled, its value is
      constantly zero and can be compressed away.  If enabled, its value
      depends on the payload, which for compression purposes is
      equivalent to it changing randomly with every packet.

チェックサムは任意である場合があります。 無能にされるなら、値が無能にされる、絶えずゼロに合わせて、遠くに圧縮されていて、そうすることができます。 可能にされるなら、値はペイロードに依存します。(圧縮目的のために、それは、手当たりしだいにあらゆるパケットを交換しながら、それに同等です)。

Pelletier & Sandlund        Standards Track                   [Page 113]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[113ページ]

A.4.  UDP-Lite Header Fields

A.4。 UDP-Liteヘッダーフィールド

   +--------------------+-------------+
   | Field              | Class       |
   +--------------------+-------------+
   | Source Port        | STATIC-DEF  |
   | Destination Port   | STATIC-DEF  |
   | Checksum Coverage  |             |
   |        Zero        | STATIC-DEF  |
   |        Constant    | INFERRED    |
   |        Variable    | IRREGULAR   |
   | Checksum           | IRREGULAR   |
   +--------------------+-------------+

+--------------------+-------------+ | 分野| クラス| +--------------------+-------------+ | ソース港| 静的にクールです。| | 仕向港| 静的にクールです。| | チェックサム適用範囲| | | ゼロ| 静的にクールです。| | 定数| 推論されます。| | 変数| 不規則| | チェックサム| 不規則| +--------------------+-------------+

   Source and Destination Port

ソースと仕向港

      These fields are part of the definition of a flow and must thus be
      constant for all packets in the flow.

これらの分野は、流れの定義の一部であり、流れにおけるすべてのパケットに、その結果、一定であるに違いありません。

   Checksum Coverage

チェックサム適用範囲

      The Checksum Coverage field may behave in different ways: it may
      have a value of zero, it may be equal to the datagram length, or
      it may have any value between eight octets and the length of the
      datagram.  From a compression perspective, this field is expected
      to either be entirely predictable (for the cases where it follows
      the same behavior as the UDP Length field or where it takes on a
      constant value) or to change randomly for each packet (making the
      value unpredictable from a header-compression perspective).  For
      all cases, the behavior itself is not expected to change for this
      field during the lifetime of a packet flow, or to change
      relatively seldom.

Checksum Coverage分野は異なった方法で振る舞うかもしれません: それには、ゼロの値があるかもしれませんか、それがデータグラムの長さと等しいかもしれませんか、またはそれはデータグラムの8つの八重奏と長さの間にどんな値も持っているかもしれません。 圧縮見解から、この分野は、完全に予測できるか(UDP Length分野と同じ振舞いに続くか、またはそれが恒常価値を呈するケースのための)、または手当たりしだいに各パケットを交換すると予想されます(値をヘッダー圧縮見解から予測できるようにしないで)。 すべてのケースにおいて、振舞い自体は、パケット流動の生涯この分野に変化するか、または比較的めったに変化しないと予想されません。

   Checksum

チェックサム

      The information used for the calculation of the UDP-Lite checksum
      is governed by the value of the checksum coverage and minimally
      includes the UDP-Lite header.  The checksum is a changing field
      that must always be sent as-is.

UDP-Liteチェックサムの計算に使用される情報は、チェックサム適用範囲の値によって治められて、UDP-Liteヘッダーを最少量で含んでいます。 チェックサムはいつもそのままで送らなければならない変化野原です。

Pelletier & Sandlund        Standards Track                   [Page 114]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[114ページ]

A.5.  RTP Header Fields

A.5。 RTPヘッダーフィールド

   +----------------+----------------+
   | Field          | Class          |
   +----------------+----------------+
   | Version        | STATIC-KNOWN   |
   | Padding        | RACH           |
   | Extension      | RACH           |
   | CSRC Counter   | RACH           |
   | Marker         | SEMISTATIC     |
   | Payload Type   | RACH           |
   | Sequence Number| PATTERN        |
   | Timestamp      | PATTERN        |
   | SSRC           | STATIC-DEF     |
   | CSRC           | RACH           |
   +----------------+----------------+

+----------------+----------------+ | 分野| クラス| +----------------+----------------+ | バージョン| 静電気は知られています。| | 詰め物| RACH| | 拡大| RACH| | CSRCカウンタ| RACH| | マーカー| SEMISTATIC| | 有効搭載量タイプ| RACH| | 一連番号| パターン| | タイムスタンプ| パターン| | SSRC| 静的にクールです。| | CSRC| RACH| +----------------+----------------+

   Version

バージョン

      This field is expected to have the value two and the field is
      therefore classified as STATIC-KNOWN.

この分野には値twoがあると予想されて、したがって、分野はSTATIC-KNOWNとして分類されます。

   Padding

詰め物

      The use of this field is application-dependent, but when payload
      padding is used, it is likely to be present in most or all
      packets.  The field is classified as RACH to allow for the case
      where the value of this field changes.

この分野の使用はアプリケーション依存していますが、ペイロード詰め物が使用されているとき、それは大部分かすべてのパケットに存在している傾向があります。 分野は、この分野の値が変化するケースを考慮するためにRACHとして分類されます。

   Extension

拡大

      If RTP extensions are used by the application, these extensions
      are often present in all packets, although the use of extensions
      is infrequent.  To allow efficient compression of a flow using
      extensions in only a few packets, this field is classified as
      RACH.

RTP拡張子がアプリケーションで使用されるなら、これらの拡大はすべてのパケットにしばしば存在しています、拡張子の使用が珍しいのですが。 ほんのいくつかのパケットで拡張子を使用することで流れの効率的な圧縮を許すために、この分野はRACHとして分類されます。

   CSRC Count

CSRCは数えます。

      This field indicates the number of CSRC items present in the CSRC
      list.  This number is expected to be mostly constant on a packet-
      to-packet basis and when it changes, change by small amounts.  As
      long as no RTP mixer is used, the value of this field will be
      zero.

この分野はCSRCリストの現在のCSRCの品目の数を示します。 パケットへのパケット基礎といつ変化するかに関してこの数がほとんど一定であると予想されます、少量に従った変化。 どんなRTPミキサーも使用されていない限り、この分野の値はゼロになるでしょう。

Pelletier & Sandlund        Standards Track                   [Page 115]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[115ページ]

   Marker

マーカー

      For audio, the marker bit should be set only in the first packet
      of a talkspurt, while for video, it should be set in the last
      packet of every picture.  This means that in both cases the RTP
      marker is classified as SEMISTATIC.

オーディオにおいて、マーカービットはtalkspurtの最初のパケットだけに設定されるべきです、それがあらゆる絵の最後のパケットにビデオにおいて設定されるべきですが。 これは、どちらの場合も、RTPマーカーがSEMISTATICとして分類されることを意味します。

   Payload Type

有効搭載量タイプ

      Applications could adapt to congestion by changing payload type
      and/or frame sizes, but that is not expected to happen frequently,
      so this field is classified as RACH.

アプリケーションがペイロードタイプ、そして/または、フレーム・サイズを変えることによって混雑に順応するかもしれませんが、それが頻繁に起こらないと予想されるので、この分野はRACHとして分類されます。

   RTP Sequence Number

RTP一連番号

      The RTP Sequence Number will be incremented by one for each packet
      sent.

RTP Sequence Numberは送られた各パケットあたり1つ増加されるでしょう。

   Timestamp

タイムスタンプ

      In the audio case:

オーディオでは、以下をケースに入れてください。

         As long as there are no pauses in the audio stream, the RTP
         Timestamp will be incremented by a constant value, which
         corresponds to the number of samples in the speech frame.  It
         will thus mostly follow the RTP Sequence Number.  When there
         has been a silent period and a new talkspurt begins, the
         timestamp will jump in proportion to the length of the silent
         period.  However, the increment will probably be within a
         relatively limited range.

オーディオストリームにくぎりが全くない限り、RTP Timestampは恒常価値によって増加されるでしょう。(それは、スピーチフレームのサンプルの数に対応します)。 その結果、それはRTP Sequence Numberにほとんど続くでしょう。 沈黙期があって、新しいtalkspurtが始まると、タイムスタンプは沈黙期の長さに比例してジャンプするでしょう。 しかしながら、比較的限られた範囲の中に増分がたぶんあるでしょう。

      In the video case:

ビデオでは、以下をケースに入れてください。

         Between two consecutive packets, the timestamp will either be
         unchanged or increase by a multiple of a fixed value
         corresponding to the picture clock frequency.  The timestamp
         can also decrease by a multiple of the fixed value for certain
         coding schemes.  The change in timestamp value, expressed as a
         multiple of the picture clock frequency, is in most cases
         within a limited range.

2つの連続したパケットの間では、タイムスタンプは、変わりがないか、または絵のクロック周波数に対応する一定の価値の倍数増加するでしょう。 また、タイムスタンプはコード構成を確かな一定の価値の倍数減少させることができます。 多くの場合限られた範囲の中に絵のクロック周波数の倍数として言い表されたタイムスタンプ値における変化があります。

   SSRC

SSRC

      This field is part of the definition of a flow and must thus be
      constant for all packets in the flow.  The field is therefore
      classified as STATIC-DEF.

この分野は、流れの定義の一部であり、流れにおけるすべてのパケットに、その結果、一定であるに違いありません。 したがって、分野はSTATIC-DEFとして分類されます。

Pelletier & Sandlund        Standards Track                   [Page 116]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[116ページ]

   Contributing Sources (CSRC)

ソースを寄付します。(CSRC)

      The participants in a session, who are identified by the CSRC
      fields, are usually expected to be unchanged on a packet-to-packet
      basis, but will infrequently change by a few additions and/or
      removals.

セッションの関係者(CSRC分野によって特定されます)は、パケットからパケットへのベースで変わりがないと通常予想されますが、いくつかの追加、そして/または、取り外しでまれに変化するでしょう。

A.6.  ESP Header Fields

A.6。 超能力ヘッダーフィールド

   +------------------+-------------+
   | Field            | Class       |
   +------------------+-------------+
   | SPI              | STATIC-DEF  |
   | Sequence Number  | PATTERN     |
   +------------------+-------------+

+------------------+-------------+ | 分野| クラス| +------------------+-------------+ | SPI| 静的にクールです。| | 一連番号| パターン| +------------------+-------------+

   SPI

SPI

      This field is used to identify a distinct flow between two IPsec
      peers and it changes rarely; therefore, it is classified as
      STATIC-DEF.

この分野は2人のIPsec同輩の間の異なった流れを特定するのに使用されます、そして、めったに変化しません。 したがって、それはSTATIC-DEFとして分類されます。

   ESP Sequence Number

超能力一連番号

      The ESP Sequence Number will be incremented by one for each packet
      sent.

超能力Sequence Numberは送られた各パケットあたり1つ増加されるでしょう。

A.7.  IPv6 Extension Header Fields

A.7。 IPv6拡大ヘッダーフィールド

   +-----------------------+---------------+
   | Field                 | Class         |
   +-----------------------+---------------+
   | Next Header           | STATIC-DEF    |
   | Ext Hdr Len           |               |
   |      Routing          | STATIC-DEF    |
   |      Hop-by-hop       | STATIC        |
   |      Destination      | STATIC        |
   | Options               |               |
   |      Routing          | STATIC-DEF    |
   |      Hop-by-hop       | RACH          |
   |      Destination      | RACH          |
   +-----------------------+---------------+

+-----------------------+---------------+ | 分野| クラス| +-----------------------+---------------+ | 次のヘッダー| 静的にクールです。| | Ext Hdrレン| | | ルート設定| 静的にクールです。| | ホップで、跳んでください。| 静電気| | 目的地| 静電気| | オプション| | | ルート設定| 静的にクールです。| | ホップで、跳んでください。| RACH| | 目的地| RACH| +-----------------------+---------------+

   Next Header

次のヘッダー

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

Pelletier & Sandlund        Standards Track                   [Page 117]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[117ページ]

   Ext Hdr Len

Ext Hdrレン

      For the Routing header, it is expected that the length will remain
      constant for the duration of the flow, and that a change in the
      length should be classified as a new flow by the ROHC compressor.
      For Hop-by-hop and Destination options headers, the length is
      expected to remain static, but can be updated by an IR packet.

ルート設定ヘッダーに関しては、長さが流れの持続時間に一定のままで残って、長さにおける変化が新しい流れとしてROHCコンプレッサーによって分類されるはずであると予想されます。 ホップによるHopとDestinationオプションヘッダーに関しては、長さを静的に残っていると予想しますが、IRパケットはアップデートできます。

   Options

オプション

      For the Routing header, it is expected that the option content
      will remain constant for the duration of the flow, and that a
      change in the routing information should be classified as a new
      flow by the ROHC compressor.  For Hop-by-hop and Destination
      options headers, the options are expected to remain static, but
      can be updated by an IR packet.

ルート設定ヘッダーに関しては、オプション内容が流れの持続時間に一定のままで残って、ルーティング情報における変化が新しい流れとしてROHCコンプレッサーによって分類されるはずであると予想されます。 ホップによるHopとDestinationオプションヘッダーに関しては、オプションを静的に残っていると予想しますが、IRパケットはアップデートできます。

A.8.  GRE Header Fields

A.8。 GREヘッダーフィールド

   +--------------------+---------------+
   | Field              | Class         |
   +--------------------+---------------+
   | C flag             | STATIC        |
   | K flag             | STATIC        |
   | S flag             | STATIC        |
   | R flag             | STATIC-KNOWN  |
   | Reserved0, Version | STATIC-KNOWN  |
   | Protocol           | STATIC-DEF    |
   | Checksum           | IRREGULAR     |
   | Reserved           | STATIC-KNOWN  |
   | Sequence Number    | PATTERN       |
   | Key                | STATIC-DEF    |
   +--------------------+---------------+

+--------------------+---------------+ | 分野| クラス| +--------------------+---------------+ | C旗| 静電気| | K旗| 静電気| | S旗| 静電気| | R旗| 静電気は知られています。| | Reserved0、バージョン| 静電気は知られています。| | プロトコル| 静的にクールです。| | チェックサム| 不規則| | 予約されます。| 静電気は知られています。| | 一連番号| パターン| | キー| 静的にクールです。| +--------------------+---------------+

   Flags

      The four flag bits are not expected to change for the duration of
      the flow, and the R flag is expected to always be set to zero.

4フラグビットが流れの持続時間のために変化しないと予想されて、いつもR旗によってゼロに設定されると予想されます。

   Reserved0, Version

Reserved0、バージョン

      Both of these fields are expected to be set to zero for the
      duration of any flow.

どんな流れの持続時間のためにもこれらの分野の両方によってゼロに設定されると予想されます。

   Protocol

プロトコル

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

Pelletier & Sandlund        Standards Track                   [Page 118]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[118ページ]

   Checksum

チェックサム

      When the checksum field is present, it is expected to behave
      unpredictably.

チェックサム分野が存在しているとき、予想外に振る舞うと予想されます。

   Reserved

予約されます。

      When present, this field is expected to be set to zero.

存在しているとき、この分野によってゼロに設定されると予想されます。

   Sequence Number

一連番号

      When present, the Sequence Number increases by one for each
      packet.

存在しているとき、Sequence Numberは各パケットあたり1つ増加します。

   Key

キー

      When present, the Key field is used to define the flow and does
      not change.

存在しているとき、Key分野は、流れを定義するのに使用されて、変化しません。

A.9.  MINE Header Fields

A.9。 鉱山ヘッダーフィールド

   +---------------------+----------------+
   | Field               | Class          |
   +---------------------+----------------+
   | Protocol            | STATIC-DEF     |
   | S bit               | STATIC-DEF     |
   | Reserved            | STATIC-KNOWN   |
   | Checksum            | INFERRED       |
   | Source Address      | STATIC-DEF     |
   | Destination Address | STATIC-DEF     |
   +---------------------+----------------+

+---------------------+----------------+ | 分野| クラス| +---------------------+----------------+ | プロトコル| 静的にクールです。| | Sビット| 静的にクールです。| | 予約されます。| 静電気は知られています。| | チェックサム| 推論されます。| | ソースアドレス| 静的にクールです。| | 送付先アドレス| 静的にクールです。| +---------------------+----------------+

   Protocol

プロトコル

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

   S bit

Sビット

      The S bit is not expected to change during a flow.

Sビットが流れの間、変化しないと予想されます。

   Reserved

予約されます。

      The reserved field is expected to be set to zero.

予約された分野によってゼロに設定されると予想されます。

Pelletier & Sandlund        Standards Track                   [Page 119]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[119ページ]

   Checksum

チェックサム

      The header checksum protects individual routing hops from
      processing a corrupted header.  Since all fields of this header
      are compressed away, there is no need to include this checksum in
      compressed packets and it can be regenerated at the decompressor
      side.

ヘッダーチェックサムは崩壊したヘッダーを処理するのから個々のルーティングホップを保護します。 このヘッダーのすべての分野が遠くに圧縮されるので、圧縮されたパケットにこのチェックサムを含む必要は全くありません、そして、減圧装置側でそれは作り直すことができます。

   Source and Destination Addresses

ソースと送付先アドレス

      These fields can be used to define the flow and are not expected
      to change.

これらの分野は、流れを定義するのに使用できて、変化しないと予想されます。

A.10.  AH Header Fields

A.10。 ああ、ヘッダーフィールズ

   +---------------------+----------------+
   | Field               | Class          |
   +---------------------+----------------+
   | Next Header         | STATIC-DEF     |
   | Payload Length      | STATIC         |
   | Reserved            | STATIC-KNOWN   |
   | SPI                 | STATIC-DEF     |
   | Sequence Number     | PATTERN        |
   | ICV                 | IRREGULAR      |
   +---------------------+----------------+

+---------------------+----------------+ | 分野| クラス| +---------------------+----------------+ | 次のヘッダー| 静的にクールです。| | ペイロード長| 静電気| | 予約されます。| 静電気は知られています。| | SPI| 静的にクールです。| | 一連番号| パターン| | ICV| 不規則| +---------------------+----------------+

   Next Header

次のヘッダー

      This field will have the same value in all packets of a flow and
      is therefore classified as STATIC-DEF.

この分野は、流れのすべてのパケットに同じ値を持って、したがって、STATIC-DEFとして分類されます。

   Payload Length

ペイロード長

      It is expected that the length of the header is constant for the
      duration of the flow.

流れの持続時間に、ヘッダーの長さが一定であると予想されます。

   Reserved

予約されます。

      The value of this field will be set to zero.

この分野の値はゼロに設定されるでしょう。

   SPI

SPI

      This field is used to identify a specific flow and only changes
      when the sequence number wraps around, and is therefore classified
      as STATIC-DEF.

この分野は、一連番号が巻きつけられるとき、特定の流れと変化だけを特定するのに使用されて、したがって、STATIC-DEFとして分類されます。

Pelletier & Sandlund        Standards Track                   [Page 120]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[120ページ]

   Sequence Number

一連番号

      The Sequence Number will be incremented by one for each packet
      sent.

Sequence Numberは送られた各パケットあたり1つ増加されるでしょう。

   ICV

ICV

      The ICV is expected to behave unpredictably and is therefore
      classified as IRREGULAR.

ICVは予想外に振る舞うと予想されて、したがって、IRREGULARとして分類されます。

Appendix B.  Compressor Implementation Guidelines

付録B.コンプレッサー実施要綱

   This section describes some guiding principles for implementing a
   ROHCv2 compressor with focus on how to efficiently select appropriate
   packet formats.  The text in this appendix should be considered
   guidelines; it does not define any normative requirement on how
   ROHCv2 profiles are implemented.

このセクションは、焦点がどう効率的に適切なパケット・フォーマットを選択するかである状態でROHCv2コンプレッサーを実行するためにいくつかの指導原理について説明します。 この付録のテキストはガイドラインであると考えられるべきです。 それはROHCv2プロフィールがどう実行されるかに関するどんな標準の要件も定義しません。

B.1.  Reference Management

B.1。 参照管理

   The compressor usually maintains a sliding window of reference
   headers, which contains as many references as needed for the
   optimistic approach.  Each reference contains a description of which
   changes occurred in the flow between two consecutive headers in the
   flow, and a new reference is inserted into the window each time a
   packet is compressed by this context.  A reference may for example be
   implemented as a stored copy of the uncompressed header being
   represented.  When the compressor is confident that a specific
   reference is no longer used by the decompressor (for example by using
   the optimistic approach or feedback received), the reference is
   removed from the sliding window.

通常、コンプレッサーは参照ヘッダーの引窓を維持します。(それは、楽観的なアプローチに必要とされるのと同じくらい多くの参照を含みます)。 各参照は変化が2個の連続したヘッダーの間の流れで流れで起こった記述を含んでいます、そして、パケットがこの文脈によって圧縮されるたびに新しい参照は窓に挿入されます。 例えば、参照は代理をされる解凍されたヘッダーの格納されたコピーとして実行されるかもしれません。 コンプレッサーが減圧装置(例えば、楽観的なアプローチかフィードバックを使用することによって、受信する)によって特定指示がもう使用されないと確信しているとき、参照は引窓から取り除かれます。

B.2.  Window-based LSB Encoding (W-LSB)

B.2。 窓のベースのLSBコード化(W-LSB)

   Section 5.1.1 describes how the optimistic approach impacts the
   packet format selection for the compressor.  Exactly how the
   compressor selects a packet format is up to the implementation to
   decide, but the following is an example of how this process can be
   performed for lsb-encoded fields through the use of Window-based LSB
   encoding (W-LSB).

セクション5.1 .1 楽観的なアプローチがどうコンプレッサーのためのパケット・フォーマット選択に影響を与えるかを説明します。 コンプレッサーがちょうどどうパケット・フォーマットを選択するかが決める実現まで達していますが、↓これは(W-LSB)をコード化するWindowベースのLSBの使用でどうlsbによってコード化された分野にこの過程を実行できるかに関する例です。

   With W-LSB encoding, the compressor uses a number of references (a
   window) from its context.  What references to use is determined by
   its optimistic approach.  The compressor extracts the value of the
   field to be W-LSB encoded from each reference in the window, and
   finds the maximum and minimum values.  Once it determines these
   values, the compressor uses the assumption that the decompressor has
   a value for this field within the range given by these boundaries

W-LSBコード化と共に、コンプレッサーは文脈からの多くの参照(窓)を使用します。 どんな参照を使用したらよいかは楽観的なアプローチで決定します。 コンプレッサーは、窓での各参照からコード化されたW-LSBになるように分野の値を抽出して、最大の、そして、最小の値に当たります。 いったんこれらの値を決定すると、コンプレッサーはこれらの境界のそばで減圧装置で範囲の中のこの分野への値を与えるという仮定を使用します。

Pelletier & Sandlund        Standards Track                   [Page 121]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[121ページ]

   (inclusively) as its reference.  The compressor can then select a
   number of LSBs from the value to be compressed, so that the LSBs can
   be decompressed regardless of whether the decompressor uses the
   minimum value, the maximum value or any other value in the range of
   possible references.

(包括的に) 参照として。 次に、コンプレッサーは、値からの多くのLSBsが圧縮されるのを選択できます、減圧装置が可能な参照の範囲で最小値、最大値またはいかなる他の値も使用するかどうかにかかわらずLSBsを減圧できるように。

B.3.  W-LSB Encoding and Timer-based Compression

B.3。 W-LSBのコード化していてタイマベースの圧縮

   Section 6.6.9 defines decompressor behavior for timer-based RTP
   timestamp compression.  This section gives guidelines on how the
   compressor should determine the number of LSB bits it should send for
   the timestamp field.  When using timer-based compression, this number
   depends on the sum of the jitter before the compressor and the jitter
   between the compressor and decompressor.

セクション6.6 .9 タイマベースのRTPタイムスタンプ圧縮のための減圧装置の振舞いを定義します。 このセクションはコンプレッサーがどうそれがタイムスタンプ分野に送るべきであるLSBビットの数を測定するはずであるかに関するガイドラインを与えます。 タイマベースの圧縮を使用するとき、この数はコンプレッサーの前のジターとコンプレッサーと減圧装置の間のジターの合計に依存します。

   The jitter before the compressor can be estimated using the following
   computation:

以下の計算を使用することでコンプレッサーの前のジターを見積もることができます:

       Max_Jitter_BC =
            max {|(T_n - T_j) - ((a_n - a_j) / time_stride)|,
               for all headers j in the sliding window}

マックス_Jitter_紀元前=最大| (T--t_j)--(a--_j)/時間_ストライド)|、引窓のすべてのヘッダーj

   where (T_n - T_j) is the difference in the timestamp between the
   currently compressed header and a reference header and (a_n - a_j) is
   the difference in arrival time between those same two headers.

(T--T_j)が現在圧縮されたヘッダーと参照ヘッダーの間のタイムスタンプの違いであり、(a--_j)がそれらの同じ2個のヘッダーの間の到着時間の違いであるところ。

   In addition to this, the compressor needs to estimate an upper bound
   for the jitter between the compressor and decompressor
   (Max_Jitter_CD).  This information may for example come from lower
   layers.

これに加えて、コンプレッサーは、コンプレッサーと減圧装置(マックス_Jitter_CD)の間のジターのために上限を見積もる必要があります。 例えば、この情報は下層から来るかもしれません。

   A compressor implementation can determine whether the difference in
   clock resolution between the compressor and decompressor induces an
   error when performing integer arithmetics; it can then treat this
   error as additional jitter.

コンプレッサー実現は、整数演算を実行するとき、コンプレッサーと減圧装置の間の時計解決の違いが誤りを引き起こすかどうか決定できます。 そして、それは追加ジターとしてこの誤りを扱うことができます。

   After obtaining estimates for the jitters, the number of bits needed
   to transmit is obtained using the following calculation:

ジターのための見積りを得た後に、以下の計算を使用することで伝わるのが必要であるビットの数を得ます:

       ceiling(log2(2 * (Max_Jitter_BC + Max_Jitter_CD + 2) + 1))

天井(log2(2*(マックス_ジター_紀元前+最大_ジター_CD+2)+1))

   This number is then used to select a packet format that contains at
   least this many scaled timestamp bits.

この数はそうであり、少なくともこれを含むパケット・フォーマットを選択するのに使用されて、次に、多くがタイムスタンプビットをスケーリングしました。

Pelletier & Sandlund        Standards Track                   [Page 122]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[122ページ]

Authors' Addresses

作者のアドレス

   Ghyslain Pelletier
   Ericsson
   Box 920
   Lulea  SE-971 28
   Sweden

GhyslainペレティアエリクソンBox920ルーレオSE-971 28スウェーデン

   Phone: +46 (0) 8 404 29 43
   EMail: ghyslain.pelletier@ericsson.com

以下に電話をしてください。 +46(0) 8 404 29 43はメールされます: ghyslain.pelletier@ericsson.com

   Kristofer Sandlund
   Ericsson
   Box 920
   Lulea  SE-971 28
   Sweden

クリストファSandlundエリクソンBox920ルーレオSE-971 28スウェーデン

   Phone: +46 (0) 8 404 41 58
   EMail: kristofer.sandlund@ericsson.com

以下に電話をしてください。 +46(0) 8 404 41 58はメールされます: kristofer.sandlund@ericsson.com

Pelletier & Sandlund        Standards Track                   [Page 123]

RFC 5225                    ROHCv2 Profiles                   April 2008

ペレティアとRFC5225ROHCv2が2008年4月に輪郭を描くSandlund標準化過程[123ページ]

Full Copyright Statement

完全な著作権宣言文

   Copyright (C) The IETF Trust (2008).

IETFが信じる著作権(C)(2008)。

   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.

このドキュメントはBCP78に含まれた権利、ライセンス、および制限を受けることがあります、そして、そこに詳しく説明されるのを除いて、作者は彼らのすべての権利を保有します。

   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.

このドキュメントとここに含まれた情報はその人が代理をするか、または(もしあれば)後援される組織、インターネットの振興発展を目的とする組織、「そのままで」という基礎と貢献者の上で提供していて、IETFはそして、インターネット・エンジニアリング・タスク・フォースがすべての保証を放棄すると信じます、急行である、または暗示していて、他を含んでいて、情報の使用がここに侵害しないどんな保証も少しもまっすぐになるということであるかいずれが市場性か特定目的への適合性の黙示的な保証です。

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.

IETFはどんなIntellectual Property Rightsの正当性か範囲、実現に関係すると主張されるかもしれない他の権利、本書では説明された技術の使用またはそのような権利の下におけるどんなライセンスも利用可能であるかもしれない、または利用可能でないかもしれない範囲に関しても立場を全く取りません。 または、それはそれを表しません。どんなそのような権利も特定するためのどんな独立している努力もしました。 BCP78とBCP79でRFCドキュメントの権利に関する手順に関する情報を見つけることができます。

   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.

IPR公開のコピーが利用可能に作られるべきライセンスの保証、または一般的な免許を取得するのが作られた試みの結果をIETF事務局といずれにもしたか、または http://www.ietf.org/ipr のIETFのオンラインIPR倉庫からこの仕様のimplementersかユーザによるそのような所有権の使用のために許可を得ることができます。

   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.

IETFはこの規格を実行するのに必要であるかもしれない技術をカバーするかもしれないどんな著作権もその注目していただくどんな利害関係者、特許、特許出願、または他の所有権も招待します。 ietf-ipr@ietf.org のIETFに情報を記述してください。

Pelletier & Sandlund        Standards Track                   [Page 124]

ペレティアとSandlund標準化過程[124ページ]

一覧

 RFC 1〜100  RFC 1401〜1500  RFC 2801〜2900  RFC 4201〜4300 
 RFC 101〜200  RFC 1501〜1600  RFC 2901〜3000  RFC 4301〜4400 
 RFC 201〜300  RFC 1601〜1700  RFC 3001〜3100  RFC 4401〜4500 
 RFC 301〜400  RFC 1701〜1800  RFC 3101〜3200  RFC 4501〜4600 
 RFC 401〜500  RFC 1801〜1900  RFC 3201〜3300  RFC 4601〜4700 
 RFC 501〜600  RFC 1901〜2000  RFC 3301〜3400  RFC 4701〜4800 
 RFC 601〜700  RFC 2001〜2100  RFC 3401〜3500  RFC 4801〜4900 
 RFC 701〜800  RFC 2101〜2200  RFC 3501〜3600  RFC 4901〜5000 
 RFC 801〜900  RFC 2201〜2300  RFC 3601〜3700  RFC 5001〜5100 
 RFC 901〜1000  RFC 2301〜2400  RFC 3701〜3800  RFC 5101〜5200 
 RFC 1001〜1100  RFC 2401〜2500  RFC 3801〜3900  RFC 5201〜5300 
 RFC 1101〜1200  RFC 2501〜2600  RFC 3901〜4000  RFC 5301〜5400 
 RFC 1201〜1300  RFC 2601〜2700  RFC 4001〜4100  RFC 5401〜5500 
 RFC 1301〜1400  RFC 2701〜2800  RFC 4101〜4200 

スポンサーリンク

アクションコントローラとビューの関係

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る