Robust Header Compression E. Brinkmann
Internet-Draft C. Bormann
Expires: April 18, 2005 Universitaet Bremen TZI
October 18, 2004
RTP-ROHC in ROHC Formal Notation
draft-brinkmann-rohc-3095-fn-00.txt
Status of this Memo
This document is an Internet-Draft and is subject to all provisions
of section 3 of RFC 3667. By submitting this Internet-Draft, each
author represents that any applicable patent or other IPR claims of
which he or she is aware have been or will be disclosed, and any of
which he or she become aware will be disclosed, in accordance with
RFC 3668.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as
Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on April 18, 2005.
Copyright Notice
Copyright (C) The Internet Society (2004).
Abstract
RFC 3095 [2] defines four ROHC profiles for the header compression of
IP, UDP, RTP, ESP, and related protocol headers. RFC 3095 is defined
in English language and taditional RFC box notation. The present
document gives a definition of RFC 3095's packet formats in the ROHC
Formal Notation that was defined to facilitate the development of the
TCP header compression ROHC profile.
Brinkmann & Bormann Expires April 18, 2005 [Page 1]
Internet-Draft 3095-FN October 2004
$Revision: 1.10 $
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. RFC 3095 Formal Notation Specification . . . . . . . . . . . 3
3. References . . . . . . . . . . . . . . . . . . . . . . . . . 21
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 22
Intellectual Property and Copyright Statements . . . . . . . 23
Brinkmann & Bormann Expires April 18, 2005 [Page 2]
Internet-Draft 3095-FN October 2004
1. Introduction
RFC 3095 [2] defines four ROHC profiles for the header compression of
IP, UDP, RTP, ESP, and related protocol headers. RFC 3095 is defined
in English language and taditional RFC box notation.
ROHC FN [1] is a formal notation designed to help with the creation
of new ROHC RFC-3095 [2] header compression profiles, in particular
the TCP ROHC [3] profile currently under development.
The present document gives a definition of RFC 3095's packet formats
in the ROHC Formal Notation defined for the TCP header compression
ROHC profile.
This work is intended to serve three purposes:
o validate ROHC-FN further by showing that large parts of RFC 3095
can be reasonably specified in it,
o facilitate work on automatic validation and test case generation
for RFC 3095, and
o possibly contribute to a Draft Standard version of RFC 3095 and
related profiles (LLA [4], R-mode LLA [5], IP ROHC [6], and
UDP-lite based RTP ROHC [7]), in case it is decided to use ROHC-FN
to facilitate advancing these documents to Draft Standards level.
A number of caveats apply to the current version of the
specification:
o Formats are currently defined for profile 0x0001 (RTP) only. The
other RFC 3095 profiles, as well as the profiles for the related
standards, will be added once the profile 0x0001 specification
stabilizes.
o The current specification is based on an interim state of the
ROHC-FN notation. This interim state has significant changes from
the -03 version [1] referenced above. Further changes might occur
on the way to the -04 version of the notation, which cannot be
tracked in this document because a later draft deadline applies to
the notation.
o There are still a few open issues. In particular, the way list
notation can be used to represent RFC 3095 list compression is not
yet entirely worked out. Further open issues include the handling
of GRE and authentication header data and the encoding of
extension formats. Finally, the extent to which the expressive
power of the notation should be used to express the english
language constraints noted with the individual packet formats
needs to be decided. See the FIXMEs below for details.
2. RFC 3095 Formal Notation Specification
Brinkmann & Bormann Expires April 18, 2005 [Page 3]
Internet-Draft 3095-FN October 2004
%% RFC 3095 Profile 0x0001 (RTP/UDP/IP) in ROHC-FN
% $Revision: 1.20 $
% TODO:
%
% - handle AH and GRE
% - extension formats
% - CSRC list (currently defined as static, must use list encoding)
% - further conditions for selection / disambiguation between different
% packet formats in rtp_udp_ip structure (for R-1*, UO-1* and UOR-2*,
% see comments below and notes in RFC 3095)
% - better description for encoding methods not defined in FN
% (RTP timestamp encoding and others)
% Notes:
%
% - This specification uses the field attributes 'context_value' and
% 'context_length' which are not defined in the current FN draft
% to refer to a field's context value.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Encoding methods used in this profile that are not defined in FN:
ah_data(ah) === "Encoding of authentication header data according to
section 5.8.4.2 of RFC 3095";
% FIXME: AH handling needs some extensions to decide at which
% place in the compressed header the data appear (depending on
% the conditions specified in 5.8.4.2).
inferred_ipv4_length === "This encoding method does not generate any bits
in the compressed header. Upon decompression the uncomp_value
attribute of the IPv4 total length field is inferred from the
amount of uncompressed data.";
inferred_ipv6_length === "This encoding method does not generate any bits
in the compressed header. Upon decompression the uncomp_value
attribute of the IPv6 payload length field is inferred from
the amount of uncompressed data.";
inferred_udp_length === "This encoding method does not generate any bits
in the compressed header. Upon decompression the uncomp_value
attribute of the UDP length field is inferred from the amount
of uncompressed data.";
inferred_ipv4_header_checksum === "This encoding method does not generate
Brinkmann & Bormann Expires April 18, 2005 [Page 4]
Internet-Draft 3095-FN October 2004
any bits in the compressed header. Upon decompression the
checksum value is re-calculated from the uncompressed header
data as specified in section 3.1 of RFC 791.";
inferred_rtp_timestamp === "This encoding method does not generate any
bits in the compressed header. Upon decompression the
uncompressed timestamp value is calculated from the RTP
sequence number.";
% FIXME: Detailed description / reference
rtp_timestamp(bits) === "Compresses RTP timestamps as described in
section 5.7 of RFC 3095";
%
% If value(TIME_STRIDE) > 0, timer-based compression of the RTP
% Timestamp is used (see section 4.5.4).
%
% If value(Tsc) = 1, Scaled RTP Timestamp encoding is used before
% compression (see section 4.5.3), and default-slope(TS) = 1.
%
% If value(Tsc) = 0, the Timestamp value is compressed as-is, and
% default-slope(TS) = value(TS_STRIDE).
%
% The interpretation intervals, see section 4.5.1, are defined as
% follows:
%
% p = 2^(bits(TS)-2) - 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Misc Stuff
%
crc3 (data_value, data_length) ===
{
uncompressed_format = ;
compressed_format = crc_value, %[ 3 ]
{
crc_value ::= crc(3, 0x06, 0x07, data_value, data_length);
};
};
crc7 (data_value, data_length) ===
{
uncompressed_format = ;
compressed_format = crc_value, %[ 7 ]
Brinkmann & Bormann Expires April 18, 2005 [Page 5]
Internet-Draft 3095-FN October 2004
{
crc_value ::= crc(7, 0x79, 0x7f, data_value, data_length);
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% IPv4 Header
%
ipv4 (id, rnd, nbo) === {
uncompressed_format = version, %[ 4 ]
hdr_length, %[ 4 ]
tos, %[ 6 ]
ecn_flags, %[ 2 ]
length, %[ 16 ]
ip_id, %[ 16 ]
df, %[ 1 ]
mf, %[ 1 ]
rf, %[ 1 ]
offset, %[ 13 ]
ttl, %[ 8 ]
protocol, %[ 8 ]
checksum, %[ 16 ]
src_addr, %[ 32 ]
dst_addr; %[ 32 ]
default_methods =
{
% FIXME: The fields ip_id_rnd and ip_id_nbo are flags that
% are NOT present in the compressed or uncompressed IPv4
% header. They should be bound with the RND and NBO flags
% corresponding to this IPv4 header.
%
let (ip_id_rnd:uncomp_length == 1);
let (ip_id_nbo:uncomp_length == 1);
version ::= uncompressed_value(4, 4);
hdr_length ::= uncompressed_value(4, 5);
tos ::= static;
ecn_flags ::= static;
length ::= inferred_ipv4_length;
ip_id ::= irregular(16);
ip_id_rnd ::= static;
ip_id_nbo ::= static;
df ::= static;
Brinkmann & Bormann Expires April 18, 2005 [Page 6]
Internet-Draft 3095-FN October 2004
mf ::= uncompressed_value(1, 0);
rf ::= static;
offset ::= uncompressed_value(13, 0);
ttl ::= static;
protocol ::= static; % in RTP/UDP/IP profile always 17 (UDP)
checksum ::= inferred_ipv4_header_checksum;
src_addr ::= static;
dst_addr ::= static;
};
format_ipv4 =
{
let (id == ip_id:uncomp_value);
let (rnd == ip_id_rnd:uncomp_value);
let (nbo == ip_id_nbo:uncomp_value);
};
};
ip_id_offset (nbits, sn, id1, rnd1, nbo1, id2, rnd2, nbo2) === {
% id1 (+ rnd1, nbo1) = IP-ID of inner IP header
% id2 (+ rnd2, nbo2) = IP-ID of outer IP header
% This encoding method will succeed only when rnd (which
% should be the RND or RND2 flag) is 0, i.e. packet formats
% using this method are not applicable to packet streams with
% random IP-IDs.
uncompressed_format = ;
format_inner_nbo = ip_id,
{
let (rnd1 == 0);
let (nbo1 == 1);
let (ip_id:uncomp_value == id1 - sn);
let (ip_id:uncomp_length == 16);
ip_id ::= lsb(nbits, 0);
};
format_inner_non_nbo = ip_id,
{
let (rnd1 == 0);
let (nbo1 == 0);
let (ip_id:uncomp_value ==
Brinkmann & Bormann Expires April 18, 2005 [Page 7]
Internet-Draft 3095-FN October 2004
((id1 / 256) + (id1 & 255) * 256) - sn);
let (ip_id:uncomp_length == 16);
ip_id ::= lsb(nbits, 0);
};
format_outer_nbo = ip_id,
{
let (rnd1 == null || rnd1 == 1);
let (rnd2 == 0);
let (nbo2 == 1);
let (ip_id:uncomp_value == id2 - sn);
let (ip_id:uncomp_length == 16);
ip_id ::= lsb(nbits, 0);
};
format_outer_non_nbo = ip_id,
{
let (rnd1 == null || rnd1 == 1);
let (rnd2 == 0);
let (nbo2 == 0);
let (ip_id:uncomp_value ==
((id2 / 256) + (id2 & 255) * 256) - sn);
let (ip_id:uncomp_length == 16);
ip_id ::= lsb(nbits, 0);
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% IPv6 Header
%
ipv6 === {
uncompressed_format = version, %[ 4 ]
traffic_class, %[ 6 ]
ecn_flags, %[ 2 ]
flow_label, %[ 20 ]
payload_length, %[ 16 ]
next_header, %[ 8 ]
hop_limit, %[ 8 ]
Brinkmann & Bormann Expires April 18, 2005 [Page 8]
Internet-Draft 3095-FN October 2004
src_addr, %[ 128 ]
dst_addr; %[ 128 ]
default_methods =
{
version ::= uncompressed_value(4, 6);
traffic_class ::= static;
ecn_flags ::= static;
flow_label ::= static;
payload_length ::= inferred_ipv6_length;
next_header ::= static;
hop_limit ::= static;
src_addr ::= static;
dst_addr ::= static;
};
compressed_format = ;
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% IP Headers
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ip_headers (id1, rnd1, nbo1, id2, rnd2, nbo2) === {
% id1 (+ rnd1, nbo1) = IP-ID of inner IP header
% id2 (+ rnd2, nbo2) = IP-ID of outer IP header
uncompressed_format_ipv4 = ipv4_header;
uncompressed_format_ipv6 = ipv6_header;
uncompressed_format_ipv4v4 = outer_ipv4_header,
inner_ipv4_header;
uncompressed_format_ipv4v6 = outer_ipv4_header,
inner_ipv6_header;
uncompressed_format_ipv6v4 = outer_ipv6_header,
inner_ipv4_header;
uncompressed_format_ipv6v6 = outer_ipv6_header,
inner_ipv6_header;
format_ipv4 =
Brinkmann & Bormann Expires April 18, 2005 [Page 9]
Internet-Draft 3095-FN October 2004
{
ipv4_header ::= ipv4(id1, rnd1, nbo1);
let (id2 == null);
let (rnd2 == null);
let (nbo2 == null);
};
format_ipv6 =
{
ipv6_header ::= ipv6;
let (id1 == null);
let (rnd1 == null);
let (nbo1 == null);
let (id2 == null);
let (rnd2 == null);
let (nbo2 == null);
};
format_ipv4v4 =
{
outer_ipv4_header ::= ipv4(id2, rnd2, nbo2);
inner_ipv4_header ::= ipv4(id1, rnd1, nbo1);
};
format_ipv4v6 =
{
outer_ipv4_header ::= ipv4(id2, rnd2, nbo2);
inner_ipv6_header ::= ipv6;
let (id1 == null);
let (rnd1 == null);
let (nbo1 == null);
};
format_ipv6v4 =
{
outer_ipv6_header ::= ipv6;
inner_ipv4_header ::= ipv4(id1, rnd1, nbo1);
let (id2 == null);
let (rnd2 == null);
let (nbo2 == null);
};
format_ipv6v6 =
{
outer_ipv6_header ::= ipv6;
inner_ipv6_header ::= ipv6;
let (id1 == null);
let (rnd1 == null);
Brinkmann & Bormann Expires April 18, 2005 [Page 10]
Internet-Draft 3095-FN October 2004
let (nbo1 == null);
let (id2 == null);
let (rnd2 == null);
let (nbo2 == null);
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UDP Header
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
udp_header (udpcs, udpcs_ctx) === {
uncompressed_format = udp_src_port, %[ 16 ]
udp_dst_port, %[ 16 ]
udp_length, %[ 16 ]
udp_checksum; %[ 16 ]
default_methods =
{
udp_src_port ::= static;
udp_dst_port ::= static;
udp_length ::= inferred_udp_length;
udp_checksum ::= irregular(16); % NOTE: This is used
% for the uncompressed
}; % side of it only:
format_compressed = % NOTE: udp_checksum not present here!
{
let (udp_checksum:uncomp_length == 16);
let (udpcs == udp_checksum:uncomp_value);
let (udp_checksum:context_length == 16);
let (udpcs_ctx == udp_checksum:context_value);
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Extension formats (section 5.7.5 of RFC 3095)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Brinkmann & Bormann Expires April 18, 2005 [Page 11]
Internet-Draft 3095-FN October 2004
extension (x) === {
uncompressed_format = ;
format_without_extension =
{
let (x == 0);
};
% FIXME: The following four extension formats do not yet contain
% the encodings for their fields. These will need several additional
% structures (in particular for the optional fields) to be defined.
% A number of values will have to be passed as additional parameters
% to this structure as their uncompressed side is defined in other
% structures.
format_extension0 = discriminator, %[ 2 ]
sn, %[ 3 ]
pt, %[ 3 ]
{
let (x == 1);
discriminator ::= '00';
};
format_extension1 = discriminator, %[ 2 ]
sn, %[ 3 ]
pt, %[ 3 ]
mt, %[ 8 ]
{
let (x == 1);
discriminator ::= '01';
};
format_extension2 = discriminator, %[ 2 ]
sn, %[ 3 ]
pt, %[ 11 ]
mt, %[ 8 ]
{
let (x == 1);
discriminator ::= '10';
};
format_extension3 = discriminator, %[ 2 ]
s, %[ 1 ]
r_ts, %[ 1 ]
tsc, %[ 1 ]
i, %[ 1 ]
ip, %[ 1 ]
Brinkmann & Bormann Expires April 18, 2005 [Page 12]
Internet-Draft 3095-FN October 2004
rtp, %[ 1 ]
inner_ip_flags, % 0 or 7 bits
ip2, % 0 or 1 bit
outer_ip_flags, % 0 or 8 bits
sn, % 0 or 8 bits
ts, % 0 to 4 octets
inner_ip_fields, % optional, variable length
ip_id, % 0 or 16 bits
outer_ip_fields, % optional, variable length
rtp_flags_and_fields, % optional, variable length
{
let (x == 1);
discriminator ::= '11';
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Random Parts
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
random_ip_id (id, rnd) === {
uncompressed_format = ;
format_without_ip_id =
{
let (rnd == 0);
};
format_with_ip_id = ip_id,
{
let (rnd == 1);
let (id == ip_id:uncomp_value);
ip_id ::= irregular(16);
};
};
random_ah_data (ah) === {
uncompressed_format = ;
format_without_ah_data =
Brinkmann & Bormann Expires April 18, 2005 [Page 13]
Internet-Draft 3095-FN October 2004
{
let (ah == null);
};
format_with_ah_data = ah_data,
{
let (ah != null);
ah_data ::= ah_data(ah);
};
};
random_gre_checksum (gre) === {
uncompressed_format = ;
format_without_gre_checksum =
{
let (gre == null);
};
format_with_gre_checksum = gre_checksum,
{
let (gre != null);
let (gre == gre_checksum:uncomp_value);
gre_checksum ::= irregular(16);
};
};
random_ip_data (id, rnd, ah, gre) === {
uncompressed_format = ;
compressed_format = ip_id,
ah_data,
gre_checksum,
{
ip_id ::= random_ip_id(id, rnd);
ah_data ::= random_ah_data(ah);
gre_checksum ::= random_gre_checksum(gre);
};
};
Brinkmann & Bormann Expires April 18, 2005 [Page 14]
Internet-Draft 3095-FN October 2004
random_udp_checksum (udpcs, udpcs_ctx) === {
uncompressed_format = ;
format_without_udp_checksum =
{
let (udpcs_ctx == 0);
let (udpcs == 0);
};
format_with_udp_checksum = udp_checksum,
{
let (udpcs_ctx != 0);
let (udpcs == udp_checksum:uncomp_value);
udp_checksum ::= irregular(16);
};
};
random_parts (id1, rnd1, id2, rnd2,
ah1, ah2, gre1, gre2, udpcs, udpcs_ctx) === {
uncompressed_format = ;
compressed_format = outer_ip,
inner_ip,
udp_checksum,
{
outer_ip ::= random_ip_data(id1, rnd1, ah1, gre1);
inner_ip ::= random_ip_data(id2, rnd2, ah2, gre2);
udp_checksum ::= random_udp_checksum(udpcs, udpcs_ctx);
};
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% RTP/UDP/IP Header
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R = 0; % compression modes
U = 1;
O = 2;
Brinkmann & Bormann Expires April 18, 2005 [Page 15]
Internet-Draft 3095-FN October 2004
rtp_udp_ip === {
uncompressed_format = ip_headers,
udp_header, %[ 8 ]
version, %[ 2 ]
padding, %[ 1 ]
rtpext, %[ 1 ]
csrc_count, %[ 4 ]
marker, %[ 1 ]
payload, %[ 7 ]
seq_number, %[ 16 ]
timestamp, %[ 32 ]
ssrc, %[ 32 ]
csrc;
default_methods =
{
% FIXME: The mode field represents the current mode of
% operation. This binding is not yet specified by means
% of the FN syntax.
let (mode:uncomp_length == 2);
mode ::= static;
%
ip_headers ::= ip_headers(id1, rnd1, nbo1,
id2, rnd2, nbo2);
%
udp_header ::= udp_header(udpcs, udpcs_ctx);
%
version ::= uncompressed_value(2, 2);
padding ::= static;
rtpext ::= static;
csrc_count ::= static;
marker ::= static;
payload ::= static;
timestamp ::= inferred_rtp_timestamp;
ssrc ::= static;
csrc ::= static;
%
x ::= irregular(1);
extension ::= extension(x);
%
% FIXME: AH data and GRE checksums
random_parts ::= random_parts(id1, rnd1,
id2, rnd2,
null, null, % AH data 1 + 2
null, null, % GRE checksums
udpcs, udpcs_ctx);
Brinkmann & Bormann Expires April 18, 2005 [Page 16]
Internet-Draft 3095-FN October 2004
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%% 5.7.1. Packet type 0: UO-0, R-0, R-0-CCR
format_r_0 = discriminator, %[ 2 ]
seq_number, %[ 6 ]
random_parts,
{
let (mode:uncomp_value == R);
discriminator ::= '00';
seq_number ::= lsb(6, 1);
};
format_r_0_crc = discriminator, %[ 2 ]
seq_number, %[ 7 ]
crc, %[ 7 ]
random_parts,
{
let (mode:uncomp_value == R);
discriminator ::= '01';
seq_number ::= lsb(7, 3);
crc ::= crc7(this:uncomp_value, this:uncomp_length);
};
format_uo_0 = discriminator, %[ 1 ]
seq_number, %[ 4 ]
crc, %[ 3 ]
random_parts,
{
let (mode:uncomp_value == U || mode:uncomp_value == O);
discriminator ::= '0';
seq_number ::= lsb(4, 1);
crc ::= crc3(this:uncomp_value, this:uncomp_length);
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%% 5.7.2. Packet type 1 (R-mode): R-1, R-1-TS, R-1-ID
format_r_1 = discriminator, %[ 2 ]
seq_number, %[ 6 ]
Brinkmann & Bormann Expires April 18, 2005 [Page 17]
Internet-Draft 3095-FN October 2004
marker, %[ 1 ]
x, %[ 1 ]
timestamp, %[ 6 ]
extension,
random_parts,
{
let (mode:uncomp_value == R);
% FIXME: context MUST NOT contain IPv4 headers with value(RND) = 0
discriminator ::= '10';
seq_number ::= lsb(6, 1);
marker ::= irregular(1);
timestamp ::= rtp_timestamp(6);
};
format_r_1_id = discriminator, %[ 2 ]
seq_number, %[ 6 ]
marker, %[ 1 ]
x, %[ 1 ]
t, %[ 1 ]
ip_id, %[ 5 ]
extension,
random_parts,
{
let (mode:uncomp_value == R);
% FIXME: context MUST contain at least one IPv4 header
let (rnd1 == 0 || rnd2 == 0);
discriminator ::= '10';
seq_number ::= lsb(6, 1);
marker ::= irregular(1);
t ::= '0';
ip_id ::= ip_id_offset(5, seq_number:uncomp_value,
id1, rnd1, nbo1,
id2, rnd2, nbo2);
};
format_r_1_ts = discriminator, %[ 2 ]
seq_number, %[ 6 ]
marker, %[ 1 ]
x, %[ 1 ]
t, %[ 1 ]
timestamp, %[ 5 ]
extension,
random_parts,
{
let (mode:uncomp_value == R); % FIXME: see note in 3095
discriminator ::= '10';
Brinkmann & Bormann Expires April 18, 2005 [Page 18]
Internet-Draft 3095-FN October 2004
seq_number ::= lsb(6, 1);
marker ::= irregular(1);
t ::= '1';
timestamp ::= rtp_timestamp(5);
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%% 5.7.3. Packet type 1 (U/O-mode): UO-1, UO-1-ID, UO-1-TS
format_uo_1 = discriminator, %[ 2 ]
timestamp, %[ 6 ]
marker, %[ 1 ]
seq_number, %[ 4 ]
crc, %[ 3 ]
random_parts,
{
let (mode:uncomp_value == U || mode:uncomp_value == O);
% FIXME: see note in 3095
discriminator ::= '10';
timestamp ::= rtp_timestamp(6);
marker ::= irregular(1);
seq_number ::= lsb(4, 1);
crc ::= crc3(this:uncomp_value, this:uncomp_length);
};
format_uo_1_id = discriminator, %[ 2 ]
t, %[ 1 ]
ip_id, %[ 5 ]
x, %[ 1 ]
seq_number, %[ 4 ]
crc, %[ 3 ]
extension,
random_parts,
{
let (mode:uncomp_value == U || mode:uncomp_value == O);
% FIXME: see note in 3095
discriminator ::= '10';
t ::= '0';
ip_id ::= ip_id_offset(5, seq_number:uncomp_value,
id1, rnd1, nbo1,
id2, rnd2, nbo2);
seq_number ::= lsb(4, 1);
crc ::= crc3(this:uncomp_value, this:uncomp_length);
};
Brinkmann & Bormann Expires April 18, 2005 [Page 19]
Internet-Draft 3095-FN October 2004
format_uo_1_ts = discriminator, %[ 2 ]
t, %[ 1 ]
timestamp, %[ 5 ]
marker, %[ 1 ]
seq_number, %[ 4 ]
crc, %[ 3 ]
random_parts,
{
let (mode:uncomp_value == U || mode:uncomp_value == O);
% FIXME: see note in 3095
discriminator ::= '10';
t ::= '1';
timestamp ::= rtp_timestamp(5);
marker ::= irregular(1);
seq_number ::= lsb(4, 1);
crc ::= crc3(this:uncomp_value, this:uncomp_length);
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%% 5.7.4. Packet type 2: UOR-2
format_uor_2 = discriminator, %[ 3 ]
timestamp, %[ 6 ]
marker, %[ 1 ]
seq_number, %[ 6 ]
x, %[ 1 ]
crc, %[ 7 ]
extension,
random_parts,
{
% FIXME: restrictions (see note in 3095)
discriminator ::= '110';
timestamp ::= rtp_timestamp(6);
marker ::= irregular(1);
seq_number ::= lsb(6, 1);
crc ::= crc7(this:uncomp_value, this:uncomp_length);
};
format_uor_2_id = discriminator, %[ 3 ]
ip_id, %[ 5 ]
t, %[ 1 ]
marker, %[ 1 ]
seq_number, %[ 6 ]
x, %[ 1 ]
crc, %[ 7 ]
Brinkmann & Bormann Expires April 18, 2005 [Page 20]
Internet-Draft 3095-FN October 2004
extension,
random_parts,
{
% FIXME: restrictions (see note in 3095)
discriminator ::= '110';
ip_id ::= ip_id_offset(5, seq_number:uncomp_value,
id1, rnd1, nbo1,
id2, rnd2, nbo2);
t ::= '0';
marker ::= irregular(1);
seq_number ::= lsb(6, 1);
crc ::= crc7(this:uncomp_value, this:uncomp_length);
};
format_uor_2_ts = discriminator, %[ 3 ]
timestamp, %[ 5 ]
t, %[ 1 ]
marker, %[ 1 ]
seq_number, %[ 6 ]
x, %[ 1 ]
crc, %[ 7 ]
extension,
random_parts,
{
% FIXME: restrictions (see note in 3095)
discriminator ::= '110';
timestamp ::= rtp_timestamp(5);
t ::= '1';
marker ::= irregular(1);
seq_number ::= lsb(6, 1);
crc ::= crc7(this:uncomp_value, this:uncomp_length);
};
};
3 References
[1] Price, R., "Formal Notation for Robust Header Compression
(ROHC-FN)", draft-ietf-rohc-formal-notation-03 (work in
progress), July 2004.
[2] 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",
Brinkmann & Bormann Expires April 18, 2005 [Page 21]
Internet-Draft 3095-FN October 2004
RFC 3095, July 2001.
[3] Pelletier, G., "RObust Header Compression (ROHC): Profile for
TCP/IP (ROHC-TCP)", draft-ietf-rohc-tcp-07 (work in progress),
July 2004.
[4] Jonsson, L-E. and G. Pelletier, "RObust Header Compression
(ROHC): A Link-Layer Assisted Profile for IP/UDP/RTP", RFC 3242,
April 2002.
[5] Liu, Z. and K. Le, "Zero-byte Support for Bidirectional Reliable
Mode (R-mode) in Extended Link-Layer Assisted RObust Header
Compression (ROHC) Profile", RFC 3408, December 2002.
[6] Jonsson, L-E. and G. Pelletier, "RObust Header Compression
(ROHC): A Compression Profile for IP", RFC 3843, June 2004.
[7] Pelletier, G., "RObust Header Compression (ROHC):Profiles for
UDP-Lite", draft-ietf-rohc-udp-lite-04 (work in progress), June
2004.
Authors' Addresses
Eilert Brinkmann
Universitaet Bremen TZI
Postfach 330440
Bremen D-28334
Germany
Phone: +49 421 218 7845
Fax: +49 421 218 7000
EMail: eilert@tzi.org
Carsten Bormann
Universitaet Bremen TZI
Postfach 330440
Bremen D-28334
Germany
Phone: +49 421 218 7024
Fax: +49 421 218 7000
EMail: cabo@tzi.org
Brinkmann & Bormann Expires April 18, 2005 [Page 22]
Internet-Draft 3095-FN October 2004
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Disclaimer of Validity
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 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.
Copyright Statement
Copyright (C) The Internet Society (2004). 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.
Acknowledgment
Funding for the RFC Editor function is currently provided by the
Internet Society.
Brinkmann & Bormann Expires April 18, 2005 [Page 23]