|
static bool | build_ipv6_ext_pkt_list (struct list_comp *const comp, const struct ip_packet *const ip, struct rohc_list *const pkt_list) |
| Compute the list of extension headers for the current packet. More...
|
|
static unsigned int | rohc_list_get_nearest_list (const struct list_comp *const comp, const struct rohc_list *const pkt_list, bool *const is_new_list) |
| Search the nearest list for the packet list. More...
|
|
static int | rohc_list_decide_type (struct list_comp *const comp) |
| Decide the encoding type for compression list. More...
|
|
static int | rohc_list_encode_type_0 (struct list_comp *const comp, uint8_t *const dest, int counter) |
| Build encoding type 0 for list compression. More...
|
|
static int | rohc_list_encode_type_1 (struct list_comp *const comp, uint8_t *const dest, int counter) |
| Build encoding type 1 for list compression. More...
|
|
static int | rohc_list_encode_type_2 (struct list_comp *const comp, uint8_t *const dest, int counter) |
| Build encoding type 2 for list compression. More...
|
|
static int | rohc_list_encode_type_3 (struct list_comp *const comp, uint8_t *const dest, int counter) |
| Build encoding type 3 for list compression. More...
|
|
static size_t | rohc_list_compute_ins_mask (const struct list_comp *const comp, const struct rohc_list *const ref_list, const struct rohc_list *const cur_list, const uint8_t rem_mask[ROHC_LIST_ITEMS_MAX], uint8_t ins_mask[ROHC_LIST_ITEMS_MAX], uint8_t *const rohc_data, const size_t rohc_max_len) |
| Determine the insertion bit mask. More...
|
|
static size_t | rohc_list_compute_rem_mask (const struct list_comp *const comp, const struct rohc_list *const ref_list, const struct rohc_list *const cur_list, uint8_t rem_mask[ROHC_LIST_ITEMS_MAX], uint8_t *const rohc_data, const size_t rohc_max_len) |
| Determine the removal bit mask. More...
|
|
static uint8_t | rohc_list_compute_ps (const struct list_comp *const comp, const struct rohc_list *const list, const uint8_t mask[ROHC_LIST_ITEMS_MAX], const size_t m) |
| Determine whether we should use 4-bit or 8-bit indexes. More...
|
|
static int | rohc_list_build_XIs (const struct list_comp *const comp, const struct rohc_list *const list, const uint8_t mask[ROHC_LIST_ITEMS_MAX], const size_t ps, uint8_t *const rohc_data, const size_t rohc_max_len, uint8_t *const first_4b_xi) |
| Build the list of indexes (XI) More...
|
|
static int | rohc_list_build_XIs_8 (const struct list_comp *const comp, const struct rohc_list *const list, const uint8_t mask[ROHC_LIST_ITEMS_MAX], uint8_t *const rohc_data, const size_t rohc_max_len) |
| Build the list of 8-bit indexes (XI) More...
|
|
static int | rohc_list_build_XIs_4 (const struct list_comp *const comp, const struct rohc_list *const list, const uint8_t mask[ROHC_LIST_ITEMS_MAX], uint8_t *const rohc_data, const size_t rohc_max_len, uint8_t *const first_4b_xi) |
| Build the list of 4-bit indexes (XI) More...
|
|
bool | detect_ipv6_ext_changes (struct list_comp *const comp, const struct ip_packet *const ip, bool *const list_struct_changed, bool *const list_content_changed) |
| Detect changes within the list of IPv6 extension headers. More...
|
|
int | rohc_list_encode (struct list_comp *const comp, uint8_t *const dest, int counter) |
| Generic encoding of compressed list. More...
|
|
void | rohc_list_update_context (struct list_comp *const comp) |
| Update the list compression context. More...
|
|
ROHC generic list compression.
- Author
- Didier Barvaux didie.nosp@m.r@ba.nosp@m.rvaux.nosp@m..org
static int rohc_list_encode_type_0 |
( |
struct list_comp *const |
comp, |
|
|
uint8_t *const |
dest, |
|
|
int |
counter |
|
) |
| |
|
static |
Build encoding type 0 for list compression.
Encoding type 0 (5.8.6.1):
0 1 2 3 4 5 6 7
--- --- --- --- --- --- --- ---
1 | ET = 0| GP| PS| CC = m |
+---+---+---+---+---+---+---+---+
2 : gen_id : 1 octet, if GP = 1
+---+---+---+---+---+---+---+---+
| XI 1, ..., XI m | m octets, or m * 4 bits
3 / --- --- --- --- /
| : Padding : if PS = 0 and m is odd
+---+---+---+---+---+---+---+---+
| |
4 / item 1, ..., item n / variable length
| |
+---+---+---+---+---+---+---+---+
ET: Encoding type is zero.
GP: Indicates presence of gen_id field.
PS: Indicates size of XI fields:
PS = 0 indicates 4-bit XI fields;
PS = 1 indicates 8-bit XI fields.
CC: CSRC counter from original RTP header.
gen_id: Identifier for a sequence of identical lists. It is
present in U/O-mode when the compressor decides that it may use
this list as a future reference list.
XI 1, ..., XI m: m XI items. The format of an XI item is as
follows:
+---+---+---+---+
PS = 0: | X | Index |
+---+---+---+---+
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
PS = 1: | X | Index |
+---+---+---+---+---+---+---+---+
X = 1 indicates that the item corresponding to the Index
is sent in the item 0, ..., item n list.
X = 0 indicates that the item corresponding to the Index is
not sent.
When 4-bit XI items are used and m > 1, the XI items are placed in
octets in the following manner:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| XI k | XI k + 1 |
+---+---+---+---+---+---+---+---+
Padding: A 4-bit padding field is present when PS = 0 and m is
odd. The Padding field is set to zero when sending and ignored
when receiving.
Item 1, ..., item n:
Each item corresponds to an XI with X = 1 in XI 1, ..., XI m.
- Parameters
-
comp | The list compressor |
dest | The ROHC packet under build |
counter | The current position in the rohc-packet-under-build buffer |
- Returns
- The new position in the rohc-packet-under-build buffer, -1 in case of error
static int rohc_list_encode_type_1 |
( |
struct list_comp *const |
comp, |
|
|
uint8_t *const |
dest, |
|
|
int |
counter |
|
) |
| |
|
static |
Build encoding type 1 for list compression.
Encoding type 1 (5.8.6.2):
0 1 2 3 4 5 6 7
--- --- --- --- --- --- --- ---
1 | ET = 1| GP| PS| XI 1 |
+---+---+---+---+---+---+---+---+
2 : gen_id : 1 octet, if GP = 1
+---+---+---+---+---+---+---+---+
3 | ref_id |
+---+---+---+---+---+---+---+---+
4 / insertion bit mask / 1-2 octets
+---+---+---+---+---+---+---+---+
| XI list | k octets, or (k - 1) * 4 bits
5 / --- --- --- --- /
| : Padding : if PS = 0 and k is even
+---+---+---+---+---+---+---+---+
| |
6 / item 1, ..., item n / variable
| |
+---+---+---+---+---+---+---+---+
ET: Encoding type is one (1).
GP: Indicates presence of gen_id field.
PS: Indicates size of XI fields:
PS = 0 indicates 4-bit XI fields;
PS = 1 indicates 8-bit XI fields.
XI 1: When PS = 0, the first 4-bit XI item is placed here.
When PS = 1, the field is set to zero when sending, and
ignored when receiving.
ref_id: The identifier of the reference CSRC list used when the
list was compressed. It is the 8 least significant bits of
the RTP Sequence Number in R-mode and gen_id (see section
5.8.2) in U/O-mode.
insertion bit mask: Bit mask indicating the positions where new
items are to be inserted. See Insertion Only scheme in
section 5.8.3. The bit mask can have either of the
following two formats:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 7-bit mask | bit 1 is the first bit
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| 1 | | bit 1 is the first bit
+---+ 15-bit mask +
| | bit 7 is the last bit
+---+---+---+---+---+---+---+---+
XI list: XI fields for items to be inserted. When the insertion
bit mask has k ones, the total number of XI fields is k. When
PS = 1, all XI fields are in the XI list. When PS = 0, the
first XI field is in the XI 1 field, and the remaining k - 1
XI fields are in the XI list.
Padding: Present when PS = 0 and k is even.
item 1, ..., item n: One item for each XI field with the X bit set.
- Parameters
-
comp | The list compressor |
dest | The ROHC packet under build |
counter | The current position in the rohc-packet-under-build buffer |
- Returns
- The new position in the rohc-packet-under-build buffer, -1 in case of error
static int rohc_list_encode_type_3 |
( |
struct list_comp *const |
comp, |
|
|
uint8_t *const |
dest, |
|
|
int |
counter |
|
) |
| |
|
static |
Build encoding type 3 for list compression.
Encoding type 3 (5.8.6.4):
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
1 | ET=3 |GP |PS | XI 1 |
+---+---+---+---+---+---+---+---+
2 : gen_id : 1 octet, if GP = 1
+---+---+---+---+---+---+---+---+
3 | ref_id |
+---+---+---+---+---+---+---+---+
4 / removal bit mask / 1-2 octets
+---+---+---+---+---+---+---+---+
5 / insertion bit mask / 1-2 octets
+---+---+---+---+---+---+---+---+
| XI list | k octets, or (k - 1) * 4 bits
6 / --- --- --- --- /
| : Padding : if PS = 0 and k is even
+---+---+---+---+---+---+---+---+
| |
7 / item 1, ..., item n / variable
| |
+---+---+---+---+---+---+---+---+
ET: Encoding type is 3.
GP: Indicates presence of gen_id field.
PS: Indicates size of XI fields:
PS = 0 indicates 4-bit XI fields;
PS = 1 indicates 8-bit XI fields.
gen_id: Identifier for a sequence of identical lists. It is
present in U/O-mode when the compressor decides that it may use
this list as a future reference list.
ref_id: The identifier of the reference CSRC list used when the
list was compressed. It is the 8 least significant bits of
the RTP Sequence Number in R-mode and gen_id (see section
5.8.2) in U/O-mode.
removal bit mask: Indicates the elements in ref_list to be
removed in order to obtain the current list. See section
5.8.3. The bit mask can have either of the following two
formats:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 7-bit mask | bit 1 is the first bit
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| 1 | | bit 1 is the first bit
+---+ 15-bit mask +
| | bit 7 is the last bit
+---+---+---+---+---+---+---+---+
insertion bit mask: Bit mask indicating the positions where new
items are to be inserted. See Insertion Only scheme in
section 5.8.3. The bit mask can have either of the
following two formats:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 7-bit mask | bit 1 is the first bit
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| 1 | | bit 1 is the first bit
+---+ 15-bit mask +
| | bit 7 is the last bit
+---+---+---+---+---+---+---+---+
XI list: XI fields for items to be inserted. When the insertion
bit mask has k ones, the total number of XI fields is k. When
PS = 1, all XI fields are in the XI list. When PS = 0, the
first XI field is in the XI 1 field, and the remaining k - 1
XI fields are in the XI list.
Padding: Present when PS = 0 and k is even.
item 1, ..., item n: One item for each XI field with the X bit set.
- Parameters
-
comp | The list compressor |
dest | The ROHC packet under build |
counter | The current position in the rohc-packet-under-build buffer |
- Returns
- The new position in the rohc-packet-under-build buffer, -1 in case of error